带有 proguard 的 Kotlin AAR 库:如何只保留类和方法名?

Posted

技术标签:

【中文标题】带有 proguard 的 Kotlin AAR 库:如何只保留类和方法名?【英文标题】:Kotlin AAR library w/ proguard: How to keep ONLY class and method names? 【发布时间】:2020-04-23 23:34:59 【问题描述】:

我正在使用 Kotlin 构建一个 android 库(aar 文件)。我需要以第 3 方用户将看到类和方法名称的方式混淆代码,他必须能够使用它们(它们是公共的),但我需要隐藏/混淆代码本身。 我尝试将此文件用于 myLibrary\proguard-rules.pro 文件: https://github.com/mohitrajput987/android-utility/blob/master/preference/proguard-rules.pro

但是每个类、方法和变量都发生了变化,除了目录中同时包含 Kotlin 和 Java 类之外,文件和目录名称都保持不变。

如果这是我正在寻找的,Kotlin 必须改变什么?

也许还有其他问题?

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

【问题讨论】:

也就是说,你只想保留类名,而里面的每个函数都应该被混淆? 是的,这样他就可以调用该函数,查看它的名称,它获取和返回的参数,查看描述,但看不到它是如何工作的 无法验证它是否有效,但您可以尝试使用它:-keepclasseswithmembernames class * public <methods>; 但实际上我看不出您只想混淆方法主体的原因。在我看来,用户应该能够看到库的代码,所以如果没有任何问题,它应该可以提交错误报告等。 @h4rd4r7c0r3 成功了,谢谢。 @h4rd4r7c0r3 一些库包含敏感代码,例如支付卡行业 (PCI) 标准要求混淆的支付。 【参考方案1】:

如果其他人遇到这个问题,这在大多数情况下应该可以解决问题(当不尝试混淆原生方法时):

-keepclasseswithmembernames class * 
     public <methods>; 

更多关于不同keep选项的信息可以在这里找到:Proguard keep rules

【讨论】:

以上是关于带有 proguard 的 Kotlin AAR 库:如何只保留类和方法名?的主要内容,如果未能解决你的问题,请参考以下文章

带有 Proguard 的 Kotlin 反射失败

如何使用 proguard 混淆 android 库(.aar)?

如何在我的 Android 库 (AAR) 中包含 proguard 配置

外部 AAR 依赖项中的 proguard.txt 损坏(非 ascii 字符)

Android 库:使用 proguard 时释放 .aar 使 classes.jar 为空

将 Kotlin 运行时库添加到 android 中的 aar