天天看点

android 静默安装_关于定制系统,如何给你的Android应用系统签名

今天来点简单的我相信很多定制系统的同学都会有一些特定功能的需求,比如
  • 修改系统时间
  • 静默安装
  • 执行某shell命令

这些对于正常的应用来说,是需要很多技巧性的东西来做的,因为他们没有权限,而我们做定制系统的

话,可以给我们的应用来系统签名,这样就拥有系统的权限了,那我们应该怎么做呢?

我们以执行某shell命令为课题来解释:

首先,我们要知道,一般的命令都是在system/bin下,我们可以看图

android 静默安装_关于定制系统,如何给你的Android应用系统签名
使用shell命令,比如ls之类的,我们可以直接执行
try {Runtime runtime = Runtime.getRuntime();runtime.exec("ls");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
           
你会发现可以执行的,而且可以拿到返回值,通过返回一个Process,然后就可以拿到流了,这里不说,我们继续来看这个ls命令,如果你细心的话,你会发现,ls命令后面有一个字号:toolbox
android 静默安装_关于定制系统,如何给你的Android应用系统签名

关于toolbox,他是一个指令集,但是我们今天不讲他,但是你要知道他是一个全局集,有点类似配置了JAVA的环境变量,所有才会用户可以执行

但是我现在执行一个tinymix的指令

try {Runtime runtime = Runtime.getRuntime();Process exec = runtime.exec("tinymix -D 1");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
           
他肯定会报操作不允许,也就是我们没有这个权限,拿我们应该怎么去拿到这个权限呢?就是通过我们的系统签名

1.设置sharedUserId

为了拿到权限,我们需要在清单文件的manifest里设置和系统同一个UserId

android:sharedUserId=“android.uid.system”

2.获取签名文件

签名文件有三个
  • platform.pk8
  • platform.x509.pem
  • signapk.jar

这三个都是可以在源码里拿到的

platform.pk8和platform.x509.pem都可以在build/target/product/security/目录下找到

signapk.jar在build/tools/signapk/目录下

3.系统签名

//执行命令signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
           
我们拿到之后把这几个放在同一个目录下,然后打开cmd,执行命令
android 静默安装_关于定制系统,如何给你的Android应用系统签名

这句命令后面两个apk分别是你要签名的apk名字和签名后的apk名字,比如我需要签名的apk叫做app_debug

执行命令后会的到

android 静默安装_关于定制系统,如何给你的Android应用系统签名
ok,我们现在拿到Test.apk可不能安装,需要push到system/app下,执行命令
adb push apk路径 /system/app
           
但是很多人应该会报 Read-only file system错误的
android 静默安装_关于定制系统,如何给你的Android应用系统签名
那是因为你没有在remount模式下,你可以执行
adb root adb remount
           
就像这样
android 静默安装_关于定制系统,如何给你的Android应用系统签名

好的,至此,我们成功的系统签名了,接下来你就可以执行这个shell命令了

这里只是抛砖引玉下,各位自己发挥

有兴趣的可以加群:417046685