加载外置apk里面的图片

步骤1:新建项目,drawable添加图片,删除无用数据、配置等

build-->Build Apks,在build文件夹下面生成apk文件,copy备用

保留数据:res下面的drawable文件夹,及下级的图片(需要的图片),清单文件(仅包名即可),配置文件(版本、包名)

步骤2:把apk文件复制到设备上

demo里面是走assets,通过代码复制到设备的,

实际应用的时候,应该是走服务器下发,不管怎么走,最终都会拿到apk的存放路径

步骤3:加载apk(Resource、package、classloader)

1.获取apkinfo,主要是包名,后面根据包名拼类名,获取资源文件属性(getField,获取public的成员)

这里可以去反编译apk文件,获取对应的成员的值,以及直观看一下怎么拿

2.构建classloader,这里有两个:PathClassLoader、DexClassLoader

他们都继承BaseDexClassL,继承ClassLoader,PathClassLoader只能加载已经安装的apk里面的dex,

DexClassLoader可以加载dex、jar、apk,而且可以加载SD卡里面的,所以这里就选DexClassloader

3.构建Resource,通过AssetManager,把apk也加进去

步骤4:获取图片资源,加载

1.根据上面拿到的ApkInfo,拼资源文件的类名,获取成员的值(R.drawable.xxx对应的那个数字)

class : packgeName.R$drawable 成员:生成apk的项目里面drawable下面,不带后缀,可以看反编译的结果

getField去获取成员,然后强转

2.坑:这个数字不能直接使用,因为它并不是在我们本身的apk里面,会找不到的

3.使用上面的Resource,转换出来一个Drawable对象,图片直接使用

Resource.getDrawable(id)

demo审核中:https://download.csdn.net/download/qq_24179679/26365690icon-default.png?t=L892https://download.csdn.net/download/qq_24179679/26365690

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值