您现在的位置是:首页 >学无止境 >Android-源码分析-MTK平台BUG解决:客户电池NTC功能(移植高低温报警,关机报警功能)---第二天分析与解决网站首页学无止境
Android-源码分析-MTK平台BUG解决:客户电池NTC功能(移植高低温报警,关机报警功能)---第二天分析与解决
一、进一步修改代码内容-过程
今日了解到,昨日所修改的kernel层的mtk_charger.h文件位于A13部分,然6769平台A13部分的kernel层不参与编译,那么修改后再编译等等后续操作验证结果自然无效,参与编译kernel层是A12部分的kernel-4.19,
1:代码修改
所以取消昨日的①修改,重新改在kernel-4.19目录文件下,具体修改文件位于:
kernel-4.19driversmiscmediatekincludemt-platmt6739includemach的目录下
修改内容同昨日的①修改一样,只是说,今日换了一个修改地址。
2:保存、检查代码
我使用的主要是git status 与git diff 这两个命令:
>git status -查看状态,检查本地代码修改情况
>git diff -查看修改具体内容
二、编译、打包、刷机测试-过程
1:编译
注意一下编译的规范,除了确定编译命令外,还要注意编译顺序:
先编A12部分:
>python vendor/mediatek/proprietary/scripts/releasetools/split_build_helper.py --run full_AGN_2263RD_DS12848_T-userdebug --layers vnd 2>&1 |tee total_build1.log
再编A13部分:
> ./MSSI_COPY_Make AGN_2263RD_DS12848_T userdebug
2:打包
打包路径位于A13部分:
> python out_sys/target/product/mssi_64_cn/images/split_build.py
> --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir ../S/out/target/product/AGN_2263RD_DS12848_T/images --output-dir
> output_load
3:刷机
不同平台刷机工具不同,针对MTK平台使用的工具为:FlashToolSelector
刷机步骤:
start— — —
1-打开FlashToolSelector
2-选择打包完成后生成的软件版本路径,
3-点击绿色按钮下载
4-将测试手机关机后,
5-手机USB线连接到电脑, 工具界面进度条开始刷新,
6-刷机中途发生了报错:—解决方案为把下拉选框中的<下载>选项切换为<全部格式化和下载> 断开手机USB连接,再次点击绿色按钮下载
7-再次用USB线将手机连接到电脑
8-刷机完成,手机自动开机
— — —end
4:测试(模拟测试)
BUG需求功能是在60度65度这种高温环境,申请让硬件部门使用专门的工具测试,在此之前要提前模拟测试有效后再说。
模拟测试是在测试手机连接电脑的情况下,使用终端命令进行模拟,
测试:adb模拟电池信息
> adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei
> level 100 --ei plugged 1 --ei temperature 600
上面这句命令的具体解释如下:
adb shell am broadcast -发送广播通知
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED -发送一个电池状态改变的广播
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei level 100 --ei plugged 1 --ei temperature 600 -设置电池电量为 100%,设置电池充电状态为充电中,设置电池温度为 60℃
以下是模拟测试相关命令:
adb -查看是否安装有adb
adb root -获取系统root权限
adb devices -查看设备连接状态
adb shell setenforce 0 -临时关闭权限
adb shell getprop -输出所有能查询到的参数信息
adb shell getprop xxx.xxx.xxxxxx -查询某某属性
adb shell am broadcast -发送广播通知
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED -发送一个电池状态改变的广播
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei level 100 --ei plugged 1 --ei temperature 600 -设置电池电量为 100%,设置电池充电状态为充电中,设置电池温度为 60℃
三、测试结果与分析
测试结果:电池电量发生变化,充电器状态改变也有效,但是不同级别的温度并没有引起提示框
继续分析:
前面的分析发送提示广播后并没显示提示的逻辑,回到framework层分析PowerNotificationWarnings.java
该源码编写了电池提示警告的各种方法,其中包括解除高温提示,解除关机提示,显示高温提示,显示关机提示等等,
其中onReceive中条件判断语句中如果ACTION_CLICKED_TEMP_WARNING.equals(action)为真,执行两个方法,第一个是解除高温提示,第二个是显示高温提示。
所以注释第一个执行的方法,同理,在显示高温提示方法中只有在mHighTempWarning为false时才执行显示语句,所以注释这个条件,使方法只要被调用就执行显示语句。
再次验证结果无变化。。。
目前而言,直接改动的是kernel层自定义温度数值与app层的相关温度值,
但对温度发生变化达到高温的判断逻辑,判断完成后执行提示语的逻辑,以及调用的提示语资源等没有清晰了解。。。