首页
社区
课程
招聘
请教一个jni开发的问题,env->FindClass()当类名中有乱码时会ClassNotFoundException,怎么破?
2021-1-23 20:26 2621

请教一个jni开发的问题,env->FindClass()当类名中有乱码时会ClassNotFoundException,怎么破?

2021-1-23 20:26
2621

最近在用ndk开发一些android的东西,一些java类被proguard混淆了,混淆后的类名和方法名是一些不常见字符,env->FindClass()在find这些类的时候会找不到类,这个问题要怎么办?
ClassNotFoundException:

proguard混淆后的类名是下面这些:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 13529
活跃值: (4858)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2021-1-23 21:35
2
0
再调用异常清除功能
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuxucau 2021-1-23 21:44
3
0
tDasm 再调用异常清除功能
其实我是需要这个jclass的,后面的代码要通过jni反射调用类里的method,现在这个jclass是null,如果清除异常的话,后面的代码应该就也执行不下去了。这种特殊的类名在java虚拟机里是可以正常解析运行的,但jni的env->FindClass()要怎样才能正确地获取到这个类?
雪    币: 13529
活跃值: (4858)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2021-1-24 08:24
4
0
要查找类和你调用so的类在同一个dex文件中。
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuxucau 2021-1-24 10:04
5
0
tDasm 要查找类和你调用so的类在同一个dex文件中。
不在一个dex文件中的,我把所有的dex都放在Ldalvik/system/DexPathList;->dexElements里面了。之前要查找的类名字里没有这种不可打印的字符时(混淆后是AccountActivity_V1$a、AccountActivity_V1$b这一类的时候),就能正常找到的,程序都没问题,我最近更新了proguard混淆策略,类名加入这些不可打印字符后,就找不到了
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuxucau 2021-1-24 10:40
6
0
问题已经解决了,原因是那个类名我是通过"AccountActivity_V1$xxx".getBytes()获取到类名的byte[]数组然后传入到so中,然后再FindClass(),把"AccountActivity_V1$xxx".getBytes()改成"AccountActivity_V1$xxx".getBytes("utf-8")就可以了,是字符编码的问题
游客
登录 | 注册 方可回帖
返回