是否有可能在debugging模式下使用proguard?

在我的android应用程序中,我想用proguardtesting一些function。

我不需要真正的“debugging”,但是我希望proguard在我在eclipse中运行时运行。 我不想每次都导出二进制文件(所以,在发布模式下),并保存为apk并获取到设备进行testing。

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

更新:

这似乎是可能的,如果你使用Eclipse ; 由于问题标题不包括Eclipse,所以这个问题有多个正确的答案。

老答案:

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

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

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

更新:2016年3月13日

新的gradle构build系统是可能的。 您需要在build.gradle文件中将minifyEnabled设置为true 。 一般来说,你有保护在释放模式下运行。 还有其他选项可用,如缩小资源。 你可以在http://tools.android.com/tech-docs/new-build-systemfind一些有用的信息;

还有看看// @

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' } } } 

如果你想让整个构build过程更容易,你应该切换到gradle和Android Studio IDE。

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

 android { buildTypes { release { } debug { minifyEnabled true proguardFile 'proguard-android.txt' zipAlignEnabled true } } } 

这将在您的debugging版本上运行ProGuard,configuration文件“proguard-android.txt”,该文件应放在项目的根文件夹中。 此外,你的apk是zipalignment(只要删除“zipAlignEnabled真正的”,如果你不希望发生这种情况)。 如果你想为你的发布版本做同样的事情,只需在“发布”下添加这三行即可。

稍微偏离主题:像添加依赖项,签名你的apk或添加其他自定义任务到你的构build过程的东西也更简单的方法与gradle。 此外,您不仅可以通过Android Studio IDE构build您的apk,还可以通过命令行上的简单命令(例如./gradlew assembleDebug)来构build您的apk。 所以如果你在一个团队工作,新成员的设置过程只是一个“./gradlew assembleDebug”。 根本不需要任何IDEconfiguration。 导入包括所有依赖项目在内的项目就像一次点击一样简单

编辑:从Gradle Android生成工具版本0.14.0的属性名称已经改变( http://tools.android.com/tech-docs/new-build-system ):

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

我更新了上面的代码。

关于自定义的Ant构build(和基于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构build,这是可能的。 请参阅使用Ant的Android自定义构build ,了解如何使用ant构build项目。 然后,只需在项目的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选项,debugging器将正常工作。 我不确定它是否也适用于Eclipe。