如何编写 Android ProGuard 规则?

4

我想学习如何编写Android的ProGuard规则,以使代码混淆并增加反向工程难度。

我已经搜索了很多关于此的简单解释,但似乎找不到有用的内容。我阅读了这里的ProGuard文档 (https://www.guardsquare.com/en/products/proguard/manual/usage),但发现它非常混乱,我什么也没看懂。我还阅读了这篇文章 (https://developer.android.com/studio/build/shrink-code#obfuscate),但只是介绍而已。

我在YouTube上也进行了大量搜索,但没有找到有用的内容,同时在互联网上也搜索了很多文章。

我需要一个简单的解释,解释ProGuard规则文件中应该编写什么,Keep和dontwarn是什么等等。我还需要知道如何在混淆后测试应用程序,并确保在发布到Play商店后没有因混淆而出现错误。谢谢。

1个回答

6
尽管progaurd介绍progaurd使用文档提供了简要的详细信息,但以下示例可以帮助您更好地理解:

基本上,Progaurd默认会收缩和混淆应用程序中的所有代码,但有时我们可能不需要它,所以我们需要描述必要的-keep选项。

当任何库没有提供这些规则或者您不知道哪些类应该被保留不混淆时,如何制定规则呢?

阅读构建输出和Logcat:

构建警告将告诉您添加哪些-dontwarn规则 ClassNotFoundException、MethodNotFoundException和FieldNotFoundException将告诉您添加哪些-keep规则

要在整个类上添加@Keep注释或在所有模型上添加通配符规则:

-keep class com.somaapp.abc.model.** { *; }

默认情况下,ProGuard会删除许多不需要用于程序执行的代码属性和隐藏元数据。其中一些对开发人员实际上是有用的,例如,您可能希望保留源文件名和行号以便在调试时查看堆栈跟踪:

-keepattributes SourceFile, LineNumberTable

您可以在ProGuard手册的属性列表中查看。

ProGuard手册的使用部分描述了必要的-keep选项,示例部分提供了丰富的示例。


谢谢您的回答,我决定将其应用于应用程序并查看会发生什么。因此,在(build.gradle)文件中,构建类型如下...buildTypes {release { minifyEnabled true debuggable false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}   } - PЯӨGЯΛMMΣЯ
我在proguard文件中写道: -keepattributes SourceFile, LineNumberTable -printmapping mapping.txt在debug变体中运行应用程序后,它没有产生任何错误,并按照预期工作。你认为这个应用程序现在准备好在Play商店发布了吗?如果是,有什么遗漏的地方吗? - PЯӨGЯΛMMΣЯ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接