问题
今天涉及到修改系统主题,想采用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、重启
网友评论