让Android Studio支持系统签名(证书)

本文详细介绍了如何在Android Studio中集成系统签名,包括使用keytool-importkeypair工具将系统签名导入现有签名文件的方法,以及在不同环境下手动重新签名APK的步骤。适用于需要使用系统权限的APK开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接

让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源码的package/apps/目录下,且App源码是普通(Eclipse)格式的。
  2. 配置Android.mk,在其中添加:

    LOCAL_CERTIFICATE := platform(media,shared)
  3. 使用mm编译App,生成的apk即是系统签名。

手动重新签名

这种方式比源码环境下签名简单,App可以在Eclipse和Android Studio下编译,然后给apk重新签名即可。
但是这种方式在频繁Debug的时候毕竟痛苦,即使写成脚本,也需要重复一样的操作。

相关文件:

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.SF和META-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

这个工具的作用是将系统签名的相关信息导入到已有的签名文件里。GitHub地址:keytool-importkeypair


相关文件

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

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


步骤

  1. 生成demo.jks签名文件
    generate_signed_apk
    genertate_signature
  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
    • 迁移到行业标准格式
    •  keytool -importkeystore -srckeystore demo.jks -destkeystore demo_signed.jks -deststoretype pkcs12
  3. 配置build.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就带有系统签名了。

关于系统签名用pk8签名异常出来:android系统签名_不能仅仅只做个码农而已的博客-优快云博客

推荐使用linux环境签名(我用的ubuntu系统),反正我用Windows没成功会报错
Error: Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path

准备 signapk.jar 、platform.x509.pem 、platform.pk8、libconscrypt_openjdk_jni.so文件和需要签名apk放到同级目录下。命令行进入到此目录下。

签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 aa.apk aa_signed.apk

java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 aa.apk aa_signed.apk(亲测可行)

关于怎么查看签名:
keytool -list -printcert -jarfile D:\GoogleNewTest\sdkgoogle.apk

keytool -printcert -file C:\Users\Administrator\Desktop\t\META-INF\CERT.RSA

### 如何在 Android Studio 中配置系统签名 为了使带有 `android:sharedUserId="android.uid.system"` 的应用程序能够正常安装并运行,必须确保 APK 已经进行了正确的系统签名。以下是具体的操作步骤: #### 使用 keystore 进行签名 可以在项目的 `build.gradle` (Module: app) 文件中指定签名配置。这可以通过定义一个名为 `signingConfigs` 的部分来实现[^3]。 ```groovy android { ... signingConfigs { release { storeFile file("path/to/keystore.jks") storePassword 'store_password' keyAlias 'key_alias' keyPassword 'key_password' } } buildTypes { release { ... signingConfig signingConfigs.release } } } ``` #### 设置 Build 变体为 Release 版本 选择合适的构建变体对于应用能否成功打包至关重要。应切换到 **Build Variants** 视图,并将模块的应用程序设置为 `release` 构建类型[^5]。 #### 解决 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 错误 当遇到此类错误提示时,表明当前使用的签名与设备上的系统证书不匹配。因此,确认所使用的密钥库和密钥别名确实对应于目标系统的官方签名是非常重要的[^2]。 #### 自动化签名过程 除了手动修改 `gradle` 脚本外,还可以利用 Android Studio 提供的图形界面工具来自动生成必要的签名信息。打开 Project Structure 对话框,导航至 Modules -> Signing Configs 页面来进行相应设定[^4]。 通过上述措施,应该能够在 Android Studio 中顺利地为项目添加系统级别的签名,从而允许具有特殊权限需求的应用得以正确部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值