Android overlay目录资源文件替换原生配置

定义自己的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里面配置的资源文件覆盖,导致功能不正常。在编译我们的内存版本时,先生效我们的内存配置是对的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android overlay是一种在Android应用程序中实现界面定制化的技术。通过使用overlay,开发者可以在不修改原始应用程序代码的情况下,添加、修改或替换应用程序的布局、样式和源。在Android中,overlay通常是通过创建一个新的AndroidManifest.xml文件来实现的。\[1\] 在创建AndroidManifest.xml文件时,需要指定overlay的优先级、是否静态以及目标包名。优先级决定了overlay的显示顺序,静态表示overlay在运行时不会被修改,目标包名指定了要进行定制化的应用程序。\[1\] 除了创建AndroidManifest.xml文件,还可以参考一些相关的料来了解更多关于Android overlay的信息。例如,可以参考http://mmmyddd.github.io/wiki/android/overlay.html和https://developer.sonymobile.com/2014/04/22/sony-contributes-runtime-resource-overlay-framework-to-android-code-example/。\[2\] 在编译后生成的apk中,overlay的路径可以根据不同的方案进行调整。一种常见的路径是vendor/overlay/TestOverlay/TestOverlay.apk,可以通过设置LOCAL_MODULE_PATH来指定路径。\[3\] #### 引用[.reference_title] - *1* *3* [Android Overlay机制](https://blog.csdn.net/weixin_44021334/article/details/130421043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android overlay简单总结](https://blog.csdn.net/Dylan_Sen/article/details/78878641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值