美文网首页Android Other
剖析 android getResource 过程,以及系统换肤

剖析 android getResource 过程,以及系统换肤

作者: MickCaptain | 来源:发表于2019-09-25 20:00 被阅读0次

    一. activity 启动后resource 初始化流程

    init.png
    • 该图描述了activity 启动一些列资源初始化的过程
    • 红色字体处是获取apk内部资源的过程

    二. activity 根据id获得资源的流程

    demo.png
    • 该图描述了获取resource id 的过程,在初始化启动流程结束后, 会缓存一个resource table ,从本地缓存中取出资源id

    以上resource图片摘抄自网络(https://www.jianshu.com/p/c978cd21d5f9)


    三. android 换肤流程

    换肤流程

    1. 类似于framework-res.apk 建立一个只有资源的apk
    2. 该资源apk内部设置
      2.1 资源文件替换, 需要和要替换皮肤apk的resource 名称保持一致
      2.2 ActivityManifest.xml 文件修改
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.jiangyu.rrodemooverlay" >
        <overlay
            android:priority="1"
            android:targetPackage="com.jiangyu.rrodemo" />
    </manifest>
    
    

    2.3 Android.mk 文件的书写

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)  
    LOCAL_MODULE_TAGS := optional
    #include files in src directory
    LOCAL_SRC_FILES := $(call all-subdir-java-files)
    #include files in res diretory
    LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res  
    LOCAL_SDK_VERSION = current
    #the name of target apk 
    LOCAL_PACKAGE_NAME := RRODemoOverlay
    include $(BUILD_PACKAGE)
    
    
    1. 打包签名成apk
      3.1生成未签名apk
     aapt package -M AndroidManifest.xml -S res/ -I ~/Android/Sdk/platforms/android-27/android.jar -F sample-overlay-1.0.apk.u -f
    

    3.2 使用target.apk 相同的keystore签名

    jarsigner -keystore ~/.android/debug.keystore sample-overlay-1.0.apk.u androiddebugkey
    

    3.3 优化apk文件

    zipalign 4 sample-overlay-1.0.apk.u sample-overlay-1.0.apk
    

    以上过程如果只是做实验可以直接使用debug 签名或者默认系统签名, 将项目放置在aosp代码树下进行mm编译

    1. Runtime Resource Overlay 实现流程
      4.1 adb 新建 /system/vendor/overlay
      4.2 将生成的overlay.apk放置在/system/vendor/overlay

    换肤原理

    Runtime Resource Overlay 是在android 5.0后被引入,原理其实是应用调用资源getString/getDrawable 其实是将resource id 传到framework, 有该层判断资源的具体位置, framework 取资源的顺序先overlay 在原生apk目录


    RuntimeResourceOverlay.jpg

    相关文章

      网友评论

        本文标题:剖析 android getResource 过程,以及系统换肤

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