有时候,我们开发的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来寻求帮助,或参考使用keytool工具 这篇文章。

相关文件

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
  1. 修改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!

更多相关文章

  1. Android解决禁止使用http协议的方案
  2. Android(安卓)Studio(三):设置Android(安卓)Studio编码
  3. 编译Android内核模块
  4. Android学习笔记之mainfest文件中android属性
  5. android 学习总结
  6. Android(安卓)'showAsAction' in package 'android'错误解决
  7. Android(安卓)TextView背景色、圆角、内部填充设置
  8. Android学习笔记之mainfest文件中android属性
  9. How to decompile .dex file on Android如何反编译.dex文件

随机推荐

  1. 详解Android实现XML解析技术(图)
  2. XML中处理指令的代码详解
  3. 详细介绍XML Web Service图文代码实例
  4. 详细介绍XML代码编写的编码与验证问题
  5. XSLT语法—在.net中使用XSLT转换xml文档
  6. XML中的DTD文档类型定义详细介绍
  7. XmlSerializer 对象的Xml序列化和反序列
  8. XML编程中的模式定义XSD示例代码详解
  9. XML中的树形结构与DOM文档对象模型的示例
  10. XPath语法: 在C#中使用XPath示例的具体代