Android Studio 中的混淆

Posted

技术标签:

【中文标题】Android Studio 中的混淆【英文标题】:Obfuscation in Android Studio 【发布时间】:2013-06-21 19:38:45 【问题描述】:

是否有任何混淆工具可用于 Android Studio? IntelliGuard 插件是 Studio 的declared to be supported,但由于缺少 AntSupport 插件,它实际上不起作用。我无法在存储库中找到一个。有什么想法吗?

附: android Studio 构建过程基于 Gradle,所以我根本不希望看到 Ant 支持。可能是我错了。

【问题讨论】:

tools.android.com/tech-docs/new-build-system/… 可能会有所帮助 【参考方案1】: 基本混淆

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

将 minifyEnabled 属性从 false 更改为 true

这是一个基本的混淆。

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

http://www.decompileandroid.com/

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

并且混淆变量和方法的名称也会像 aa,c,ac...

普通混淆:

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

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

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

【讨论】:

上传apk "AccessDenied" 后出现此错误 我有相同的配置,除了我的文件是proguard.cfg 试图反编译apk 并且类是相同的没有混淆.. 我需要将.cfg 重命名为.pro 吗? 有没有可以自动编写proguard规则的插件【参考方案2】:

首先在你的 build.gradle 文件中启用minifyEnabled,比如

minifyEnabled true

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

-keep class yourpackage.**  *; 
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

要检查其是否正常工作,请访问:

http://www.javadecompilers.com/apktool网站,方便反编译后验证。

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

【讨论】:

就我个人而言,我永远不会将我的 apk 上传到这样的网站!我怎么能相信那个网站?!? @user2342558 我提供的参考只是为了测试和交叉检查的目的。【参考方案3】:

更新: R8 is by default enabled 在 android studio 3.4.0 及以上版本中

在 android studio 3.4+ 中,R8 默认启用,因此无需添加其他属性,尽管您可以通过在 gradle.properties 中添加 fullMode 属性来选择深度优化:

android.enableR8.fullMode=true 

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

android.enableR8 = false
useProguard = true

Android 2018 年 9 月发布新工具 R8 收缩器和混淆工具。

R8 - R8 是一个 java 代码收缩器和压缩工具,可以将 java 字节码转换为优化的 dex 码

适用于 3.4.0 以下的 AS 版本。

    打开gradle.properties 添加android.enableR8 = true

作为

# 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 Tool

R8 支持 Proguard:

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

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

# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false

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

【讨论】:

我猜目前选项设置 'android.enableR8=true' 是实验性的并且不受支持。我不建议在支持的版本发布之前使用它。 我比较了有没有。它根本没有缩小:) 如果你只写minifyEnabled true,在构建输出中你可以看到一个任务Task :app:minifyReleaseWithR8,现在你不需要手动了,让我们照顾好所有这些......谢谢...... @MaifeeUlAsad 是的,更新中提到了新行为,但将其移至具有更多详细信息的特定部分,谢谢!【参考方案4】:

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

【讨论】:

将 minifyEnabled 设置为 true 时,ProGuard 会缩小和混淆代码。 teamtreehouse.com/community/what-is-minifyenabled【参考方案5】:

minifyEnabled 设置为 true 后,您可以获得两个版本的 apk,因此您必须在 build.gradle 中添加调试选项来混淆调试一个:

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

同步、构建和构建 apk

【讨论】:

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

android studio 4.0(macOs)中的内部类混淆代码

如何防止 Dexguard 混淆 android studio 中的资源文件夹?

(androis studio)app连连看demo练习

android studio 代码混淆错误

Android Studio 代码混淆

Android studio 混淆打包问题