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。我们一起学习,一起进步!
重要的事情说三遍:
- 学习、挣钱、自由
- 学习、挣钱、自由
- 学习、挣钱、自由
疫情当下,唯有自强