当前位置: 首页 > news >正文

让Android Studio支持系统签名

有时候,我们开发的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

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

相关文章:

  • 详解Java中的BIO、NIO、AIO
  • 取经阿里十年技术大佬,得到Java线上问题排查攻略!
  • Understanding memory usage on Linux
  • Java中的拦截器和过滤器有什么区别
  • 为什么要引入分布式任务调度系统?
  • 为什么说datax是目前最好的异构数据源数据交换工具
  • Java常用关键字:this、super、final、static、访问修饰符
  • JAVA UUID 生成唯一标识
  • 网络开发的最强大框架:Netty快速入门
  • 适配器模式详解与应用
  • 树莓派 - 使用须知
  • 粘包和半包有了解过吗?netty是如何解决这个问题的
  • 云计算与SOA之我见
  • 迭代器模式:理解与实践
  • [转]MySQL排序原理与案例分析
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • JAVA 学习IO流
  • JavaScript 基础知识 - 入门篇(一)
  • jQuery(一)
  • miaov-React 最佳入门
  • Spring Cloud中负载均衡器概览
  • 订阅Forge Viewer所有的事件
  • 基于web的全景—— Pannellum小试
  • 基于游标的分页接口实现
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊sentinel的DegradeSlot
  • 提醒我喝水chrome插件开发指南
  • 小程序开发之路(一)
  • 在weex里面使用chart图表
  • 阿里云ACE认证之理解CDN技术
  • 仓管云——企业云erp功能有哪些?
  • ​io --- 处理流的核心工具​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法)前K大的和
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (已解决)什么是vue导航守卫
  • (转)甲方乙方——赵民谈找工作
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 使用 XPath 来读写 XML 文件
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET命名规范和开发约定
  • .net下的富文本编辑器FCKeditor的配置方法
  • /etc/sudoer文件配置简析
  • @Autowired多个相同类型bean装配问题
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?