代码混淆和aar包遇到的坑

1.aar包是不嵌套aar包的,所以当我的项目中引用了别人的aar,而我又需要向其他人提供我的aar的时候,就出现了aar嵌套,而aar是不包含aar包的,所以解决这个问题:

 ①我给客户提供我的aar和我引用的别人的aar。

 ②将别人的aar换成jar包的形式,即可以打进我的aar中提供给客户。

2.我是将别人给我的aar让他换成了jar的形式,然后放入我的工程中,混淆打成一个aar包提供给客户。

遇到的坑:

①混淆后java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses,多数情况下的原因是jar冲突,编译器在错误的jar包中没有找到对应的东西。我遇见的情况是代码混淆导致的,配置代码混淆后发现部分类里面是空的,客户的代码中调用的类找不到。经反编译后发现混淆后类中是空的,所以在proguard-rules.pro中配置了部分代码不混淆。

②找不到/system/lib64/libbacktrace_libc .so

定位是把jar包混淆了导致的,我debug版本没有混淆,release进行了混淆,发现两个版本的aar中debug的可以反编译看到我引用的jar包,而release的没有,尝试把引入的jar包防混一下,就解决了。

 

在proguard-rules.pro中配置类和jar包的防混方法:

//对com.xxx.xxx.xxx包的A类进行防混
-keep class com.xxx.xxx.xxx.A{*;}

//对jar包防混
-libraryjars libs/camera.jar
-dontwarn com.google.android.cameraview.**
-keep class com.google.android.cameraview.** {*; }

 

要对 Android 代码进行混淆并生成混淆后的 aar 文件,可以按照以下步骤进行操作: 1. 配置 ProGuard:首先,在你的项目中配置 ProGuard,以便在构建过程中触发代码混淆。在项目的 proguard-rules.pro 文件中,添加适当的混淆规则和配置选项。 2. 指定混淆规则:根据你的需求和项目结构,编写适当的混淆规则。这些规则将指定哪些类、方法、字段等应该被保留、重命名或移除。可以使用 `-keep`、`-keepclassmembers`、`-keepnames` 等关键字来指定保留的内容。 3. 配置构建脚本:在你的构建脚本(如 build.gradle)中,确保已启用代码混淆。例如,在 android 模块的 build.gradle 文件中,将 `minifyEnabled` 设置为 `true`,并指定 proguardFiles 的路径: ```groovy android { // ... buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } ``` 4. 构建生成 aar 文件:使用 Gradle 构建系统执行构建命令,生成混淆后的 aar 文件。可以使用以下命令行进行构建: ```shell ./gradlew assembleRelease ``` 或者通过 Android Studio 的构建菜单选项进行构建。 5. 获取生成的混淆 aar 文件:构建完成后,在项目的 `app/build/outputs/aar/` 目录下可以到生成的混淆 aar 文件。 请注意,代码混淆可以增加代码的安全性和保护,但也可能导致一些副作用,如无法解析类名、方法名等。因此,在进行代码混淆之前,建议先对应用进行全面测试,并确保没有出现意外的问题。 希望这些信息对你有帮助!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值