Android 混淆so文件???

so文件真的需要被添加到混淆嘛?##

我今天遇到之前没有遇到的问题,混淆后apk运行报xxxx.so文件找不到。
然后想了一下,没有添加混淆前好像是没有配置ndk里面的支持的架构。
然后我的思路一直在这个架构这个,一直在想可能是因为so文件被混淆了,所以导致崩溃。然后去找了一下关于so的混淆。

什么是混淆?

代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器,作用是让人看不懂源码
混淆的本质就是类名、变量名和方法名的改变。

首先so文件是不会被混淆的,混淆只会混淆语音代码,所以我们只需要保证我们用到的so文件接口不被混淆就行。

为什么混淆后,程序不能正常执行呢?

一般两类问题会导致,一个是使用了反射,另一个就是使用了so。混淆的本质就是类名、变量名和方法名的改变,用到so的地方一般是 native public void hello()的样子,hello就是方法名,是和so中的hello对应的,混淆后,java层的hello可能变成a了,但是so中还是hello,所以二者就对应不起来了。反射同样,比如我反射了,com.cmcc.Hello这个类,但是混淆的时候这个类可能变成 com.cmcc.a了,于是就找不到了。

所以我们遇到了混淆后找不到so文件的情况到底该怎么做呢?

去找这个so文件的库,然后找他的混淆规则,比如我今天遇到的是ijkPlayer里面的so文件找不到了。最终用ijkPlayer的混淆规则搞定

文末插入ijkPlayer的混淆规则

#ijkplayer的混淆规则
-keep class tv.danmaku.ijk.media.player.** {*;}
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{*;}
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{*;}

题外话:谢谢大家观看,有不足之处欢迎大家一起讨论;码字不易,大家喜欢,麻烦点赞哦。


灵魂三问:

  • 有没有觉得技术得不到系统的提升,技术成长慢?
  • 有没面试懵逼,升职加薪难?
  • 有没有想过去大一点的世界看看?

有期望JAVA技术巩固的、Android知识进阶的、期望升职加薪的、Android面试技巧的大厂面试真题的;大家可以加我QQ哦:1070800492。我们一起学习,一起进步!

重要的事情说三遍:

  • 学习、挣钱、自由
  • 学习、挣钱、自由
  • 学习、挣钱、自由

疫情当下,唯有自强

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值