用 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

如图,Choose existing... 选择 app 目录下的 beauty.keystore 文件;
Key store password 即为密码,对应 beauty100 ;
Key alias 为别名,对应 love ;
Key password 为别名的密码,保持和 Key store password 一致,要不然编译报错。

下一步,选择 release 版本打签名,debug版本选上也没问题,
v1 、v2 版本签名都打上,Finish

三、配置 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 即是具有系统签名的应用。

更多相关文章

  1. Android(安卓)NDK开发之旅(5):Android(安卓)Studio中使用CMake进
  2. Android(安卓)Studio查看Android(安卓)5.x源码的步骤详解
  3. android studio gradle 多版本多apk打包(打包系列教程之五)
  4. Android文件相关:RandomAccessFile介绍与使用demo
  5. Android(安卓)ClassLoader
  6. Android(安卓)Support V4, V7, V13的作用与用法
  7. android 数据存储之 SharedPreference
  8. Android(安卓)Studio下Ndk开发踩过的坑以及解办法决
  9. Android(安卓)反编译

随机推荐

  1. Android 事件全局监听(二)需要root权限 ,使
  2. Android之Service总结
  3. Android原生生物识别 VS 微信Soter
  4. Android无线连接打印第三方开发的实现
  5. Android APK 签名比对,防止软件被破解使用
  6. React-Native系列Android——Javascript
  7. React Native监听Android回退按键,程序化
  8. Android中微信主界面菜单栏的布局实现代
  9. Android Material Design 系列之 SearchV
  10. Android 无障碍服务一 让应用具有辅助性