android动态资源文件,Android 动态加载 之 如何获取插件res资源

直接上干货:

PackageManager pm = mContext.getPackageManager();

PackageInfo pi = pm.getPackageArchiveInfo(mFilename, 0);

mNewResources = pm.getResourcesForApplication(pi.applicationInfo);

0818b9ca8b590ca3270a3433284dd417.png

要获取插件的资源信息我们采用的是通过实例packageInfo,并动态的更改里边的sourceDir和publicSourceDir为插件Apk路径地址。

而这里关键的是什么时候去加载的资源信息呢:

1,pm.getPackageArchiveInfo

0818b9ca8b590ca3270a3433284dd417.png

public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags) {

PackageParser packageParser = new PackageParser(archiveFilePath);

DisplayMetrics metrics = new DisplayMetrics();

metrics.setToDefaults();

final File sourceFile = new File(archiveFilePath);

PackageParser.Package pkg = packageParser.parsePackage(

sourceFile, archiveFilePath, metrics, 0);

if (pkg == null) {

return null;

}

if ((flags & GET_SIGNATURES) != 0) {

packageParser.collectCertificates(pkg, 0);

}

PackageUserState state = new PackageUserState();

return PackageParser.generatePackageInfo(pkg, null, flags, 0, 0, null, state);

}

如图,在执行取packageArchiveInfo的时候,回去解析包文件,具体看源码:

这样在后边调用的时候无论是实例新的ContextThemeWrapper,还是取用资源对象都可以通过getResources()拿到,供动态加载插件资源所用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值