android通过指定目录获取该目录下所有类(反编译)

首先说明一下此功能的使用场景

1.因为项目性质问题,我们需要提供公司其他项目来用我们的项目为基础去开发android和ios应用

2.考虑到扩展性问题,我们希望可以通过弱耦合来解决各项目的配置加载和初始化(这里当初就想做spring类似的东西)

3.最后是决定把初始化入口类放在统一目录下,apk启动加载时由我们代码去查找此目录下的所有类,最终实现初始化此类

话不多说,说一下我们尝试后的结果

首先是,经过简单调查,我们最后定下来通过DexFile来实现,具体代码如下

DexFile dexFile = new DexFile(context.getPackageCodePath());
Enumeration classNames = 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)