背景
个人想要了解一下关于系统权限方面的知识,而我又天真地以为只要把app push到/system/app/目录下,app就有系统签名了,也就能获取到系统权限了。但是其实这样是不行的。。。算了,学一下adb命令也行。
实现方式
参考:How to install user apps as Android system apps
想要把app放到已有系统的/system/app/目录下,有两种方式:
- 安装re管理器,通过re管理器来实现。
- 使用adb命令。
无论是哪种方式,前提手机都要root过才行,那么,先来学习如何root。
root手机
想要了解root原理的可以看下:Android 的提权 (Root) 原理是什么?
可以使用刷机精灵、kingroot等来root手机,个人更推荐kingroot,因为我试了刷机精灵失败了,kingroot成功了。
验证root是否成功只需要进入adb shell 然后su切换为root用户,看是否$变成#了,命令行的开头用户名也会变成root,如下所示:
开始push
手机root过后就能开始push了,手机系统是android 5.1
参考:android 安装apk 到 /system/app下面
没有root的手机在尝试直接push到/system/app/目录下时不是提示remote Permission denied 而是提示 remote Read-only file system(个人亲测)
可以进到/system/app/目录下,ls查看有没有对应的apk,这里我就不贴出来了。到了这一步,我们已经把apk放到/system/app/下了,但是我们还要安装该app呀,执行pm install?不用,这里只需要把对应的apk文件变成可读写可执行,然后重启一下手机,该apk就会自动安装了。可以adb shell后进入/system/app/目录执行ls -l查看对应apk的权限,我看了一下默认移进来后只是可读写,不可执行,所以如果不修改文件权限的话当然就不会安装了。
重启后发现桌面多了一个app,且是不可卸载的,那就代表成功了。
卸载系统应用
从系统目录中移除文件也是要root权限的,手机root后进入adb shell,切换为root用户,进入/system/app/目录rm 对应文件,然后重启就可以了,如下所示:
如果不行,重新挂载mount -o remount /system,再rm。
模拟器是否可行?
答案:我root没成功,所以没下文了。。。
虽然adb shell连接模拟器的时候直接显示的就是root用户,但是实际上操作的时候还是跟没root一样,装了kingroot上去,好久都没成功。于是我又参考android 模拟器root这篇文章试了下,在修改读写权限时失败,报以下错误:
查了下说要在sdk\emulator下用命令行启动模拟器,再执行,果然可以了。
第四步push的时候还是提示
个人理解:操作system目录不是需要root权限吗,上面所做的目的就是为了获取root,但是命令中又包含需要root才能执行的命令,这行不通吧?(个人见解)
关于push 到/system/app/的知识总结就到这里了,下面要开始验证文章开头我的困惑了。