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

vm0i2vca  于 2022-12-02  发布在  Android
关注(0)|答案(6)|浏览(167)

在我的android应用程序中,我想在proguard打开的情况下测试一些功能。
我不需要真正的“调试”它,但是我希望在eclipse中点击run时运行proguard,我不想每次都导出二进制文件(所以,在发布模式下),并保存为apk,然后将其放到设备上进行测试。
有没有办法以这种方式运行proguard?

更新日期:

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

6yt4nkrj

6yt4nkrj1#

如果您希望简化整个构建过程,您应该切换到gradle和Android Studio IDE。
然后,您可以轻松地将以下内容添加到您的build.gradle文件以运行ProGuard:

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

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

  • 有点离题:使用gradle,添加依赖项、签署apk或向构建流程添加其他自定义任务等操作也变得更加简单。此外,您不仅可以通过Android Studio IDE构建apk,还可以通过命令行上的一个简单命令进行构建(例如./gradlew assembleDebug)。因此,如果您在团队中工作,新成员的安装过程只需一个.“/gradlew assembleDebug”。完全不需要任何IDE配置。导入包含所有依赖项的项目就像单击一次鼠标一样简单 *

编辑:自Gradle Android构建工具版本0.14.0起,属性名称已更改(http://tools.android.com/tech-docs/new-build-system):

  • 生成类型.runProguard -〉已启用最小化
  • 编译类型.zipAlign -〉zipAlign已启用

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

lvmkulzt

lvmkulzt2#

旧答案:
http://developer.android.com/tools/help/proguard.html

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

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

更新日期:2016年3月13日

您需要在您的 build.gradle 文件中将minifyEnabled设置为true。通常,您的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'
    }
   }
 }
jtjikinw

jtjikinw3#

关于自定义Ant构建(根据维克托的回答),向我的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。

jmo0nnb3

jmo0nnb34#

如果您使用Ant构建,则可以实现这一点。请参阅Android custom build using Ant,了解如何使用Ant构建项目。然后,只需在项目的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>
ct2axkht

ct2axkht5#

在Android Studio中,您可以在您的Profuard规则文件中使用-dontobfuscate选项,调试器将正常工作。我不确定它是否也能与Eclipe一起工作。

hi3rlvi2

hi3rlvi26#

如果您使用的是AGP(Android Gradle插件)7.2.0或更新版本,请注意,我们目前还没有解决方案。目前的解决方案是将AGP降级到7.1.3,以便您可以混淆您的调试APK。
https://issuetracker.google.com/issues/242214899?pli=1

相关问题