定义自己的overlay目录资源文件替换原生配置
项目需求:memory内存专用测试版本,需要开机默认关闭自动亮度和双击电源键打开相机的功能。
一般思路是直接修改frameworks中SettingsProvider配置文件的初始值,将def_screen_brightness_automatic_mode修改为false
如果是MTK平台,是在vendor/mediatek/proprietary的路径文件中修改为false
但是直接修改的话,会影响到正式版本的配置,所以肯定不能直接修改。
方式一、源码修改(不推荐)
配置文件的值也是在DatabaseHelper初始化的时候加载到Settings.System.SCREEN_BRIGHINESS中的,可以连接手机用adb shell settings get system screen_brightness_mode,返回1表示配置的是true、打开了自动亮度开关。
我们可以定义一个defaults.xml定义一个false
然后在2257行进行修改:
if(内存专项测试版本){
loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
R.bool.def_screen_brightness_automatic_mode_memory); //加载我们自定义的标签,值为false。不要尝试在参数三直接传一个false进去,会报错的。
}else{
loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
R.bool.def_screen_brightness_automatic_mode); //加载系统原来的标签,值为true
}
但是以上并不是最好、标准的行为方式,下面的才是。
方式二、overlay替换资源文件方式修改(推荐做法)
覆盖的只是对应的标签、不是整个文件。
文件路径中cold代表公司名、coldaa代表项目名、iphone代表手机品牌名
1、添加一个memory/overlay目录,和项目中已经有的overlay目录区分开来。
memory/overlay目录下定义以下文件:
frameworks\base\core\res\res\values\config.xml(这个资源文件,因为MTK平台没有做修改,所以对应覆盖原生aosp,\system下的\frameworks\base\core\res\res\values\config.xml)
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Allow the gesture to double tap the power button twice to start the camera while the device
is non-interactive. -->
<!-- 配置默认关闭快速双击开关 -->
<bool name="config_cameraDoubleTapPowerGestureEnabled">false</bool>
</resources>
vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml(这个资源文件,因为MTK使用MtkSettingsProvider替换了原生的SettingsProvider,所以要对应的是MTK平台\system目录下的\vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml,而不是\system下的\frameworks\base\packages\SettingsProvider\res\values\defaults.xml)
<resources>
<!-- 配置默认关闭自动亮度开关 -->
<bool name="def_screen_brightness_automatic_mode">false</bool>
</resources>
1、如何让这个memory/overlay目录生效?
在system/vendor/cold/product/coldaa/iphone/configs.mk 文件中使用PRODUCT_PACKAGE_OVERLAYS引入这个memory/overlay目录
解析:
1、
(
L
O
C
A
L
P
A
T
H
)
是在文件最上方定义的,表示的是:
v
e
n
d
o
r
/
c
o
l
d
/
p
r
o
d
u
c
t
/
(LOCAL_PATH)是在文件最上方定义的,表示的是:vendor/cold/product/
(LOCALPATH)是在文件最上方定义的,表示的是:vendor/cold/product/(COLD_TARGET_PROJECT)/$(COLD_PROJECT_NAME),其实就是/system/vendor/cold/product/coldaa/iphone路径本身,然后加上目录memory/overlay
2、注意越在前面的越先生效,所以要放在PRODUCT_PACKAGE_OVERLAYS += \ $(LOCAL_PATH)/overlay (即/system/vendor/cold/product/coldaa/iphone/overlay路径的前面)。若放在其后面,会被/system/vendor/cold/product/coldaa/iphone/overlay里面配置的资源文件覆盖,导致功能不正常。在编译我们的内存版本时,先生效我们的内存配置是对的。