插件化开发之资源访问

11 篇文章 0 订阅
7 篇文章 0 订阅

插件化开发之资源访问


插件可以是一个安装的apk或未安装的apk,
这里为了简便以安装的apk为例,如果要使用未安装的apk只需要将类加载器更换下基本就可以了
但首先明确下,2个进程间的数据是不能共享的,所以跨进程访问数据行不通
所以我们需要将我们的2个apk运行到同一进程中
android里面的方法是在manifest文件中的manifest标签属性中配置相同的shareUserId即可
ok,接下来可以正式实现我们的插件了
第一步:既然要访问插件,我们肯定得找到相应的插件包,android中对所有包进行管理的肯定是pm
               通过pm遍历所有的包信息
               过滤条件为:ShareUserId相等但包名不等
第二步:找到插件包中我们需要的资源,我们知道资源应该都是在R文件中有一个id的
               我们平时使用资源的时候如图片资源这样访问即可Context.getResources().getDrawable(R.drawable.xxx)
               所以我们要做的事有两件1.获得到插件中的Context2.获取到R文件中资源对应的id
               1.获取插件中的Context
               plugContext = mContext.createPackageContext(packagename, CONTEXT_IGNORE_SECURITY | CONTEXT_INCLUDE_CODE);
          通过咱们的这个Context去调用创造一个包名对应的插件Context,其中包名为插件包名,权限设置为忽略警告和可写代码
         2.获取R文件资源中对应的id
          首先需要获取到R文件中要使用的那个资源类,这些资源类都以R的内部类形式存在,然后用类加载器加载下这个类就可以
          应该是PathClassLoader(因为咱们加载的是安装过的apk,如果没有安装使用DexClassLoader )
               类的话无非包名.R$drawable(以图片资源为例,其他资源将drawable换为其他类就ok了)
               然后用反射遍历这个类中的属性,找到符合约定的那个名字,然后得到它的值就可以了
第三步:使用获取到的插件Context去访问获取到的资源对应id,然后就可以拿到值了
ok,插件化也不是非常麻烦的,技术中只要有步骤可依,找到这些步骤,一一解决就可以,所以现在看来还是比较简单的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值