博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让Android Studio支持系统签名
阅读量:7071 次
发布时间:2019-06-28

本文共 2426 字,大约阅读时间需要 8 分钟。

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

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

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

常用系统签名方式

Android源码环境下签名

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

1、拷贝App源码到Android源码的packages/apps/目录下,且App源码是普通(Eclipse)格式的

2、配置Android.mk,在其中添加

LOCAL_CERTIFICATE := platform 或 shared 或 media

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


手动重新签名

这种方式比在源码环境下签名简单,App可以在Eclipse或Android Studio下编译,然后给apk重新签名即可。

但这种方式在频繁调试的时候比较痛苦,即使写成脚本,也需要重复一样的操作。

相关文件

platform.x509.pem、platform.pk8、signapk.jar

文件位置

platform.x509.pem、platform.pk8:

../build/target/product/security

signapk.jar:

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

signapk源码路径:

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

1、将相关文件及源apk文件置于同一路径下

2、检查源apk包,去掉META-INF/CERT.SFMETA-INF/CERT.RSA 文件
3、执行签名命令即可


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来寻求帮助,或参考 这篇文章。

相关文件

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

我的做法是在App根目录新建Signature文件夹专门存放签名相关文件。

步骤

1、生成demo.jks签名文件

2、编写签名脚本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

3、配置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,欢迎光临!
欢迎关注我的微信

转载于:https://www.cnblogs.com/connorlin/p/5669018.html

你可能感兴趣的文章
redux源码解析
查看>>
我是如何设计 Upload 上传组件的
查看>>
weekly 2019-02-15
查看>>
SpringBoot+jsp项目启动出现404
查看>>
Markdown写作中的图床解决方案(基于七牛云、PicGo)
查看>>
再次简单明了总结flex布局,一看就懂...
查看>>
一步步学会用docker部署应用(nodejs版)
查看>>
无root权限新建git仓库进行多人协同工作
查看>>
【跃迁之路】【687天】程序员高效学习方法论探索系列(实验阶段444-2019.1.6)...
查看>>
假装用某米赛尔号的角度看Python面向对象编程
查看>>
RGBA和OPACITY的区别&DISPLAY和VISIBILITY的区别
查看>>
膨胀的template class成员函数
查看>>
【leetcode】102. Binary Tree Level Order Traversal 水平遍历二叉树
查看>>
java中的内存模型
查看>>
Vue 初始化性能优化
查看>>
[LeetCode] Sudoku Solver [Backtracking]
查看>>
js函数调用模式和常用的几个方法
查看>>
zookeeper:集群中实例的数量
查看>>
基于redis实现的锁(用于控制nodejs的并发)
查看>>
js手札--关于AMD的简单分析
查看>>