查看了网上很多的资料,全部是大同小异,使用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,上面是有这个文件的,但是也不能在这个文件夹里进行修改;