如何在 Android Studio 中启用 ProGuard 混淆功能?

Posted

技术标签:

【中文标题】如何在 Android Studio 中启用 ProGuard 混淆功能?【英文标题】:How to enable ProGuard obfuscation in Android Studio? 【发布时间】:2016-05-10 18:57:42 【问题描述】:

我必须通过在 android Studio 中启用 Proguard 混淆来保护我的应用。我已经搜索了如何应用它的过程,但我没有得到任何明确的解决方案。当我尝试它时,我总是得到一个错误。那么谁能告诉我在我的应用中应用它的明确步骤?

我是按照以下步骤进行的:

    在 Android Studio 中,打开一个 Android 项目。

    更改为项目视图。

    更改以下行:

    minifyEnable falseminifyEnable true

    设置 ProGuard 规则(可选)

    4.1 在项目视图中,选择 proguard-rules.pro 文件。

    4.2 添加以下行告诉 ProGuard 不要混淆某些类。

    -keepclassmembers class com.dom925.xxxx 
    
      public *
    
    

我按照这些步骤得到的错误是

错误:任务 ':app:packageRelease' 执行失败。 无法计算 D:\Android\Pojectname\app\build\intermediates\classes-proguard\release\classes.jar 的哈希值

【问题讨论】:

发布您的 build.gradle,以便我们根据您的依赖项做出更准确的答案 这里有一些参考***.com/questions/30934729/… 这里有一些参考***.com/questions/20885725/… 【参考方案1】:

在 Android Studio 中启用 ProGuard。

以下是如何在 Android Studio 中启用默认 ProGuard 的示例。

    进入app的build.gradle文件 启用 minifyEnabled true 启用 shrinkResources true 以减小 APK 大小

    proguardFiles getDefaultProguardFile('proguard-android.txt') 启用默认选项。如果您想使用自己的 proguard 文件,请使用以下规则。

    buildTypes 
        release 
            debuggable false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    
        debug 
            debuggable true
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    
    

以下链接提供了用于 Android 的 ProGuard 设置和其他设置的链接:

Default ProGuard file Gist with example

更多详情请通过this link

【讨论】:

为什么我们需要混淆调试? 好问题!!但如果您想根据您可以或忽略的用例来使用,这是一个可用的选项。【参考方案2】:

我发现了问题:

为您的项目打开 proguard-rules.pro 并将其添加到底部:

-dontwarn java.nio.file.Files
-dontwarn java.nio.file.Path
-dontwarn java.nio.file.OpenOption
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

基本上我是如何解决这个问题的,我尝试在“发布”模式下运行我的应用程序并遇到了一堆类似于这个人的错误:https://github.com/square/okio/issues/144

我几乎按照他说的做了。

希望这可以帮助其他人生成他们的 APK!

在此处访问更多详细信息:

Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of /../AndroidStudioProjects/../classes.jar

【讨论】:

但我还是遇到了错误朋友​​***.com/questions/35150026/…【参考方案3】:

如果你用jack构建android项目,那么它会自动做收缩、混淆、重新打包和multidex。 只需在下面添加:

defaultConfig 
       jackOptions 
            enabled true
                
    

在构建类型中,提及项目proguard 文件:

buildTypes 
        release 
            // Jack build environment does not require minifyEnabled or shrinkResources.
            // Conceptually, the jack compiler consolidates the functionality of javac, ProGuard, and dex in a single conversion step
            //minifyEnabled = true      
            //shrinkResources true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
       

       debug 
...................
        
     

要禁用 ProGuard 混淆,需要在 proguard-project.txt 文件中添加以下行

####No obfuscation
-dontobfuscate

【讨论】:

以上是关于如何在 Android Studio 中启用 ProGuard 混淆功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中启用 ProGuard 混淆功能?

如何在android studio中启用设备框架?

如何在android studio上以编程方式检查自动启动权限是启用还是禁用

使用android studio运行应用程序时如何启用android 6.0中的所有权限

在 Android Studio 中为 Dart 启用彩虹括号

Android Studio 编译出错,求助,万分