web-dev-qa-db-ja.com

デバッグモードでproguardを使用することはできますか?

私のAndroidアプリでは、proguardをオンにしていくつかの機能をテストしたい。

本当に「デバッグ」する必要はありませんが、Eclipseでrunを押したときにproguardを実行したいです。バイナリを毎回(したがって、リリースモードで)エクスポートし、apkとして保存し、デバイスに取得してテストする必要はありません。

この方法でプロガードを実行する方法はありますか?

更新:

not using Eclipse;の場合、これは可能だと思われます。質問のタイトルにはEclipseが含まれていないため、この質問には複数の正解があります。

73
frankish

古い回答:

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ファイルでminifyEnabledtrueに設定する必要があります。通常、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'
    }
   }
 }
40
Raghunandan

ビルドプロセス全体をより簡単にしたい場合は、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 ):

  • BuildType.runProguard-> minifyEnabled
  • BuildType.zipAlign-> zipAlignEnabled

上記のコードを更新しました。

72
MrMaffen

カスタム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を定義します。

11
Joseph Johnson

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>
7
Victor Ionescu

Android Studioを使用すると、Proguardルールファイルで-dontobfuscateオプションを使用でき、デバッガーは正常に動作します。Eclipeでも動作するかどうかはわかりません。

0
sealskej