【问题标题】:How to use the ProGuard in Android Studio?如何在 Android Studio 中使用 ProGuard?
【发布时间】:2014-01-20 01:33:25
【问题描述】:

这是我在 Android Studio 中的第一个项目,我的应用程序的代码没有被混淆。 我在 build.gradle 文件中使用此配置:

我正在使用 Build > Generate Signed APK... 并选中 Run Proguard。 而且,当我使用 Apk_OneClick.v4.2 进行测试时,我的代码非常易于阅读:

请帮帮我。 :(

【问题讨论】:

  • 显示在文本文件中定义的混淆代码的 proguard 规则。
  • 如何检查应用是否被混淆?
  • @VVB 通过反向工程APK文件我猜:D

标签: android android-studio proguard


【解决方案1】:

您可能实际上并未通过签名向导对 APK 的发布版本进行签名。您可以使用以下命令从命令行构建发布 APK:

./gradlew assembleRelease

或者您可以从 Build Variants 视图中选择发布变体并从 GUI 构建它:

【讨论】:

  • 太棒了!我已经测试了将调试更改为 runProguard true 并且运行良好。现在我阅读了您的回复,并且有效!!!!好人!谢谢。
  • 糟糕,我不小心在我的命令行指令中放入了“assembleDebug”而不是“assembleRelease”。我修正了我的答案。
  • 命令行导出的.apk文件的路径是什么?
【解决方案2】:

您可以配置您的 build.gradle 文件以实现 proguard。可以是模块级别,也可以是项目级别。

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

显示的配置用于调试级别,但您可以编写自己的构建风格,如下所示在 buildTypes 中:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

最好使用minifyEnabled false 和productionbuild 以及minifyEnabled true 的其他构建进行调试。

将 proguard-rules.txt 文件复制到模块或项目文件夹的根目录中,例如

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

您可以根据需要更改文件的名称。配置后,使用三个可用选项之一根据 buildType 生成构建

  1. 进入右侧面板中的 gradle 任务并在模块任务下搜索assembleRelease/assemble(#your_defined_buildtype)

  2. 转到左侧面板中的构建变体并从下拉列表中选择构建

  3. 在文件资源管理器中进入项目根目录并打开 cmd/terminal 并运行

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

Windows gradlew assembleRelease or assemble(#your_defined_buildtype)

你可以在你的模块/构建目录中找到 apk。

有关配置和 proguard 文件位置的更多信息,请访问链接

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard

【讨论】:

  • 我可以在哪里使用 myproductionbuild?
  • 是的,你是对的 :) 你可以在左侧面板的 build Variant 选项卡中看到相同的内容。
  • 但是apk没有混淆... :(
  • 你在 proguard-rule.txt 中写过配置吗?这里有一些例子proguard.sourceforge.net/index.html#manual/examples.html
  • 我找不到 Gradle DSL 方法 runProguard()。
【解决方案3】:

注意:现在不是

runProguard false

你需要使用

minifyEnabled false

【讨论】:

  • 猜它应该设置为true
【解决方案4】:

这是您需要在 Android Sutdio 的 proguard-rules.pro 文件中添加的一些最常见的 Proguard 规则。

黄油刀

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

改造

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

代码混淆

-keepclassmembers class com.yourname.models** { <fields>; }

【讨论】:

    【解决方案5】:

    尝试将“proguard-rules.txt”文件重命名为“proguard-android.txt”并删除 gradle 文件中对“proguard-rules.txt”的引用。 getDefaultProguardFile(...) 调用引用了一个不同的默认 proguard 文件,该文件由 Google 提供,而不是您项目中的那个。所以也删除它,所以这里的 gradle 文件读取:

    buildTypes {
        release {
            runProguard true
            proguardFile 'proguard-android.txt'
        }
    }
    

    【讨论】:

    • 不要为我工作。我将自定义的 proguard-android.txt 放在 proguard-rules.txt 的同一目录中,但我的代码没有任何变化。
    【解决方案6】:

    这里的其他答案是有关使用 proguard 的重要参考。但是,我还没有看到讨论过的问题是我遇到的一个令人费解的问题。生成签名版本 .apk 后,它会放在您应用的 /release 文件夹中,但我的应用有一个不在 /release 文件夹中的 apk。因此,我花了几个小时反编译错误的 apk,想知道为什么我的 proguard 更改没有影响。希望这对某人有帮助!

    【讨论】:

      【解决方案7】:

      启用 ProGuard

      [ProGuard flow]

      android {
          buildTypes {
              release {
                  minifyEnabled true
                  proguardFiles 'proguard-rules.pro'
              }
          }
      }
      

      [ProGuard artefact]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多