有时写一个程序需要调用系统的库,如果权限不够,是用不了库里面一些方法的 。这时就需要将apk进行系统签名。
简单常用的方法:
1,在apk的AndroidManifest.xml中的manifest节点中加入Android:sharedUserId="android.uid.system"
2,运行或打包得到apk
3,使用目标系统的platform密钥来给apk文件签名:
在系统android\build\target\product\security目录下找到platform.x509.pem 和platform.pk8两个文件;在系统在out/host/Linux-x86/framework目录下找到signapk.jar文件,把它们复制出来放到一个文件夹下,把需要进行系统签名的apk也和它们放到一个文件夹下。然后首先进入该文件目录,再在cmd上输入下面语句:Java -jar signapk.jar platform.x509.pem platform.pk8 被签名apk名称.apk 签名后apk名称.apk,执行完后会在当前目录得到一个新的apk "签名后apk名称.apk" 即为已经系统签名的apk。
举个列子,例如要签名reset.apk,如下图:
cmd进入当前目录:输入命令java -jar signapk.jar platform.x509.pem platform.pk8 reset.apk s_reset.apk
按回车键,生成的s_reset.apk即为已经系统签名的apk。
需要注意的是,其中必须platform.x509.pem 在 platform.pk8 之前,否则会报错。
参考:http://blog.csdn.net/lilidejing/article/details/45098879
注:
第二步时
通过eclipse编译,Android manifest XML中 shared user id 包含android.uid.shared等系统权限的时候,则会报以下错误;
Installation
error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
主要是由于使用了android.uid.shared导致的问题。
使用eclipse编译出apk文件,但是这个apk文件是不能用的。
然后拿这个apk进行第三步
--------------------------------------------------------------
另一解决方案如下
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
2. 使用mm命令来编译,生成的apk就可以在模拟器中运行了。
参考:http://blog.csdn.net/jumping_android/article/details/7241217
http://blog.csdn.net/happyhell/article/details/5903389