查看了网上很多的资料,全部是大同小异,使用mk文件,创建的替换文件放到/vendor/overlay。

但是在android studio的虚拟机里面,却没有权限进行文件的编写,就是没有-w权限。所以现在进行总结一下。

对于android studio中进行Overla资源替换。首先需要保证包签名相同,然后需要先将overlay等替换的模块进行安装,就是将对应模块在虚拟机中进行安装。如图所示:

先安装overlay_green、overlay_red等替换的资源,然后在安装app模块。对于安装信息查询,可以在虚拟机路径或者设备路径/data/system/overlays.xml文件中查询。如下图:

packageName:替换文件的包名称--->overlay_red
targetPackageName:替换资源的包文件--->app
其他自行查看;


在原模块中(app),需要在AndroidManifest.xml文件中加上系统签名,否则可能出现java.lang.NoSuchMethodError:.....................异常;

系统签名如下:android:sharedUserId="android.uid.system

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.ivi.setting"
    android:sharedUserId="android.uid.system">

包依赖为framework.jar,这个需要在build.gradle文件中添加。

当上述所有确定之后,就可以使用overlay机制进行主题切换。

通过对比真实设备和虚拟机设备,发现一个问题。我用的是android 11的设备,是可以在/vendor文件夹里面发现overlay文件夹的,但是在虚拟机中同路径下是没有看见overlay文件夹的。这个是什么原因暂时还没有发现,只能期待其他人来解答了。虽然虚拟机中没有这个路径,但并不影响上述的实现,因为最后文件是通过包名来查找,所以不会影响。

 overlay安装包路径,不同设备可能不同。

手动创建overlay文件夹,显示为只读,不可创建,使用了adb root && adb remount也不行。

我自己本人用的是vivo,上面是有这个文件的,但是也不能在这个文件夹里进行修改;

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐