美文网首页
Android 什么是Overlay?怎么做?

Android 什么是Overlay?怎么做?

作者: 小马要加油 | 来源:发表于2019-11-11 16:03 被阅读0次

    问题

    今天涉及到修改系统主题,想采用overlay的方式,google了一圈,发现有很多大佬分享完知道是这么一回事,就不知道这么入手,都是Overlay分为静态sro和动态rro,sro就是一个apk,那这些代码要写在哪??
    动态rro会生成一个apk,那这个apk要放在哪才会生效,看完我是一脸懵逼。所以我记录下这个门怎么入。
    介于我也是入门,我就不分享门里面的风景有多美了,毕竟我入门完就发现这个方法太体力活了,不符合程序员的气质,就夺门而出,想其他方法了。

    简介参考:

    这个大佬写的特别好,有需要理解机制原理的可以看下,急于实践的跳过看我的步骤说明
    Android Overlay机制:SRO/RRO
    https://www.jianshu.com/p/9304089c513d

    实操 步骤详解

    以修改framework-res为例:

    静态:3步

    系统默认路径已经配好,需要在
    1、..\device\rockchip\device-name\device\overlay\frameworks\base\core\res\res
    这个目录放入修改的资源
    2、进入 frameworks/base/core/res/ 目录下 mm下编译framework-res
    3、将生成的framework-res放入system/framework/目录下
    重启验证即可。

    动态:

    1、需要一个目录,其中包括以下文件:
    AndroidMainfest.xml、Android.mk 、res

    AndroidMainfest.xml:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"     
                               package="com.test.example.overlay" 
                                android:versionCode="1" android:versionName="1.0">
                       <overlay android:targetPackage="android" android:priority="1"/> 
    </manifest>
    

    其中targetPackage对应被overlay的包名(android 为frameworks-res的包名),priority为优先级(越高越优先)

    Andoroid.mk

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
     LOCAL_MODULE_TAGS := optional
     LOCAL_SRC_FILES := $(call all-java-files-under, src)
     LOCAL_SDK_VERSION := current 
    LOCAL_PACKAGE_NAME := (AndroidMainfest.xml对应的包名) include $(BUILD_PACKAGE)
    

    res:
    存放要overlay的资源

    2、在包含.mkde 目录下mm一下生成apk

    3、将生成的apk放到指定的目录下。(只有放在正确的目录下才会生效)

    指定的目录在AssetManager.cpp下指定的(frameworks/base/libs/androidfw/AssetManager.cpp)

    const char* AssetManager::OVERLAY_DIR = "/vendor/overlay"

    这个目录可以也是可以改动的

    4、重启

    相关文章

      网友评论

          本文标题:Android 什么是Overlay?怎么做?

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