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



在我的android应用程序中,我想测试一些功能与proguard打开。

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

有办法这样运行proguard吗?

更新:

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

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

那么您可以轻松地将以下内容添加到构建中。

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

这将运行ProGuard在你的调试构建,配置文件" ProGuard -android.txt",它应该放在你的项目的根文件夹。此外,你的apk是压缩对齐(只需删除"zipAlignEnabled true",如果你不想发生这种情况)。如果你想为你的发布版本做同样的事情,只需要在release下面加上这三行。

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

编辑:在Gradle Android Build Tools 0.14.0版本中,属性名称发生了变化(http://tools.android.com/tech-docs/new-build-system):

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

我已经更新了上面的代码

旧答案:

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

ProGuard仅在您以发布模式构建应用程序时运行,因此当您以调试模式构建应用程序时,您不必处理混淆的代码。

当您以release模式构建应用程序时,无论是通过运行ant release还是在Eclipse中使用Export Wizard,构建系统都会自动检查是否设置了proguard.config属性。如果是,ProGuard在将所有内容打包到.apk文件之前自动处理应用程序的字节码。在调试模式下构建不调用ProGuard,因为它使调试更麻烦。

更新:13-3-2016

这在新的gradle构建系统中是可能的。您需要在构建中将minifyEnabled设置为true。gradle 文件。通常pro-guard运行在release模式下。还有其他可行的选择,比如缩减资源。你可以找到一些有用的信息@ 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'
    }
   }
 }

关于自定义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构建项目,请参阅Android自定义构建。然后,只需在项目的build.xml中覆盖目标"-debug-obfuscation-check"并设置proguard。启用为true:

<target name="-debug-obfuscation-check">
    <!-- proguard is never enabled in debug mode -->
    <property name="proguard.enabled" value="true"/>
</target>

如果您使用的是AGP (Android Gradle Plugin) 7.2.0或更新版本,请注意我们有一个尚未解决的漏洞。目前的解决办法是将AGP降级到7.1.3,这样你就可以混淆你的调试APK。

https://issuetracker.google.com/issues/242214899?pli=1

使用Android Studio,您可以在Proguard规则文件中使用-dontobfuscate选项,调试器将正常工作。

相关内容

  • 没有找到相关文章

最新更新