android通过指定目录获取该目录下所有类(反编译)
16lz
2021-01-26
首先说明一下此功能的使用场景
1.因为项目性质问题,我们需要提供公司其他项目来用我们的项目为基础去开发android和ios应用
2.考虑到扩展性问题,我们希望可以通过弱耦合来解决各项目的配置加载和初始化(这里当初就想做spring类似的东西)
3.最后是决定把初始化入口类放在统一目录下,apk启动加载时由我们代码去查找此目录下的所有类,最终实现初始化此类
话不多说,说一下我们尝试后的结果
首先是,经过简单调查,我们最后定下来通过DexFile来实现,具体代码如下
DexFile dexFile = new DexFile(context.getPackageCodePath());EnumerationclassNames = dexFile.entries();
上两段代码就是获取当前apk中所有classes
最后通过package筛选
while (classNames.hasMoreElements()){ String name = classNames.nextElement(); if(name.contains(pack)){ if(!name.contains("$")){ names.add(name); } }}
刚开始确实是起到了我们想要的作用
但是,等到真正去用到项目中时,发现有几个类却找不到了
经过排查最后得出来的结论是:因为dex文件不是一个
大家都知道apk为了方法数超65535的问题,dex被拆分为多个了
这时候DexFile就不是所有class文件的集合了,我们在经过几天的研究后最终放弃此方案
不知道有没有大神能来说一说有什么其他方案或者你们是怎么实现的
更多相关文章
- Android字符串进阶之一(特殊字符的输入)
- Android(安卓)/system/bin/pm脚本乱码分析 - 记一次脚本代码莫名
- Android经典项目开发之天气APP实例分享
- 海外优秀资讯抢先看11:Android的Inbox如何做到70%代码能跨Androi
- Android中给按钮同时设置背景和圆角示例代码
- Android(安卓)开发中踩过的坑之十一: 团队协作的坑
- 在电脑端加密的文件,放在android上进行解密,但是出现pad block cor
- Android(安卓)中View的绘制流程(结合图解及伪代码说明)
- android不在坑五:Android(安卓)Glide You cannot start a load fo