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

     2023-04-15     234

关键词:

【中文标题】带有 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

【讨论】:

Android Kotlin ProGuard 规则错误?

】AndroidKotlinProGuard规则错误?【英文标题】:AndroidKotlinProGuardRulesWrong?【发布时间】:2020-11-1108:27:38【问题描述】:目前我有一个可供多个其他项目使用的库,但是在使用.aar时遇到代码混淆问题,尤其是在某些类中:这个用于处... 查看详情

即使 minifyenabled true,Android studio proguard 也不适用于库 aar

】即使minifyenabledtrue,Androidstudioproguard也不适用于库aar【英文标题】:Androidstudioproguardnotworkingforlibraryaarevenifminifyenabledtrue【发布时间】:2016-11-0815:12:01【问题描述】:我有一个带有1个库aar项目和几种风格的Gradle应用程序,我正... 查看详情

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

】如何使用proguard混淆android库(.aar)?【英文标题】:Howtoobfuscateandroidlibrary(.aar)usingproguard?【发布时间】:2017-10-2909:24:29【问题描述】:我想使用proguard混淆.aar库以用于分发目的,我在互联网上尝试了许多解决方案,但到目前... 查看详情

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

】如何在我的Android库(AAR)中包含proguard配置【英文标题】:HowtoincludeaproguardconfigurationinmyAndroidlibrary(AAR)【发布时间】:2015-07-2322:47:30【问题描述】:根据AARfilespec,Android库包含一个“proguard.txt”文件。我的理解是这个文件声明了... 查看详情

Proguard 和 Kotlin 的“找不到引用的类”

】Proguard和Kotlin的“找不到引用的类”【英文标题】:"can\'tfindreferencedclass"withProguardandKotlin【发布时间】:2016-09-2217:13:25【问题描述】:我在使用proguard和kotlin时遇到了一个奇怪的问题。我正在逐渐将一个proguarded项目转换... 查看详情

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

】外部AAR依赖项中的proguard.txt损坏(非ascii字符)【英文标题】:brokenproguard.txtinexternalAARdependency(non-asciicharacters)【发布时间】:2020-04-2201:25:10【问题描述】:Appsflyer4.11.0AAR的内部proguard.txt中似乎有很多非ascii字符结果,gradle失败... 查看详情

Proguard 和 Kotlin-Reflect/Kotlin 注释

】Proguard和Kotlin-Reflect/Kotlin注释【英文标题】:ProguardandKotlin-Reflect/KotlinAnnotations【发布时间】:2017-10-2423:52:45【问题描述】:寻求将pro置于proguard中的人的帮助。升级到kotlin1.1.2-3后,kotlin-reflect使用的注释(jackson-module-kotlinvv2.8.8... 查看详情

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

】Android库:使用proguard时释放.aar使classes.jar为空【英文标题】:AndroidLibrary:Release.aargettingclasses.jaremptywhenusingproguard【发布时间】:2018-05-1901:45:20【问题描述】:我正在尝试使用minifyEnabledtrue生成一个库,但是在发布.aar中,classes.j... 查看详情

Proguard - 不要混淆 Kotlin 数据类

】Proguard-不要混淆Kotlin数据类【英文标题】:Proguard-donotobfuscateKotlindataclasses【发布时间】:2018-02-1607:54:46【问题描述】:在我的项目中,我将AutoValue用于我的旧模型类。我开始使用Kotlin,我想使用DataClasses而不是AutoValue。我想在... 查看详情

启用 proguard 后无法访问 kotlin 类中使用的伴随对象

】启用proguard后无法访问kotlin类中使用的伴随对象【英文标题】:Unabletoaccesscompanionobjectusedinkotlinclassafterenablingproguard【发布时间】:2019-04-3011:01:50【问题描述】:我有一个Kotlin类,伴随对象中有一些变量。启用proguard后,变量不... 查看详情

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

】将Kotlin运行时库添加到android中的aar【英文标题】:AddingKotlinruntimelibrarytoaarinandroid【发布时间】:2020-01-2614:36:59【问题描述】:我想要什么:微笑::构建kotlin库,将其作为.aar文件交付使用我的.aar的Java项目不需要配置任何东... 查看详情

Kotlin、Proguard 和 lambdas

】Kotlin、Proguard和lambdas【英文标题】:Kotlin,Proguardandlambdas【发布时间】:2016-05-3123:29:54【问题描述】:我有一个简洁的函数可以在视图上做一些事情:fun<T:View>Activity.withView(nr:Int,fn:T.()->Unit)(findViewById(nr)asT?)?.fn()现在,当... 查看详情

如何使用 proguard 定位 kotlin `internal` 类?

】如何使用proguard定位kotlin`internal`类?【英文标题】:HowcanItargetkotlin`internal`classeswithproguard?【发布时间】:2018-09-1222:00:07【问题描述】:我想保护(混淆)任何标有kotlininternal可见性修饰符的类。Kotlininternal类在JVM上是公共的,... 查看详情

maven打包没将kotlin源代码打包进aar/*compiledcode*/

Maven打包没将Kotlin源代码打包进aar显示:/*compiledcode*/这样影响我们做模块化时的调试话不多说~直接上配置taskandroidSourcesJar(type:Jar)//如果有Kotlin那么就需要打入dir:getSrcDirsif(project.hasProperty("kotlin"))println'== 查看详情

如何使用 Kotlin 为 Android 版本构建配置 ProGuard

】如何使用Kotlin为Android版本构建配置ProGuard【英文标题】:HowtoconfigureProGuardforanAndroidreleasebuildwithKotlin【发布时间】:2019-04-0219:28:05【问题描述】:我将Kotlin1.2.71添加到我的Android(Java)应用程序项目中。该项目是为Java8配置的:comp... 查看详情

启用 Proguard 时未找到 kotlin.Any

】启用Proguard时未找到kotlin.Any【英文标题】:kotlin.AnynotfoundwhenenablingProguard【发布时间】:2021-12-2823:18:48【问题描述】:当启用Proguard时,我看到运行时崩溃。我基本上将所有内容都保留在Proguard规则中。-dontobfuscate-dontoptimize-donts... 查看详情

Kotlin 反映 proguard SmallSortedMap

】Kotlin反映proguardSmallSortedMap【英文标题】:KotlinreflectproguardSmallSortedMap【发布时间】:2018-02-0222:44:15【问题描述】:Warning:kotlin.reflect.jvm.internal.KClassImpl:can\'tfindreferencedclasskotlin.reflect.jvm.internal.KClassImpl$kotl 查看详情

kotlin android proguard错误

】kotlinandroidproguard错误【英文标题】:kotlinandroidproguarderror【发布时间】:2014-11-1912:02:33【问题描述】:我正在尝试构建一个apk并对其进行保护,但它失败并显示如下消息:Error:ProGuard:[radis]Warning:kotlin.dom.EventListenerHandler:can\'tfinds... 查看详情