使用AndroidStudio生成打有系统签名的apk

用 Android Studio 开发应用时,adb 连接设备后,可以直接 run 运行到设备上。
当 debug 的是系统应用时,都会配置 android:sharedUserId="android.uid.system"
因为没有打系统签名, 无法直接装到设备上,不利于开发效率。
于是有了AS给应用打系统签名的需求。

要打系统签名,需要如下工具:
1.系统签名文件 platform.x509.pem platform.pk8 ; 在源码 build/target/product/security 路径下;
2.keytool-importkeypair-master 工具以及 Linux 环境;
keytool-importkeypair-master下载链接 https://github.com/getfatday/keytool-importkeypair

一、使用platform.x509.pem platform.pk8生成 keystore

在Linux环境下,在 keytool-importkeypair-master 根目录放置 platform.x509.pem 、 platform.pk8 文件,进入 keytool-importkeypair-master 根目录执行

./keytool-importkeypair -k name.keystore -p yourpassword -pk8 platform.pk8 -cert platform.x509.pem -alias mykeyalias

其中,name.keystore 为生成的 keystore ,name 是 keystore 的名称,随便取;
keystore 的密码为 yourpassword,一般为字母和数字;
mykeyalias 为 keystore 的别名,随便取;
举例,要生成 beauty.keystore ,密码为 beauty100 ,别名是 love ,则命令为:

./keytool-importkeypair -k beauty.keystore -p beauty100 -pk8 platform.pk8 -cert platform.x509.pem -alias love

ps: 生成 jks 文件也是可以的,如果生成的是 jks 文件,后面的操作步骤同 keystore ,将对应的 keystore 替换为 jks 即可。

./keytool-importkeypair -k beauty.jks -p beauty100 -pk8 platform.pk8 -cert platform.x509.pem -alias love

二、AndroidStudio导入keystore

我的AS是 4.0 版本,为方便,将生成的 beauty.keystore 放到工程的 app/ 目录下,
Build --> Generate Signed Bundle/APK -->APK --> Next
使用AndroidStudio生成打有系统签名的apk_第1张图片
如图,Choose existing... 选择 app 目录下的 beauty.keystore 文件;
Key store password 即为密码,对应 beauty100 ;
Key alias 为别名,对应 love ;
Key password 为别名的密码,保持和 Key store password 一致,要不然编译报错。

下一步,选择 release 版本打签名,debug版本选上也没问题,
v1 、v2 版本签名都打上,Finish
使用AndroidStudio生成打有系统签名的apk_第2张图片

三、配置 app 的 build.gradle

android { } 里添加 signingConfigs {}signingConfig signingConfigs.release
signingConfigs{ } 要添加在 buildTypes{ } 之前,否则提示 signingConfigs.release 找不到

	
    signingConfigs {
        release {
            storeFile file('beauty.keystore')
            storePassword 'beauty100'
            keyAlias 'love'
            keyPassword 'beauty100'
        }
        // 如果 debug 版本也打签名,则添加这一部分
        debug {
            storeFile file('beauty.keystore') 
            storePassword 'beauty100'
            keyAlias 'love'
            keyPassword 'beauty100'
        }
        // 如果 debug 版本也打签名,则添加这一部分        
    }

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

其中, storeFile file('beauty.keystore') 指 beauty.keystore 相对于 app/build.gradle 文件的路径,我把 beauty.keystore 文件放到了 app/根目录, app/build.gradle 文件也在 app/ 根目录,所以直接这样写;
如果 beauty.keystore 文件放在 app/ 同个目录,则应该这样写:
storeFile file('../beauty.keystore')

也可以按照磁盘(windows)目录写:
storeFile file('D:\\xxx\\xxx\\SignedDemo\\app\\beauty.keystore')

storePasswordkeyPassword' 保持一致,否则AS编译会报错: Cannot recover key

别忘了在 AndroidManifest.xml 添加 android:sharedUserId="android.uid.system"

至此,配置完成,AS 上编译出来的 app 即是具有系统签名的应用。

你可能感兴趣的:(Android,android)