先说场景:
采购了一批华为的pad(android 7.0.0),每次开机都有锁屏壁纸,所以可以在开发者选项中的锁屏选项中关闭该功能。但部分设备的该选项是灰色的无法操作(具体原因不明),根据网络上说的清凭证,设密码都无效。所以花了些时间研究,记录一下思路。
前提是设备root了或者有系统权限,以下是设备root的情况处理:
1. 首先我对比了其他的设备,在开发者选项中未看到【锁屏】选项,以为这是华为自己定制的功能,由于没有源码。所以反编译了Settings.apk,其实这一步走了弯路,但还是记录一下,以下是我反编译的步骤:
1.执行命令获取Setting软件包安装信息
adb shell
dumpsys package com.android.settings
结果如下
2.执行命令pull安装包,通过apkTool工具反编译发现Settings.apk里面没有代码,所以拉取了.odex文件,然后转成.dex,最后使用apkTool查看
adb pull /system/priv-app/Settings/oat/arm64/Settings.odex
拉取后将.odex转成.dex文件,将Settings.odex拖到fetchOdex.bat打开,稍等片刻即可生成.dex文件,文件在文末一并提供
2. 反编了源码发现下面的配置:
当通过命令执行:
adb shell
su
setprop persist.sys.cc_mode 1
reboot
重启后发现也没有【锁屏】选项,但问题依然没有解决,只能还原找其他的原因!
通过一番查找,最终定位到以下代码(查找的过程就省略了,如果感兴趣可以再讨论)
最终的切入点就是LockPatternUtils.java
通过源码查看工具定位
根据setBoolean一步步最终定位到
**
基本可以确定整个setLockScreenDisabled()流程就是向locksettings.db数据库的locksettings表写入lockscreen.disabled字段。
**
既然有root权限,则直接拉库改表即可,该数据库的位置在data/system目录下,以下是我修改过后的样子
如果该表没有内容,将同目录下locksettings.db-wal和locksettings.db-shm一并拉下来.
最后一步就是push操作,以防万无一失,还是删除设备中的locksettings.db相关文件再push操作
adb shell
su
chmod 777 data/system/locksettings.db
reboot
重启见奇效!
附件apkTool工具:
链接:https://pan.baidu.com/s/1zbOv6mv9Ol9xAAaGJxm94Q
提取码:ngf8
源码查看工具:
http://androidxref.com/