是否可以在调试模式下使用proguard?

fra*_*ish 73 eclipse android proguard

在我的Android应用程序中,我想用proguard测试一些功能.

我不需要真正"调试"它,但我希望proguard在我在eclipse中运行时运行.我不想每次都导出二进制文件(因此,在发布模式下)并保存为apk并将其送到设备进行测试.

有没有办法以这种方式运行proguard?

更新:

如果您使用Eclipse,这似乎是可能的; 由于问题标题不包括Eclipse,因此这个问题有多个正确答案.

MrM*_*fen 72

如果您希望更轻松地完成整个构建过程,则应切换到gradle和Android Studio IDE.

然后,您可以轻松地将以下内容添加到build.gradle文件中以运行ProGuard:

android {
    buildTypes {
        release {
        }
        debug {
            minifyEnabled true
            proguardFile 'proguard-android.txt'
            zipAlignEnabled true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在您的调试版本上运行ProGuard,配置文件"proguard-android.txt",该文件应放在项目的根文件夹中.此外,你的apk正在拉链对齐(只需删除"zipAlignEnabled true",如果你不希望这种情况发生).如果您想为发布版本执行相同操作,只需在"release"下添加这三行.

稍微偏离主题:添加依赖项,签署apk或将其他自定义任务添加到构建过程中的东西也更加简单.此外,您不仅可以通过Android Studio IDE构建apk,还可以通过命令行上的简单命令(例如./gradlew assembleDebug).因此,如果您正在组建团队,新成员的设置过程只需一个"./gradlew assembleDebug".根本不需要任何IDE配置.导入包含所有依赖项的项目就像一键式过程一样简单

编辑:从Gradle Android Build Tools版本0.14.0开始,属性名称已更改(http://tools.android.com/tech-docs/new-build-system):

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

我已经更新了上面的代码.

  • * Android Studio会自动对齐您的APK。*:https://developer.android.com/studio/command-line/zipalign.html (2认同)

Rag*_*dan 40

旧答案:

http://developer.android.com/tools/help/proguard.html

只有在发布模式下构建应用程序时,ProGuard才会运行,因此在调试模式下构建应用程序时,不必处理混淆代码.

发布模式下构建应用程序时,无论是通过运行ant发布还是使用Eclipse中的导出向导,构建系统都会自动检查proguard.config属性是否已设置.如果是,ProGuard会自动处理应用程序的字节码,然后将所有内容打包到.apk文件中.在调试模式下构建不会调用ProGuard,因为它使调试更加麻烦.

更新:13-3-2016

使用新的gradle构建系统是可能的.您需要设置minifyEnabledtrue的build.gradle文件.通常,您在发布模式下运行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'
    }
   }
 }
Run Code Online (Sandbox Code Playgroud)

  • 你应该删除你的答案,对别人公平.这是误导. (9认同)
  • 但有办法吗?我接受它很麻烦.我不需要混淆代码,但我会根据它的配置文件使用proguard的处理能力去除日志功能等. (4认同)

Jos*_*son 11

关于自定义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>
Run Code Online (Sandbox Code Playgroud)

请注意,我必须覆盖(实际预先设置)out.dex.jar.input.ref; 否则,后来运行的dx将尝试合并非脱节的jar并抛出DexException:多个dex文件定义Xxx.


Vic*_*scu 7

如果使用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>
Run Code Online (Sandbox Code Playgroud)