アプリのリリースビルドをビルドすると、Proguardが動作しますが、APKアナライザを使用してAPKを見ても、明らかに難読化は適用されません。Proguardが私のコードを難読化しないのはなぜですか?
私の意図は、リバースエンジニアリングを少し難しくするために、難読化をAPKに適用することです。
Gradle:
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
私がGradleコンソールで見ることができるように、Proguardは確実に動作しています。
proguard-rules.pro:
-dontshrink
-dontoptimize
-keep class com.squareup.picasso.** { *; }
-dontwarn com.squareup.picasso.**
-keep class com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
-keep class kotlin.reflect.** { *; }
-dontwarn kotlin.reflect.**
-keep class javax.annotation.** { *; }
-dontwarn javax.annotation.**
-keep class org.codehaus.mojo.** { *; }
-dontwarn org.codehaus.mojo.**
Proguardのドキュメントでは、デフォルトでは難読化が実行されています。また、keepステートメントで指定されたクラスは難読化されませんが、アプリケーション自体のクラスはkeepステートメントでは指定されていませんが、難読化されていません。
さらに見ていくと、aapt_rules.txtという名前のファイルがビルドフォルダにあります。このファイルには、アプリケーションのすべてのクラスのkeepステートメントのようなものが含まれています。私はそれがなぜあるのか分からない。
Proguardを再構成して、クラスを縮小したり削除したりせずに、アプリケーション内のすべてのコード(ライブラリではなく)を難読化するにはどうすればよいですか?ラインkeep class com.squareup.picasso.** { *; }
と-keep class com.squareup.okhttp.** { *; }
を見て
proguard-rules.proのkeepステートメントのすべてのクラスは、プロジェクトが使用するライブラリクラスです。難読化する必要があるのは、プロジェクトコードそのものであり、そのファイルには言及されていません。 –
proguard_seed.txtファイルとproguard_map.txtを共有できますか – Shailesh