Android Studio中的混淆

Obfuscation in Android Studio

Android Studio是否可以使用任何混淆工具? Studio声明IntelliGuard插件受支持,但是由于缺少AntSupport插件,它实际上不起作用。 我无法在存储库中找到一个。 有任何想法吗?

附言 Android Studio的构建过程基于Gradle,因此我完全不希望看到Ant支持。 也许我错了。


  • 基本混淆

要在Android Studio中混淆代码,只需转到Android Studio项目中的build.gradle文件:

enter image description here

将minifyEnabled属性从false更改为true

enter image description here

这是一个基本的话题。

生成apk后,您可以看到使用任何软件反编译apk的混淆结果,例如,此页面可以帮助您:

http://www.decompileandroid.com/

在混淆结果中,您将看到名称为:a,b,c ...的类。

enter image description here

混淆变量和方法也将具有aa,c,ac等名称。

enter image description here

  • 正常混淆:

要以更复杂的形式混淆代码,可以转到根目录应用程序并创建一个.pro文件,例如,在下图中,我已创建文件:proguard-rules-new.pro,应在同一目录中看到一个名为proguard-rules.pro的文件

enter image description here

现在将您创建的文件添加到build.gradle文件中

enter image description here

并使用自己的自定义proguard规则编辑已创建的.pro文件

enter image description here


首先在build.gradle文件中启用minifyEnabled,例如

1
minifyEnabled true

之后,在progurad-rules.txt文件中添加以下行

1
2
3
4
-keep class yourpackage.** { *; }
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

要检查其工作状况,请访问:

http://www.javadecompilers.com/apktool网站,以便您可以在反编译后进行验证。

它将起作用,并且您的课程将完全隐藏。


更新:默认情况下,Android Studio 3.4.0及更高版本中已启用R8

在Android Studio 3.4+中,默认情况下启用R8,因此无需添加其他属性,尽管您可以通过在gradle.properties中添加fullMode属性来选择深度优化,如下所示:

1
android.enableR8.fullMode=true

您可以通过在gradle.properties中添加以下属性来禁用R8并启用proguard

1
2
android.enableR8 = false
useProguard = true

Android 2018年9月发布了新工具R8收缩和模糊化工具。

R8-R8是Java代码收缩和缩小工具,可将Java字节代码转换为优化的dex代码

对于AS版本3.4.0以下。

  • 打开gradle.properties
  • 添加android.enableR8 = true
  • 1
    2
    3
    4
    5
    6
    7
    # Specifies the JVM arguments used for the daemon process.
    # The setting is particularly useful for tweaking memory settings.
    org.gradle.jvmargs=-Xmx1536m
    # When configured, Gradle will run in incubating parallel mode.
    # This option should only be used with decoupled projects. More details, visit

    android.enableR8 = true

    最低要求:

    • Android Studio 3.2 2018年9月版或更高版本
    • Java 8

    R8工具

    R8支持Proguard:

    请记住,R8旨在与您现有的ProGuard规则配合使用,因此您可能无需采取任何措施即可从R8中受益。但是,由于ProGuard是专为Android项目设计的与ProGuard不同的技术,因此缩小和优化可能会删除ProGuard可能没有的代码。因此,在这种不太可能的情况下,您可能需要添加其他规则以将该代码保留在构建输出中。

    要在AS 3.4.0及更高版本中禁用R8:

    1
    2
    3
    4
    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false

    注意:对于给定的构建类型,应用模块的build.gradle文件中的if you set useProguard to false,Android Gradle plugin uses R8会缩小该构建类型的应用代码,而不考虑whether you disable R8 in your project's gradle.properties file.


    Proguard在Android Studio上得到了很好的支持。您必须配置Gradle才能运行它。说明:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard