赞
踩
有时候,我们开发的apk需要使用到系统权限,需要在AndroidManifest.xml中共享系统进程的属性:
- android:sharedUserId="android.uid.system"
- android:sharedUserId="android.uid.shared"
- android:sharedUserId="android.media"
这时候,apk的签名就需要是系统签名(platform、shared和media)才能正常使用。
这种方式比较麻烦,你需要有编译过的源码环境,并按如下步骤:
配置Android.mk,在其中添加:
LOCAL_CERTIFICATE := platform(media,shared)
这种方式比源码环境下签名简单,App可以在Eclipse和Android Studio下编译,然后给apk重新签名即可。
但是这种方式在频繁Debug的时候毕竟痛苦,即使写成脚本,也需要重复一样的操作。
相关文件:
platform.x509.pem、platform.pk8、signapk.jar
文件位置:
签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
步骤:
让Android Studio集成系统签名,需要用到一个工具keytool-importkeypair,详见下文
keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore
这个工具的作用是将系统签名的相关信息导入到已有的签名文件里。GitHub地址:keytool-importkeypair
platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh
我的做法是在App根目录新建Signature文件夹专门存放签名相关文件。
编写签名脚本signature.sh,内容如下:
-
- #!/bin/sh
-
-
- # 转换平台签名命令
-
- ./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo
-
- # demo.jks : 签名文件
-
-
- # 123456 : 签名文件密码
-
-
- # platform.pk8、platform.x509.pem : 系统签名文件
-
-
- # demo : 签名文件别名
为脚本文件添加可执行权限:
sudo chmod a+x signature.sh
执行脚本:
./signature.sh
配置build.gradle
在android区域下(与defaultConfig同级)添加配置:
- signingConfigs {
- release {
- storeFile file("../signature/demo.jks")
- storePassword '123456'
- keyAlias 'demo'
- keyPassword '123456'
- }
-
- debug {
- storeFile file("../signature/demo.jks")
- storePassword '123456'
- keyAlias 'demo'
- keyPassword '123456'
- }
- }
这样debug或者release apk就带有系统签名了。
关于系统签名用pk8签名异常出来:android系统签名_不能仅仅只做个码农而已的博客-CSDN博客
推荐使用linux环境签名(我用的ubuntu系统),反正我用Windows没成功会报错
Error: Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path
准备 signapk.jar 、platform.x509.pem 、platform.pk8、libconscrypt_openjdk_jni.so文件和需要签名apk放到同级目录下。命令行进入到此目录下。
签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 aa.apk aa_signed.apk
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 aa.apk aa_signed.apk(亲测可行)
关于怎么查看签名:
keytool -list -printcert -jarfile D:\GoogleNewTest\sdkgoogle.apk
keytool -printcert -file C:\Users\Administrator\Desktop\t\META-INF\CERT.RSA
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。