博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之动态加载,运行未安装apk
阅读量:6579 次
发布时间:2019-06-24

本文共 1174 字,大约阅读时间需要 3 分钟。

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文件中的所有类名称。
加载进去即可

转载于:https://www.cnblogs.com/Androider123/archive/2013/01/23/2873193.html

你可能感兴趣的文章
初学Linux第二周小记
查看>>
(详细)华为荣耀10 COL-AL10的usb调试模式在哪里开启的步骤
查看>>
学习Python,is和==的本质区别你知道吗?
查看>>
阿里巴巴数据分析沙龙 杭州站圆满召开
查看>>
云视频会议如何做到参会人脸识别?
查看>>
选择能达到要求的扫描头
查看>>
C语言模拟实现多态
查看>>
公开课(视频)|聊聊 Http 协议和我们日常工作的关系
查看>>
Linux下安装LoadRunner LoadGenerator
查看>>
Active Directory 相关工具
查看>>
Mpls/××× 解决同时存在相同AS号的问题
查看>>
百度网页搜索首次给出外链数据
查看>>
chrome及safari浏览器实现直接粘贴图片(纯JS)
查看>>
Linux工具集合之aria2-axel-curl-wget用法
查看>>
LAMP
查看>>
NFS服务器配置
查看>>
LVS相关实验总结
查看>>
saltstack-haproxy安装
查看>>
我的友情链接
查看>>
我的友情链接
查看>>