【问题标题】:How to write android proguard rules?如何编写android proguard规则?
【发布时间】:2020-01-06 21:00:07
【问题描述】:

我想学习如何编写 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 .. 等等以及如何在混淆后测试应用程序以及如何确保不会因为在游戏商店发布后混淆。 提前致谢。

【问题讨论】:

    标签: android android-studio documentation proguard obfuscation


    【解决方案1】:

    虽然progaurd introductionprogaurd usage documentation 提供了有关它的简要信息,但以下几个示例可以帮助您理解:

    默认情况下,Progaurd 基本上会缩小和混淆您应用中的所有代码,但有时我们可能不需要它,因此我们需要描述必要的 -keep 选项。

    在任何库不提供规则或您不知道哪些类不被混淆时想出规则?

    读取构建输出和 logcat:

    构建警告会告诉你要添加哪些 -dontwarn 规则 ClassNotFoundException、MethodNotFoundException 和 FieldNotFoundException 会告诉你要添加哪些 -keep 规则

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

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

    ProGuard 默认会删除许多程序执行不需要的代码属性和隐藏的元数据。其中一些实际上对开发人员很有用——例如,您可能希望保留源文件名和行号以进行堆栈跟踪以使调试更容易:

    -keepattributes SourceFile, LineNumberTable
    

    您可以查看attributes list in the ProGuard manual

    progaurd 手册的Usage section 描述了必要的 -keep 选项,Examples section 提供了大量示例。

    【讨论】:

    • 谢谢你的回答,我决定将它应用到应用程序中看看会发生什么,所以在 (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'} }
    • 我在 proguard 文件中写道: -keepattributes SourceFile, LineNumberTable -printmapping mapping.txt 在调试变体中运行应用程序后,它没有产生任何错误并且可以正常工作。您认为该应用程序现在准备好在 Playstore 上发布了吗?如果是的话,有什么遗漏吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多