如何给三方App进行系统签名

本文深入探讨了在AOSP环境中,如何对应用程序进行系统签名,包括源码环境下的签名流程,如蓝牙模块的编译与签名,以及非源码环境下通过生成.jks密钥并配置Gradle实现系统级应用签名的方法。

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

系统签名

在AOSP 中,package/apps/ 下面的app 会进行系统签名,拥有系统签名后,就可以干一些三方app不能干的时候。但是一般非厂商或者厂商合作方也无法进行系统签名。

源码环境下签名
App源码编译

如果你直接将app源码放在AOSP下编译,可以参考package/apps下任意 app Android.mk 即可

//  Bluetooth/Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Bluetooth
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_CERTIFICATE := platform  // 注意此处 使用的是平台证书
LOCAL_USE_AAPT2 := true
LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
LOCAL_JAVA_LIBRARIES := javax.obex telephony-common services.net
LOCAL_STATIC_JAVA_LIBRARIES := \
        com.android.vcard \
        bluetooth.mapsapi \
        sap-api-java-static \
        services.net \
        libprotobuf-java-lite \
        bluetooth-protos-lite

LOCAL_STATIC_ANDROID_LIBRARIES := android-support-v4
LOCAL_REQUIRED_MODULES := libbluetooth
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)

APK编译

在无源码,只有apk环境下。可以对此apk进行预编译。用平台证书签名对其重新签名。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := Test
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
非源码环境下签名

这种方法会更加便捷的调试,也是我想推荐的方式。将平台的证书做成 .jks,同时在AndroidManifest.xml 设置android:sharedUserId=“android.uid.system” ,配合gradle 方便打包生成的apk就可以得到系统级别的app。

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

是不是很赞,跟着下面的步骤:

获取platform.pk8 & platform.x509.pem

在AOSP 目录下 build\target\product\security
在这里插入图片描述

生成密钥

此处给出通过AndroidStudio生成密码。通过keytool 的方式可以自行百度& Google。

  • 1 Build-> Generate Signed Bundle/ APK…
    在这里插入图片描述

  • 2 Next
    在这里插入图片描述

  • 3 Create New
    在这里插入图片描述

  • 4 New Key Store
    在这里插入图片描述
    选择好 key store path, 填完以上的信息。 点击 OK 就可以生成 .jks 密钥。

keytool-importkeypair

我们需要使用此工具将刚才生成的密钥 使用 platform.pk8 & platform.x509.pem 重新签名。Github上的工作地址如下:
github_keytool-importkeypair

执行一下命令

./keytool-importkeypair -k test.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias test

# -k  test.jks // -k 属性表示签名    test.jks 对应签名文件
# -p  123456   // -p 属性表示密码    123456  生成密钥输入的密码
# -pk8 platform.pk8 -cert platform.x509.pem // 系统签名文件
在Gradle中添加相关属性

在As Project中新建一个config的文件夹放置刚才生成的test.jks。目录结构如下:
在这里插入图片描述
在App 这个module下的build.gradle 中添加 signingConfigs属性

    signingConfigs {
        config {
            keyAlias 'test'      //密钥别名
            keyPassword '123456'  //密钥的密码
            storeFile file(rootDir.getAbsolutePath() +'/config/test.jks')  //密钥位置
            storePassword '123456'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }

        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }

    }
编译

点击build 可以编译出debug& release 版本。这样得到拥有系统签名的app
在这里插入图片描述

以上。Over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值