【问题标题】:Android ProGuard obfuscation of library: keep class not working库的Android ProGuard混淆:保持类不工作
【发布时间】:2015-11-11 10:12:21
【问题描述】:

简介:我在 AS 1 项目中有 2 个模型:

  1. 带有一些“公共 API 类”的 Android 库项目
  2. Android APP依赖以上库(库模块在依赖列表中)

任务:我想混淆我的库项目,因为我想将它公开为公共 SDK,但要保护我的代码......

我做了什么:所以我制定了自定义 ProGuard 规则:

-dontshrink
-dontoptimize
-dontpreverify
-keep class com.org.my_public_api_class_name

我跳过所有其他阶段,以消除错误所在的位置,仅用于混淆阶段。

结果: APP 模块的构建失败,并出现类似

的错误

Error: cannot find symbol class my_public_api_class_name

在我看来,问题在于混淆没有跳过我想要的课程,所以现在他有一些毫无意义的名字,因此在我使用他的 APP 中,原来的名字不存在。

谢谢,

【问题讨论】:

    标签: android android-studio proguard android-proguard


    【解决方案1】:

    要从混淆中排除你的类,试试这个:

     -keep class com.org.my_public_api_class_name**
     -keepclassmembers class com.org.my_public_api_class_name** {*;}
    

    【讨论】:

    • 最后两个星号和{*;} 是什么意思?
    • @Mr.Nacho 它定义了所有应该保留(不混淆)的字段和方法, * 表示一切, ;显示当前条目的结尾。这是一个不同的条目来显示差异:-keep class com.org.my_public_api_class_name** { <fields>; <methods>;}。见ProGuard manual
    • 我认为应该有一个 .在 my_public_api_class_name 和 ** 之间
    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多