修改Android7.1.1里的Settings使设备能默认安装未知来源的应用
在Android7.1.1里,默认是不可以安装未知来源应用的,若想安装未知来源应用则需进入Settings里的安全设置,打开允许安装的开关即可。
但是现在我们因为项目需求,需要将其改为默认允许安装未知来源应用
编译及导入
先将Android7.1.1源码从服务器clone下来,用git clone 命令
再在Linux下编译此源码,编译前需配置环境
再编译./build.sh msm8996 –v eng –j3(或者j1)
再编译源码idegen模块及生成AS配置文件(*.ipr)
source build/envsetup.sh
lunch msm8996-eng
mmm development/tools/idegen
development/tools/idegen.sh
Android studio打开一个存在的项目,选择生成的.ipr文件导入
删除依赖:在android studio的File/Project Structure/Modoles/Dependencies
(1) Module SDK/NEW 选择一个SDK
查找需要修改的地方
在Android Studio的终端里切换至Settings目录,命令:cd packages/apps/Settings
因为代码太多,我们首先应该根据字符串(未知来源)来找到需要修改的位置
接下来使用几条命令来一步一步找到我们需要修改的地方
grep -nr 未知来源 *
结果:
如果grep -nr install_application *
如果grep -nr install_unknown_applications
grep -nr toggle_install_applications * | grep java
查看warnAppInstallation()和setNonMarketAppsAllowed()
INSTALL_NON_MARKET_APPS在android/frameworks/base/core/java/android/provider/Settings中,所以在Linux终端中输入cd android/frameworks/base
grep -nr “INSTALL_NON_MARKET_APPS” *,看这两个类
在DatabaseHelper类中
grep -nr def_install_non_market_apps
false改为true
只需要修改此资源文件这个小小的点就可以实现默认安装未知来源应用,但是想要找到它还是要花些功夫的。
编译源码
命令行输入:./build.sh msm8996 -v eng -j3(或j1)
刷机
命令行分别输入:
adb reboot bootloader
sudo fastboot flash system out/target/product/msm8996/system.img
(若未成功,则再刷一遍
sudo fastboot flash boot out/target/product/msm8996/boot.img
sudo fastboot flash userdata out/target/product/msm8996/userdata.img)
sudo fastboot reboot
启动查看效果
可能会遇到的问题
- 虚拟机内存不足
- 编译环境配置不正确
安装正确的jdk:sudo apt-get update
sudo apt-get install openjdk-8-jdk