Android - 自动系统签名

这篇具有很好参考价值的文章主要介绍了Android - 自动系统签名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、系统签名

以下是两类应用开发场景:

  • 普通应用开发:使用公司自定义 keystore 进行签名,如:微信、支付宝
  • 系统应用开发:使用 AOSP 系统签名或厂商自定义 keystore 进行签名,如:设置、录音

系统应用开发相对于普通应用开发拥有更高的权限,可以使用一些系统级别的 API,比如:

  • 静默安装(android.permission.INSTALL_PACKAGES
  • 屏幕抓取(SurfaceControl#createDisplay
  • 设备音频抓取(AudioSource.REMOTE_SUBMIX
  • 应用外悬浮窗

系统应用开发只适用于以下几类开发者:

  • Android 系统定制开发者(自主拥有系统签名)
  • Android 系统厂商合作开发者(能拿到厂商的自定义系统签名)

温馨提示:如果你不属于以上类别,那么你要清楚,没有系统签名一切都是空谈。

1、配置

系统应用开发需要在清单文件根节点指定 sharedUserId

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system">
    ...
</manifest>

2、签名

配置完 android:sharedUserId="android.uid.system" 之后,此时的 app 是无法成功安装到设备的,控制台会提示 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,这是因为此时 app 已经被识别为系统应用,但是其签名信息却不是系统签名,于是无法通过系统检验。进行系统签名需要准备好如下几个文件:

  • platform.pk8:签名证书
  • platform.x509.pem:签名证书
  • signapk.jar:签名工具

如果你的设备是纯纯的原生系统(AOSP),那么可以在以下网址中找到这几个签名文件:

  • https://github.com/aosp-mirror/platform_build/tree/master/target/product/security
  • https://github.com/techexpertize/SignApk
  • https://github.com/maks/aosp-signapk

注:如果是 Android 系统厂商合作开发 这种场景(自定义过系统签名),那么以上文件应该让合作厂商提供。

签名文件准备好之后,就可以通过以下命令对 app-unsigned.apk 进行系统签名了:

java -jar signapk.jar platform.x509.pem platform.pk8 app-unsigned.apk signed.apk

命令执行之后,生成出来的 signed.apk 文件就已经是经过系统签名的了。

3、安装

执行 adb install signed.apk 命令后,发现这次就可以正常安装了。通过 adb install 这种方式,就跟我们平时普通应用开发一样,apk 会被安装到 /data/app/ 目录下,但是因为指定了 android:sharedUserId="android.uid.system",所以,这时的 app 会被认为是系统应用,可以使用系统权限。

注:除了 android.uid.system 以外,sharedUserId 还可以指定其他值,详情说明可通过以下文章了解:https://www.cnblogs.com/scarecrow-blog/p/4876628.html

另外,如果你是 Android 系统定制开发者,你也可以将该 apk 文件放置到 /system/app/system/priv-app 目录下,之后 系统烧录 或 OTA 升级时就会自动携带上该系统应用。

二、自动签名

经过上面的几个步骤后,我们确定能将自己开发好的系统应用成功安装到设备上,但是,你会发现签名环节太麻烦了,每次都要手动对 apk 进行签名,非常不利于开发和调试。当然,我们可以通过编写 gradle 脚本,在项目每次编译完成时,执行自动签名任务,但是这种方式并不是最优解,还有一种更简单的方式。

1、生成系统签名文件

我们知道,Android 项目中可以在 build.gradle 文件的 signingConfigs 域中配置我们的自定义签名文件(*.jks),在配置好 buildTypes 之后,每次编译时 gradle 都会自动对 apk 进行签名,那这个签名文件(*.jks)能不能是系统签名文件呢?答案是可以的。keytool-importkeypair 这个工具可以将系统签名信息(*.pk8*.pem)导入到现有签名文件中(*.jks),以下是它的仓库地址:

  • https://github.com/getfatday/keytool-importkeypair

将仓库中的 keytool-importkeypair 文件下载下来,然后执行以下命令:

# 语法:
# keytool-importkeypair [-k keystore] [-p storepass] -pk8 pk8 -cert cert -alias key_alias

# 示例:
keytool-importkeypair -k platform.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias platform

注:上面示例中 platform.jks 是我自己创建的签名文件(不知道怎么创建签名文件的请自行 ChatGPT~),请根据你自己项目的实际情况,修改 keystore、storepass、key_alias 等参数。

有一点需要特别注意,keytool-importkeypair 是 shell 脚本,在 Unix 系统下可以直接运行,但是在 Windows 系统下(cmd 或 PowerShell)是无法直接运行的,这时可以借助 Git Bash 来执行该命令。

android 系统签名,Android笔记,android,系统签名,sharedUserId,importkeypair,keytool

注:如果你的 Git Bash 出现乱码,可以在右键->Options->Text,将 Locale 设置为 zh_CNCharacter set 设置为 GBK 即可。如果还是乱码,那么改成 UTF8 等其他字符集逐个试试吧~。

执行命令后,原本的 platform.jks 文件会被覆盖成拥有系统签名信息的签名文件了。

2、配置系统签名文件

接下来就跟普通应用开发一样,在 app 工程的 build.gradle 文件中配置一下签名就好了:

android {
    ...
    signingConfigs {
        platform {
            storeFile file('../config/signing/platform.jks')
            storePassword "123456"
            keyAlias "platform"
            keyPassword "123456"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.platform
        }
        debug {
            initWith(buildTypes.release)
            debuggable true
            minifyEnabled false
        }
    }
    ...
}

注:initWith(otherBuildType) 可以让当前 buildType(debug)复制其他 buildType(release)的配置,减少相同配置的代码量。虽然这很方便,但是一定要注意,如果是 debug 构建类型,一定要指定其 debuggable 为 true(因为 release 的 debuggable 默认为 false),否则你的工程可能会无法进入 debug 模式。

至此,我们就可以像普通应用开发那样,愉快的开发系统应用了。文章来源地址https://www.toymoban.com/news/detail-619729.html

到了这里,关于Android - 自动系统签名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android11.0 生成系统签名.jks文件并对Apk进行签名

    V2签名 对应用手动进行系统签名,需要platform.pk8,platform.x509.pem,signapk.jar这三个文件,应用的AndroidManifest.xml中需要添加 android:sharedUserId=“android.uid.system” ,然后输入以下命令就可得到签名后的apk文件: 如果你的应用 targetSdkVersion=30 ,在7.0以上的设备上安装不成功,会报以

    2024年02月07日
    浏览(56)
  • Android查看签名信息系列 · 使用Android Studio获取签名

    前言 Android查看签名信息系列 之使用Android Studio获取签名,通过Android Studio自带的gradle来获取签名信息。 优点:此法可查看 MD5、SHA1 等信息。 缺点:升级某个Studio版本后,没有签名任务了,特别不方便。 实现方法 一、使用 Android Studio 创建gradle获取签名信息。 1、使用 Androi

    2024年02月07日
    浏览(47)
  • Android APK 签名打包原理分析(二)【Android签名原理】

    说到签名,从这个词来理解,正常个人需要签名的时候,一般是用来证明这是某个人的特属认证。 大家是否有印象?还记得我们之前在学习、总结网络相关知识的时候,说到过,客户端和服务端虽然通信数据上,可以采用对称加密和非对称加密组合去进行数据的加密,但是这

    2024年01月18日
    浏览(51)
  • Android签名 一 查看签名信息

    你可能想知道 通过这篇文章可以解决哪些问题以及学到什么:  1.如果我们有一个应用,如何查看应用的签名信息?  2.如果我们有签名原始文件,如何查看签名文件中的签名信息? 这篇文章介绍了如何查看应用和签名文件中的签名信息。 keytool -list -printcert -jarfile [APK文件路

    2024年02月03日
    浏览(31)
  • 【Android签名机制详解】二:Android V1、V2、V3、V4签名方案

    书接上回【Android签名机制详解】一:密码学入门,在了解了消息摘要、非对称加密、数字签名、数字证书的基本概念后,我们趁热打铁、直奔主题,讲解签名在Android中的实际应用。 Android的数字证书(.der 或 .pem )是存放在密钥库文件(.jks 或 .keystore)当中的,而 数字证书作

    2024年02月12日
    浏览(32)
  • Android问题笔记 -如何实现代码控制自动旋转开关的变更以及当前状态

    专栏分享 点击跳转=Unity3D特效百例 点击跳转=案例项目实战源码 点击跳转=游戏脚本-辅助自动化 点击跳转=Android控件全解手册 点击跳转=Scratch编程案例 点击跳转=软考全系列 众所周知,人生是一个漫长的流程,不断 克服困难 ,不断反思前进的过程。在这个过程中会产生很多对

    2024年02月08日
    浏览(44)
  • Android 签名方法---同时使用V1和V2签名

            V1签名(jar signature):         V1是Android7.0之前的签名方式,使用JDK中的jar signature方式对APK进行签名打包。签名完成后会生成一个META-INF文件夹,里面有三个文件:MANIFEST.MF,CERT.RSA,CERT.SF,是用来记录签名信息的。简单来说V1 签名是对压缩包中单个文件签名验证

    2024年02月03日
    浏览(27)
  • Android签名查看

    1.打开cmd,执行keytool -list -v -keystore xxx.keystore,效果如下图: 1.打开cmd,执行 keytool -list -v -keystore xxxx.keystore -storepass 签名文件密码,效果如下图: jdk1.8环境: jdk1.7环境: 打开cmd中执行keytool -printcert -jarfile debug.apk,执行效果如下图: 注意:在jdk1.7环境中可以查看到md5 信息,

    2024年02月09日
    浏览(28)
  • Android 获取应用签名

    本文主要讲下在android中如何获取应用签名. 也方便平时用来区分一个应用是不是原包应用. 1: 通过PackageManager获取签名信息 首先,通过packageManager获取到指定应用的PackageInfo. 这里需要传入的flag是PackageManager.GET_SIGNATURES 2: 获取SHA1 下面是整理的一个小demo,展示当前设备的应用列表

    2024年02月03日
    浏览(41)
  • [Android Studio] Android Studio生成数字证书,为应用签名

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🐻Android Studio创建数字证书 🚩结尾 Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。当准备发布

    2024年02月20日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包