Android 系统签名实现的三种方式

Android 系统签名实现的三种方式在项目开发时,如果需要使应用具有系统权限,例如可以支持静默安装和卸载APK,此时就需要使用系统签名。常用的系统签名方式包括在ubuntu环境下、手动签名和在AndroidStudio环境配置,三种方式中,实现最简单的是通过AndroidStudo方式,该方式的签名实现与正常的APK签名相同,唯一不同的就是签名文件是通过系统生成的。注意,无论采用何种签名方式,如果想实现具有系统权限的应用,在AP…

大家好,又见面了,我是你们的朋友全栈君。

在项目开发时,如果需要使应用具有系统权限,例如可以支持静默安装和卸载APK,此时就需要使用系统签名。
常用的系统签名方式包括在ubuntu环境下、手动签名和在AndroidStudio环境配置,三种方式中,实现最简单的是通过AndroidStudo方式,该方式的签名实现与正常的APK签名相同,唯一不同的就是签名文件是通过系统生成的。
注意,无论采用何种签名方式,如果想实现具有系统权限的应用,在APK生成时,都需要在AndroidManifest.xml中配置android:sharedUserId=“android.uid.system”,如下所示

<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.xxxx.xxxx"
           android:sharedUserId="android.uid.system">

</manifest>

1. ubuntu环境编译

该方式需要在安卓源码编译的环境下,在将APK打包至安卓系统升级包时,需要配置Android.mk文件,通过在配置LOCAL_CERTIFICATE 参数时,将其设置为PRESIGNED,如果需要改APK具有系统权限,使用系统签名,则需要设置为platform

LOCAL_CERTIFICATE := platform 或 shared 或 media

在设置好 Android.mk 文件后,在ubuntu环境下执行系统的编译流程。
如果之前在ubuntu环境下已经执行好了系统的编译流程,则可以直接cd到系统的package/apps目录下,进入到需要编译的APK文件目录下执行mm指令,或在其他目录执行mmm /package/apps/APK所在的文件夹名称。

2.手动签名

手动系统签名与Android的APK重签名不同,重签名是之前APK已经签名完成,在实际使用时,需要更改签名文件,例如一些特殊的算法处理对于系统的包名和签名都有绑定操作,如更换则无法使用。
手动系统签名是对于通过AndroidStudio的build生成的无签名的APK文件,进行手动系统签名操作。具体执行过程如下。

2.1 下载SignApk.jar

首先下载SignApk.jar包,如下图所示
在这里插入图片描述如果本地有安卓系统的源码,可以直接在本地的build\tools\signapk目录下查找到该jar包。

2.2 查找security文件

拿到系统定制厂商提供的security文件,不同编译下生成的security文件内容不同,需针对该安卓系统下的编译生成的security文件,因此这也限定了该系统签名后的应用只能在该系统下运行,在其他系统下运行就不具有系统权限。
在security文件中找到media.pk8和platform.x509.pem两个文件。

2.3 执行系统签名操作

将2.1中的SignApk.jar和2.2中的media.pk8和platform.x509.pem文件一起复制到包含需要签名的APK文件夹中,然后执行如下语句

java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk

生成的new.apk文件就是系统签名后APK文件。
该方式的操作,可参考安卓签名工具SignApk.jar使用教程,其已将签名的流程制作成Window下的.exe工具,只需一次配置,每次点击更换需要签名的文件即可。

3 AndroidStudio方式

通常对于APK的签名文件是通过AndroidStudio的New Key Store方式自定义实现,但是如果需要使用系统签名文件需要结合security文件中的media.pk8和platform.x509.pem两个文件,通过keytool-importkeypair实现,下载成功后,将media.pk8和platform.x509.pem两个文件放置在包含 keytool-importkeypair目前下,执行以下语句。

./keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

需要注意的是:

  • 该语句的执行是在ubuntu环境下执行的
  • platform.keystore为系统签名文件
  • android为签名密码
  • platform为签名的别名(alias)

生成系统签名后,在AndroidStudio中配置Signing签名信息,配置成功后在modle的buid.gradle中可以查看如下配置信息。

signingConfigs {
    releaseConfig {
        keyAlias 'platform'
        keyPassword 'android'
        storeFile file('.........platform.keystore')//签名文件路径
        storePassword 'android'
    }
}

4.总结

从以上的分析中可以看出,无论三种那种方式的实现,都离不开系统源码中的security目录下的media.pk8和platform.x509.pem两个文件,该两个文件是保证应用具有系统签名的前提,如果使用其他系统的文件,则在该系统中,无法具有系统权限。
对比以上方法,分为具有ubuntu和没有两种环境下。

  • 具有ubuntu的编译环境:则使用第一种比较简单,第三种生成的系统签名文件,可用于其他APK的签名使用,在AndroidStudio中配置后,方便调试使用,不必每次都执行命令行来生成签名后的APK文件。
  • 不具有ubuntu的编译环境:该方式只能通过第二种方式实现,且每次调试使用时都需要替换APK生成新的系统签名后的APK,操作比较繁琐。当然在2.3中也提到,可借助其他同学制作的小工具方便签名文件的使用。

参考
安卓签名工具SignApk.jar使用教程
让Android Studio支持系统签名
keytool-importkeypair 使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151954.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月21日 上午10:36
下一篇 2022年6月21日 上午10:36


相关推荐

  • 外网怎么访问内网ip_简述载波侦听多路访问的基本过程

    外网怎么访问内网ip_简述载波侦听多路访问的基本过程SQL Server使用侦听器IP访问时遇到”The target principal name is incorrect. Cannot generate SSPI context”…

    2022年4月20日
    44
  • KindEditor配置和使用

    KindEditor配置和使用|字号订阅很长时间没有写学习心得了,整理了一下思路,简单写一下吧。1下载kindeditor包,目前最新版本是kindeditor-3.5.5。下载地址:http://www.kindsoft.net/2.解压之后,解压目录kindeditor如下图所示。3.开始瘦身,其实调用kindeditor并不需要那么多文件,只要保留目录:…

    2022年10月12日
    4
  • 谈谈我对服务熔断、服务降级的理解

    谈谈我对服务熔断、服务降级的理解伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了)。想起有人总结的一句话,微服务架构的特点就是:“一解释就懂,一问就不知,一讨论就吵架”。其实对老外的总结能力一直特别崇拜,KevinKelly、MartinFowler、WernerVogels……,都是著名的“

    2022年5月2日
    40
  • 螺旋矩阵 js

    螺旋矩阵 js思路 1 矩阵遍历是顺时针遍历 2 先遍正序历数组第一个元素数组 再正序遍历数组每个元素数组的最后一个元素 3 再逆序遍历数组最后一个元素数组 4 再从下到上也就是 逆序 遍历每个数组的第一个元素 这个是思路具体执行 1 一个 state 用来做状态存储 上面四个思路对应四个状态 2 上面四个思路 每次遍历完都需要删除相对应元素或者数组 2 使用 while 循环 循环的条件就是数组长度不为空 下面是具体代码 parammatrixi 整型二维数组

    2026年3月16日
    2
  • 自己制作一个java:11的docker镜像

    自己制作一个java:11的docker镜像

    2021年8月4日
    222
  • 一个servlet登陆过滤器

    一个servlet登陆过滤器

    2021年7月23日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号