让Android Studio支持系统签名

有时候,咱们开发的apk须要用到系统权限,须要在AndroidManifest.xml中添加共享系统进程属性:java

android:sharedUserId="android.uid.system"
android:sharedUserId="android.uid.shared"
android:sharedUserId="android.media"

这时候apk的签名就须要是系统签名(platform、shared或media)才能正常使用。linux

经常使用系统签名方式

Android源码环境下签名

这种方式比较麻烦,你须要有编译过的源码环境,并按以下步骤:android

一、拷贝App源码到Android源码的packages/apps/目录下,且App源码是普通(Eclipse)格式的
二、配置Android.mk,在其中添加git

LOCAL_CERTIFICATE := platform 或 shared 或 media

三、使用mm编译App,生成的apk即系统签名github


手动从新签名

这种方式比在源码环境下签名简单,App能够在Eclipse或Android Studio下编译,而后给apk从新签名便可。
但这种方式在频繁调试的时候比较痛苦,即便写成脚本,也须要重复同样的操做。shell

相关文件

platform.x509.pem、platform.pk八、signapk.jarandroid-studio

文件位置

platform.x509.pem、platform.pk8: 微信

../build/target/product/security

signapk.jar: markdown

../out/host/linux-x86/framework

signapk源码路径: app

../build/tools/signapk
签名命令
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
步骤

一、将相关文件及源apk文件置于同一路径下
二、检查源apk包,去掉META-INF/CERT.SFMETA-INF/CERT.RSA 文件
三、执行签名命令便可


Android Studio系统签名

让Android Studio集成系统签名,须要用到一个工具keytool-importkeypair,详见下文。

keytool-importkeypair

keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore

这个工具的做用是将系统签名的相关信息导入到已有的签名文件里。可从这里下载。

工具的使用方法能够经过–help或README.textile来寻求帮助,或参考使用keytool工具 这篇文章。

相关文件

platform.x509.pem、platform.pk八、keytool-importkeypair、demo.jks、signature.sh

个人作法是在App根目录新建Signature文件夹专门存放签名相关文件。

步骤

一、生成demo.jks签名文件

二、编写签名脚本signature.sh,内容以下:

#!/bin/sh

# 转换系统签名命令
./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo

# demo.jks : 签名文件
# 123456 : 签名文件密码
# platform.pk八、platform.x509.pem : 系统签名文件
# demo : 签名文件别名

为脚本文件添加可执行权限:

$ sudo chmod a+x signature.sh

执行脚本:

$ ./signature.sh

三、配置builde.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就带有系统签名了。

若是想直接Run app就是release版且带系统签名的apk,还需修改:

1) 变体app

2) 修改buildTypes

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        signingConfig signingConfigs.release
    }
}

这样直接Run app就是带系统签名的release版apk了。

That’s all, Enjoy it!


原创文章,欢迎转载,转载请注明出处

个人简书帐号是ConnorLin,欢迎光临!


欢迎关注个人微信
相关文章
相关标签/搜索