如何为你的apk添加系统签名
给app提供接口,免不得在自测的时候需要自己写个demo来测试接口功能,而你的接口又避免不了需要一些权限限制,比如只有添加了
android:sharedUserId="android.uid.system"
的系统应用才能调用接口。但是你只是一个笨蛋系统工程师,不是app开发专家,怎么给app签名这种低概率搞的活你用一遍查一遍,有时候ok有时候不行。于是你打算记录一下你自己的解决方法,这样以后还搞不定的话省得你骂别人了:
First of all,确认你是有源码编译能力的,如果没有请出门右转、其次准备一个java环境(你的源码编译环境就行)
然后获取我们需要的三个签名文件,并准备好需要签名的apk文件
1.获得SignApk.jar包,如下图所示
可以先在build\tools\signapk目录下查找该jar包。
当然也许你和我一样,这个目录下只有源码没有jar包(如下图),那怎办?
自己编一个呗怎办怎办,.bp目录下mm编译即可,产物自己去out目录find吧。
2.查找签名文件
同样,find一下.pem和.pk8文件:
find -name platform.x509.pem
系统中可能在多个目录存在这两个文件,如果签名之后仍然无法正常安装和使用apk,可以多试几个目录,或者询问同事当前平台使用的签名文件是否为你用的那个目录下的文件。
3.执行系统签名操作
将上述两步获取的.jar文件、.pk8、.pem文件一起copy到包含需要签名的APK文件夹中,注意你的apk应当是一个未签名的apk
然后执行如下命令
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
获得如上很酷的报错,一看原来是缺库了
巧的是缺少的so当然是存在于系统中的,将它find出来一并copy到工作目录中,可以参考如下图所在的目录
现在,在执行的命令中添加指定so的路径(你copy过来了也就是当前路径)-Djava.library.path=.
当前的工作目录应该是这样的:
于是签名的命令现在是这样的:
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
至此,签名完成,生成的new.apk文件就是系统签名后APK文件。