动态加载apk
2016-03-12 10:46
507 查看
原文出处:http://blog.csdn.net/singwhatiwanna/article/details/22597587
动态加载apk,也就是已经安装的apk去加载未安装的apk中的资源以及activty,去执行其中的逻辑,即使两个apk的签名不一样也可以。这样可以给我们的应用瘦身以及去动态更新应用(其实还有很多其他的用处,我还没有理解到位所以就只列了自己理解了的用处)。
实现的方式就是在已经安装的apk中的某个activity(这个activity是一个空的activity,只做加载的功能)中采用DexClassLoader去加载未安装的apk中的指定的class(也就是activity,因为没有安装所以就可以看成一个单纯的class),这个加载过程其实就是将未安装apk中的内容注入到已安装的apk中的那个空activity中,如果要实现跳转到未安装apk的另一个activity中其实就是空activity自己跳转到自己,唯一改变的就是参数(根据这个参数加载不同的内容),所以这里就对加载模式有要求,这一点原文中没有提到(经过测试也验证了我的想法,本人也去原文下面留了言,还有点小激动,虽然其实也没有什么),如果加载模式不是standard就不能跳转到未安装的apk的其他页面。
代码就不再这里贴了,大家可以去原文中看。。。
上面只是做了动态加载的第一步,第二步就是做到能加载资源文件,原文的代码就知道我们要去加载的apk中是在代码中写的界面,没有用到xml,如果要这样写的话效率就太低了,原文的博主也给出了解决方法:http://blog.csdn.net/singwhatiwanna/article/details/23387079
也就是在宿主程序ProxyActivity中加载资源,然后重写下面这两个方法
具体的加载资源的方法请看原文。
实现了上述两个方法以及加载了资源之后你会发现,可以加载布局文件了,比如简单加载一个只写了一个button按钮的布局而且这个没有设置背景什么的,但是如果你在xml中使用了图片什么的就不行了,图片的指定只能在代码中写。其实并不只图片,凡是在xml中使用@引入的资源(也就是在其他文件中的资源)都不能访问。不要问我为什么,谁叫这个apk没有安装。。。
下面给出我跟着原文写的demo(关键代码都是抄原文的,勿喷!!)
http://download.csdn.net/detail/u012806692/9462420
动态加载apk,也就是已经安装的apk去加载未安装的apk中的资源以及activty,去执行其中的逻辑,即使两个apk的签名不一样也可以。这样可以给我们的应用瘦身以及去动态更新应用(其实还有很多其他的用处,我还没有理解到位所以就只列了自己理解了的用处)。
实现的方式就是在已经安装的apk中的某个activity(这个activity是一个空的activity,只做加载的功能)中采用DexClassLoader去加载未安装的apk中的指定的class(也就是activity,因为没有安装所以就可以看成一个单纯的class),这个加载过程其实就是将未安装apk中的内容注入到已安装的apk中的那个空activity中,如果要实现跳转到未安装apk的另一个activity中其实就是空activity自己跳转到自己,唯一改变的就是参数(根据这个参数加载不同的内容),所以这里就对加载模式有要求,这一点原文中没有提到(经过测试也验证了我的想法,本人也去原文下面留了言,还有点小激动,虽然其实也没有什么),如果加载模式不是standard就不能跳转到未安装的apk的其他页面。
代码就不再这里贴了,大家可以去原文中看。。。
上面只是做了动态加载的第一步,第二步就是做到能加载资源文件,原文的代码就知道我们要去加载的apk中是在代码中写的界面,没有用到xml,如果要这样写的话效率就太低了,原文的博主也给出了解决方法:http://blog.csdn.net/singwhatiwanna/article/details/23387079
也就是在宿主程序ProxyActivity中加载资源,然后重写下面这两个方法
@Override public AssetManager getAssets() { return mAssetManager == null ? super.getAssets() : mAssetManager; } @Override public Resources getResources() { return mResources == null ? super.getResources() : mResources; }
具体的加载资源的方法请看原文。
实现了上述两个方法以及加载了资源之后你会发现,可以加载布局文件了,比如简单加载一个只写了一个button按钮的布局而且这个没有设置背景什么的,但是如果你在xml中使用了图片什么的就不行了,图片的指定只能在代码中写。其实并不只图片,凡是在xml中使用@引入的资源(也就是在其他文件中的资源)都不能访问。不要问我为什么,谁叫这个apk没有安装。。。
下面给出我跟着原文写的demo(关键代码都是抄原文的,勿喷!!)
http://download.csdn.net/detail/u012806692/9462420
相关文章推荐
- 2016蓝桥杯假期任务之《十进制转十六进制》
- Mac快捷使用二:Terminal快捷键
- 第6届山东省浪潮杯 Circle of Friends SDUT3262
- 进程优先级
- QML中定位器和布局的区别
- JPA 各种实体锁模式的区别
- 今日BBC
- iOS开发学习笔记
- 大数相关计算(c语言版)
- Linux_ 文本处理三剑客中的“大宝剑“―Grep家族
- 安卓注册手机短信验证码验证的案例-01
- Objective-c 字典对象
- 三个水杯 (bfs)
- 封装控件的原理[未完待续]
- Codeforces 631D Messenger【KMP】
- Train and Test LeNet on your own dataset
- Codeforces 631D Messenger【KMP】
- 排序算法
- 面向对象的内存调用
- Cookie 与Session 的区别(转载)