これはAndroid Studioでの最初のプロジェクトであり、アプリのコードは難読化されていません。私はbuild.gradleファイルでこの構成を使用しています:
[ビルド]> [署名済みAPKを生成...]を使用しており、[Proguardを実行]がオンになっています。また、Apk_OneClick.v4.2を使用してテストしたところ、コードは非常に読みやすくなっています。
私を助けてください。:(
これはAndroid Studioでの最初のプロジェクトであり、アプリのコードは難読化されていません。私はbuild.gradleファイルでこの構成を使用しています:
[ビルド]> [署名済みAPKを生成...]を使用しており、[Proguardを実行]がオンになっています。また、Apk_OneClick.v4.2を使用してテストしたところ、コードは非常に読みやすくなっています。
私を助けてください。:(
回答:
おそらく、署名ウィザードを介してAPKのリリースビルドに実際に署名していません。次のコマンドを使用して、コマンドラインからリリースAPKをビルドできます。
./gradlew assembleRelease
または、ビルドバリアントビューからリリースバリアントを選択し、GUIからビルドすることができます。
build.gradleファイルをproguard実装用に構成できます。モジュールレベルでもプロジェクトレベルでもかまいません。
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
示されている構成はデバッグレベル用ですが、buildTypes内に以下に示すような独自のビルドフレーバーを記述できます。
myproductionbuild{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
minifyEnabled false
として、プロダクションビルドおよびその他のビルドでデバッグすることをお勧めしますminifyEnabled true
。
次のように、モジュールまたはプロジェクトフォルダーのルートにproguard-rules.txtファイルをコピーします。
$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt
必要に応じてファイルの名前を変更できます。構成後、3つのオプションのいずれかを使用して、buildTypeに従ってビルドを生成します。
右側のパネルでgradleタスクに移動しassembleRelease/assemble(#your_defined_buildtype)
、モジュールタスクの下を検索します
左パネルのビルドバリアントに移動し、ドロップダウンからビルドを選択します
エクスプローラーでプロジェクトのルートディレクトリに移動し、cmd / terminalを開いて実行します。
Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)
ウィンドウズ gradlew assembleRelease or assemble(#your_defined_buildtype)
apkはmodule / buildディレクトリにあります。
構成ファイルとプロガードファイルの場所の詳細については、リンクを参照してください。
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard
注意:今ではなく
runProguard false
使用する必要があります
minifyEnabled false
「proguard-rules.txt」ファイルの名前を「proguard-android.txt」に変更して、gradleファイル内の「proguard-rules.txt」への参照を削除してください。このgetDefaultProguardFile(...)
呼び出しは、Googleが提供するものであり、プロジェクト内のものではない、別のデフォルトのプロガードファイルを参照します。これも削除して、gradleファイルが次のようになるようにします。
buildTypes {
release {
runProguard true
proguardFile 'proguard-android.txt'
}
}
ここでの他の答えは、proguardの使用に関する優れたリファレンスです。しかし、私がそれに遭遇したという議論がマインドベンダーであるという問題を見たことがありません。署名付きリリース.apkを生成した後、それは/release
アプリのフォルダーに入れられますが、私のアプリには/release
フォルダーにないapkがありました。したがって、私は何時間もかけて間違ったapkをデコンパイルして、なぜ私のプロガードの変更が影響を及ぼさないのか疑問に思いました。これが誰かを助けることを願っています!
以下は、proguard-rules.proに追加する必要がある最も一般的なProguardルールの一部です。Android Sutdioのファイルにます。
バターナイフ
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
後付け
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions
OkHttp3
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Gson
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
コード難読化
-keepclassmembers class com.yourname.models** { <fields>; }