私のAndroidアプリでは、proguardをオンにしていくつかの機能をテストしたい。
本当に「デバッグ」する必要はありませんが、Eclipseでrunを押したときにproguardを実行したいです。バイナリを毎回(したがって、リリースモードで)エクスポートし、apkとして保存し、デバイスに取得してテストする必要はありません。
この方法でプロガードを実行する方法はありますか?
更新:
not using Eclipse;の場合、これは可能だと思われます。質問のタイトルにはEclipseが含まれていないため、この質問には複数の正解があります。
古い回答:
http://developer.Android.com/tools/help/proguard.html
ProGuardはアプリケーションをリリースモードでビルドする場合にのみ実行されるため、デバッグモードでアプリケーションをビルドするときに難読化されたコードを処理する必要はありません。
Antリリースを実行するか、EclipseでExport Wizard)を使用してreleaseモードでアプリケーションをビルドすると、ビルドシステムは自動的にproguard.config
プロパティが設定されます。そうである場合、ProGuardはすべてを。apkファイルにパッケージ化する前に、アプリケーションのバイトコードを自動的に処理します。 デバッグモードでのビルドは、ProGuardを起動しません。デバッグが煩雑になるためです。
更新:13-3-2016
新しいgradleビルドシステムで可能です。 build.gradleファイルでminifyEnabled
をtrue
に設定する必要があります。通常、releaseモードでpro-guardを実行しています。リソースの縮小など、他のオプションも利用できます。あなたはいくつかの有用な情報を見つけることができます@ http://tools.Android.com/tech-docs/new-build-system
また見てください@
http://developer.Android.com/tools/building/configuring-gradle.html
Android {
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
ビルドプロセス全体をより簡単にしたい場合は、gradleに切り替えてAndroid Studio IDE。
その後、次をbuild.gradleファイルに簡単に追加して、ProGuardを実行できます。
Android {
buildTypes {
release {
}
debug {
minifyEnabled true
proguardFile 'proguard-Android.txt'
zipAlignEnabled true
}
}
}
これにより、デバッグビルドでProGuardが実行され、「proguard-Android.txt」ファイルで構成され、プロジェクトのルートフォルダーに配置されます。また、apkはZipアライメントされています(これを行わない場合は、「zipAlignEnabled true」を削除してください)。リリースビルドで同じことをしたい場合は、「release」の下にこれらの3行を追加します。
ややオフトピック:依存関係を追加したり、apkに署名したり、ビルドプロセスに他のカスタムタスクを追加したりすることも、gradleの方が簡単です。さらに、Android Studio IDEを介してapkをビルドできるだけでなく、コマンドラインの簡単なコマンド(例:./gradlew assembleDebug)を使用してビルドすることもできます。チームでは、新しいメンバーのセットアッププロセスは「./gradlew assembleDebug」1つだけです。IDE設定は不要です。すべての依存関係を含むプロジェクトのインポートは、ワンクリックプロセス
編集:Gradle Android Build Tools version 0.14.0現在、プロパティ名が変更されました( http://tools.Android.com/tech-docs/new-build-system ):
上記のコードを更新しました。
カスタムAntビルド(およびVictorの回答に基づく)に関して、build.xmlファイルに次を追加するとうまくいきます。
<target name="-debug-obfuscation-check">
<!-- enable proguard even in debug mode -->
<property name="proguard.enabled" value="true"/>
<!-- Secondary dx input (jar files) is empty since all the jar files will be in the obfuscated jar -->
<path id="out.dex.jar.input.ref" />
</target>
Out.dex.jar.input.refをオーバーライド(実際に事前設定)しなければならなかったことに注意してください。そうでない場合、後でdxを実行すると、非結合jarがマージされ、DexExceptionがスローされます。複数のdexファイルがXxxを定義します。
Antでビルドすれば可能です。 Antを使用してプロジェクトをビルドする方法については、 Antを使用したAndroidカスタムビルド を参照してください。次に、プロジェクトのbuild.xmlでターゲット「-debug-obfuscation-check」をオーバーライドし、proguard.enabledをtrueに設定します。
<target name="-debug-obfuscation-check">
<!-- proguard is never enabled in debug mode -->
<property name="proguard.enabled" value="true"/>
</target>
Android Studioを使用すると、Proguardルールファイルで-dontobfuscate
オプションを使用でき、デバッガーは正常に動作します。Eclipeでも動作するかどうかはわかりません。