关于Android apk 插件化开发

        项目越做越大,代码越来越多,资源越来越庞大,开发的模块化不得不提上日程,领导要求

研究下android apk的插件化开发:用户只需要安装基本的apk包,如果需要添加功能就下载一个

插件包来扩展,不需要一次就下载整个包,一次升级就升级10几M。

        google一些文章来研究,学到了很多以前不知道的东西,Library project ,android 的一种区别

于application project的项目,不能单独发布运行,可以把共用的代码放在library project里面,但是

发布的时候还是一个apk。适用的场景是在共同框架下面 替换一下不同的东西,和我们需要的功能

不太符合,简单看了下,飘过。

        还看了更换皮肤的原理:下载一个皮肤包,用皮肤包里面的资源替换原来的资源,通过createPackageContext

来创建一个Context,通过这个Context来获取包里的resource id,从而拿到图片资源。

        这个实现貌似和我们的需求相关,尝试了下,写了个demo。

一个base工程,一个add工程。

base的MainActivity里

  Context c = createPackageContext("com.example.add", Context.CONTEXT_INCLUDE_CODE);
  Class clazz = c.getClassLoader().loadClass("com.example.add.MainActivity");
  Object owner = clazz.newInstance();
  String  getStr =(String) (clazz.getMethod("getString",Context.class).invoke(owner,c));

add的MainActivity里

public String getString(Context c) {

       return c.getResources().getString(R.string.test);

}

ok 可行。


      貌似我们的工程也可以这样做,报部分代码和资源包在一个add包里,在主项目里

通过demo的方式来加载,只是要try catch下,exception就是没装add包。


PS:

Context.CONTEXT_IGNORE_SECURITY 这个flag如果加上可以不加shareUsrID。

奇怪,那shareUsrID不就是摆设了?费解!

ClassLoader一定得用create出来的Context对象获取,用本地的不行。

在调用扩展包的方法时候如果要用的Context还是得把本地Create出来的传进去。

可以直接通过上述方法new 一个定制的View,这样拿来直接addView 应该比较容易。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值