Android运行未安装apk可以使用Android的DexClassLoader类
这个也可以再Android的官方文档中看到A class loader that loads classes from .jar and .apk files containing a classes.dex entry. This can be used to execute code not installed as part of an application.
This class loader requires an application-private, writable directory to cache optimized classes. Use Context.getDir(String, int) to create such a directory:
File dexOutputDir = context.getDir("dex", 0);
Do not cache optimized classes on external storage. External storage does not provide access controls necessary to protect your application from code injection attacks.
上面说了,可以加载jar文件和apk文件
还有一句加粗的话,不要把dex文件的目录设置到外部存储设备上,否则可能会引起注入攻击,这个问题困扰了我很久,后来看到官方文档,终于有了答案,所以有了疑问第一时间看官方文档才是最靠谱的不过最近斯巴达开的,google好难打开。。。你妹的现在知道了怎么加载apk文件,下来说关键的地方dex文件其实就是一堆的class文件,怎么调用呢?反射呗通过动态加载可以加载任何的java类,包括Activity,但是加载出来的Activity是没有生命周期的,我们可以通过在宿主的APP中,通过反射那七个on什么方法,来模拟出一个生命周期,通过反射吧宿主的activity和Resources传到要启动的Activity中,这样就可以在里面正常使用了补充:加载所有的class文件:生成dexClassLoader后,如果想要加入其它的class,必须知道class类名。可以通过DexFile.loadDex(sourcePathName, outputPathName, flags)这个方法获取到这个dex文件中的所有类名称。加载进去即可