そんな Camscanner の代替を探す

Googleが、人気のOCR機能付きPDF作成アプリ「CamScanner」にマルウェアが見つかったとして、これをGoogle Playストアから削除しました。CamScannerはこれまでに1億回以上もダウンロードされていました。

👉 Google Playでのダウンロード数が1億超のスキャナーアプリ「CamScanner」が悪意あるアプリに変貌 | カスペルスキー公式ブログ 

👉 見つかりませんでした 

Previously, a similar module was often found in preinstalled malware on Chinese-made smartphones. It can be assumed that the reason why this malware was added was the app developers’ partnership with an unscrupulous advertiser.

以前は、中国製のスマートフォンにプリインストールされたマルウェアで同様のモジュールがしばしば発見されました。 このマルウェアが追加された理由は、アプリ開発者と悪意のある広告主とのパートナーシップにあると考えられます。

👉 An advertising dropper in Google Play | Securelist 

CamScannerはウェブサイトでAdHubと呼ばれるサードパーティの広告SDKに悪意あるモジュールが含まれていたことを明らかにし、これを取り除いたバージョンを配布しています。しかし日本語のGoogle Playストアでは、記事執筆時点では2014年の古いバージョンが配布されています。

Google PlayStore で公開できていないようで、別の場所で apk を配布しています。

Dear CamScanner Android Users,

Our CamScanner Team has recently detected that the advertisement SDK provided by a third-party named AdHub, integrated in Android Version 5.11.7, has been reported for containing a malicious module that produces unauthorized advertising clicks.
Injection of any suspicious codes violates the CamScanner Security Policy! We will take immediate legal actions against Adhub! Fortunately, after rounds of security check, we have not found any evidence showing the module could cause any leak of document data.
We have removed all the ads SDKs not certified by Google Play and a new version would be released. Meanwhile, you may follow the steps HERE to update to the new version.
We would appreciate your patience and understanding.

CamScanner Androidユーザーの皆様、

CamScannerチームは最近、Androidバージョン5.11.7に統合されたAdHubというサードパーティが提供する広告SDKが、不正な広告クリックを生成する悪意のあるモジュールを含むと報告されたことを検出しました。
不審なコードを挿入すると、CamScannerセキュリティポリシーに違反します!Adhubに対して直ちに法的措置を講じます!幸いなことに、一連のセキュリティチェックの後、モジュールがドキュメントデータのリークを引き起こす可能性があることを示す証拠は見つかりませんでした。
Google Playで認定されていないすべての広告SDKを削除しました。新しいバージョンがリリースされます。その間、こちらの手順に従って新しいバージョンに更新することができます。
ご理解とご理解のほどよろしくお願いいたします。

👉 Detail 

1. Please tap HERE to upgrade with the latest Android version 5.12.5.

2. Since the apk is not from Google Play, you may receive system notices before downloading & installing the new version. It is okay to proceed further.

3. Maybe you are using the v5.12.5 updated from Google Play, then there is no action needed. You may check out your version in the CS app Settings -- Feedback -- About.
If you have any other problems, please feel free to contact us at asupport @ intsig.com. We will help you out ASAP.

1. ここをタップして、最新のAndroidバージョン5.12.5にアップグレードしてください。

2. apkはGoogle Playのものではないため、新しいバージョンをダウンロードしてインストールする前にシステム通知を受け取る場合があります。さらに先へ進んでも構いません。

3.たぶん、Google Playから更新されたv5.12.5を使用している場合、アクションは必要ありません。CSアプリの[設定]-[フィードバック]-[バージョン情報]でバージョンを確認できます。
他に問題がある場合は、asupport @ intsig.comまでお気軽にお問い合わせください。できるだけ早くお手伝いします。

downloadForGP-apk

👉 詳細 

きっと、その広告SDKが埋め込まれてない旧バーションは PlayStore にもあります。

👉 CamScanner HD - Scanner, Fax - Google Play のアプリ 

以下、代替アプリリンク集リンク。

👉 5 Free CamScanner Alternatives for Android 

👉 7 Alternatives to CamScanner | Product Hunt 

👉 10 Best CamScanner Alternatives for Android and iOS | Beebom 

思ったよりたくさんあったので驚きました。

代替はいくらでもあるのです!!


ApplicationComponent 実装の変遷 - Dagger2

2022-03-16 追記: 新しいDagger記事は以下リンクから

👉 MVVM で Hilt のパターン化 💉  

--------

へん‐せん【変遷】
[名](スル)時の流れとともに移り変わること。「歌もまた時代につれて変遷する」

Dagger て分かりづらいです。

タイトルがすでに謎ですが、以下のような実装のことを指しています。

アプリケーションコンテキストをオブジェクトグラフに追加する

ApplicationComponent とアプリケーションコンテキストの設定

アプリケーションコンテキスト を依存先として公開する

これまで数年に渡って変化し続けてるそんな必須の実装項目です。

ネット上をただ検索するだけでは、古い記事に最新の実装記述が埋没しています。

Dagger 2.9 以前( - 2017/02/04)


@Component(modules = [ApplicationModule::class, ...])
interface ApplicationComponent {
  ...
}


@Module
class ApplicationModule(private val applicationContext: Context) {
  @Provides fun provideApplicationContext() = applicationContext
}

これは Kotlin 記述で簡略化できます。


@Module
class ApplicationModule(@get:Provides val applicationContext: Context)


DaggerApplicationComponent
  .builder()
  .applicationModule(ApplicationModule(applicationContext))
  .build()

2.9 (2017/02/04 - ) @BindsInstance

👉 Release Dagger 2.9 · google/dagger 

We create a module that receives the application context as a constructor argument, and we create a provide method that exposes it. This works great, but then we can't have static @Provides methods anymore. And besides that, this strategy is actually going against the docs that are pretty explicit when it comes to this:

@BindsInstance methods should be preferred to writing a @Module with constructor arguments and immediately providing those values.

👉 User's Guide 


@Component(modules = ...)
interface ApplicationComponent {
  @Component.Builder
  interface Builder {
    @BindsInstance 
    fun applicationContext(applicationContext: Context): Builder
    fun build(): ApplicationComponent
  }
  ...
}


DaggerApplicationComponent
  .builder()
  .applicationContext(applicationContext)
  .build()

2.22 (2019/04/03 - ) @Component.Factory

👉 Release Dagger 2.22 · google/dagger 


@Component(modules = ...)
interface ApplicationComponent {
  @Component.Factory
  interface Factory {
    fun create(@BindsInstance applicationContext: Context): ApplicationComponent
  }
  ...
}


DaggerApplicationComponent
  .factory()
  .create(applicationContext)

まとめ

最近のコード記述を理解するには、少しだけ

「成り立ちを遡ってみる」

と理解しやすいことが多いように思います。

👉 Releases · google/dagger 
👉 Dagger 2 on Android: the shiny new @Component.Factory 

2022-03-16 追記: 新しいDagger記事は以下リンクから

👉 MVVM で Hilt のパターン化 💉  


さらば proguard、ようこそ R8。

DSL element 'useProguard' is obsolete and will be removed soon. Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard..

DSL要素「useProguard」は廃止されており、まもなく削除されます。 gradle.propertiesで「android.enableR8」を使用して、R8とProguardを切り替えます。

gradle.properties


android.enableR8=true

build.gradle

とりあえずは、いけるが。

以下、編集風景。



しかし、minify とか、proguardFiles とか、どうなるの?

👉 Android Developers Blog: R8, the new code shrinker from Google, is available in Android studio 3.3 beta