美文网首页
Android Resources的一点笔记

Android Resources的一点笔记

作者: Simon_z | 来源:发表于2016-07-04 20:08 被阅读517次
    1. 一个进程有一个ResourcesManager类, 单例; 一个ResourcesManager类管理多个Resources;
    2. ResourcesManager中, 由mActiveResources的map, 保存多个ResourcesKeyResources的键值对, (不同分辨率, 语言); 由getTopLevelResources获取对应的Resources
    3. ContextImpl对象, 包含一个mResources的变量, context对象的getResources即返回此变量, 而mRseources对象由 getTopLevelResources方法获取
    4. Resources对象包含 AssetManager 对象
    5. app不走正常的初始化,没法获得AssetManager, 但是可以通过反射创建, AssetManager的私有方法 addAssetPath 接受一个dex文件的路径, 可以生成对于的AssetManager
    AssetManager assetManager = AssetManager.class.newInstance();
    Method addAssetPathMethod = assetManager.getClass().getMethod("addAssetPath", String.class);
    addAssetPathMethod.invoke(assetManager,  apkPath );
    
    1. 根据原apk的context对象, 可以创建一个新的Resources对象
    Resources superRes = context.getResources();
    Resources apkResource = new Resources(assetManager,superRes.getDisplayMetrics(),superRes.getConfiguration());
    
    1. 每个资源属性的定义, 由 packageName, TypeName, entryName 构成, 可以由getResourceName(resId)获得, "package:type/entry", 也可分别获得 getResourcePackageName getResourceTypeName getResourceEntryName

    2. Resources.getIdentifier 方法, 根据 entryName, typeName, package, 可获取对应资源在Resources对象中唯一的id;

    int resId = mResources.getIdentifier(resName, "drawable", packageName);
    

    相关文章

      网友评论

          本文标题:Android Resources的一点笔记

          本文链接:https://www.haomeiwen.com/subject/qofhjttx.html