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 8R8 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)中的内部类混淆代码