首页 > 其他分享 >Android系统build阶段签名机制

Android系统build阶段签名机制

时间:2024-04-20 17:01:01浏览次数:28  
标签:CERTIFICATE APK build key Android LOCAL android 签名

https://maoao530.github.io/2017/01/31/android-build-sign/

APK签名机制
https://maoao530.github.io/2017/01/31/apk-sign/

 

本文介绍Android系统build阶段的签名机制。

一、系统build阶段签名机制

1、系统中有4组key用于build阶段对apk进行签名:

  • Media
  • Platform
  • Shared
  • Testkey
  • release

default key是放在Android源码的/build/target/product/security目录下:

  • media.pk8与media.x509.pem;
  • platform.pk8与platform.x509.pem;
  • shared.pk8与shared.x509.pem;
  • testkey.pk8与testkey.x509.pem;

其中,*.pk8文件为私钥,*.x509.pem文件为公钥,这需要去了解非对称加密方式。

2、在apk的android.mk文件中会指定LOCAL_CERTIFICATE 变量:

LOCAL_CERTIFICATE可设置的值如下:

1 2 3 4 LOCAL_CERTIFICATE := testkey # 普通APK,默认情况下使用 LOCAL_CERTIFICATE := platform # 该APK完成一些系统的核心功能,这种方式编译出来的APK所在进程的UID为system LOCAL_CERTIFICATE := shared # 该APK是media/download系统中的一环 LOCAL_CERTIFICATE := media # 该APK是media/download系统中的一环

如果不指定,默认使用testkey。

对应的,除了在Android.mk指定上述的值,还需要在APK源码的AndroidManifest.xml文件的manifest节点里面申明权限:

1 2 3 android:sharedUserId="android.uid.system" android:sharedUserId="android.uid.shared" android:sharedUserId="android.media"

3、Build规则是Build/core/prebuilt.mk。
4、在build/core/config.mk中,DEFAULT_SYSTEM_DEV_CERTIFICATE可以通过PRODUCT_DEFAULT_DEV_CERTIFICATE去指定各家厂商的key path。

我们可以看到,默认为build/target/product/security/testkey。

1 2 3 4 5 6 # The default key if not set as LOCAL_CERTIFICATE ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE) else DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey endif

 

二、自定义系统签名的key

上面介绍了系统有默认四组key,那么如果我们要制作自己的key,需要怎么做呢?
在build/target/product/security/目录下有一个README,里面有说明怎么制作这些key并且使用。

1、进入Development/tools/ 目录

cd-dev-tool.png

2、使用make_key工具生成签名文件:

1 sh make_key releasekey '/C=CN/ST=Guangdong/L=Shenzhen/O=Mediatek/OU=MTK/CN=fzll/[email protected]'

其中:

  • C : Country Name (2 letter code)
  • ST : State or Province Name (full name)
  • L : Locality Name (eg, city)
  • O : Organization Name (eg, company)
  • OU : Organizational Unit Name (eg, section)
  • CN : Common Name (eg, your name or your server’s hostname)
  • emailAddress : Contact email address

3、用ls命令发现目录下多了两个文件:releasekey.x509.pem 和 releasekey.pk8

release-key.png

4、同样的步骤生成platform / shared / media

5、用自定义的key替换build/target/product/security/目录下面的key。

三、对APK进行系统签名

为了使apk有system权限,通常我们需要对其进行系统签名:

1、在应用程序的AndroidManifest.xml中的manifest节点中加入

1 android:sharedUserId="android.uid.system"这个属性。

2、修改它的Android.mk文件,加入

1 LOCAL_CERTIFICATE := platform

重新编译,生成的apk就有修改system权限了,我们通过ps命令查看APK所在进程的UID,发现值为system。

标签:CERTIFICATE,APK,build,key,Android,LOCAL,android,签名
From: https://www.cnblogs.com/bluestorm/p/18147883

相关文章

  • 利用Android Studio简单编译一个可执行文件
     目的:初学ndk,想利用AndroidStudio编一个能直接在Android上运行的可执行程序1、创建NativeC++项目  这样会在代码目录下生成,cpp文件夹和Java文件夹  2、修改cmake文件生成可执行文件3、构建项目生成就会在buildcxx目录下生成文件,通过adb上传到手机运行 ......
  • 33.Android数据存储
    数据存储方式:对比sql数据库呗1.文件存储方式同java中I/O输入输出流一样举个例子:publicclass字节流_写文本文件{publicstaticvoidmain(String[]args)throwsIOException{/**字节流创建文本文件。在D盘SS目录中创建students.txt文件,并添加以下信息......
  • android studio jdk问题
    报错使用Terminal运行命令,报错:FAILURE:Buildfailedwithanexception.*Whatwentwrong:Aproblemoccurredconfiguringrootproject'StringFog'.>Couldnotresolveallfilesforconfiguration':classpath'.>Couldnotresolvec......
  • (学习)godot4.2 Android调试
      1勾选远程部署  2安装Android构建模板  3cmd运行以下命令获取debug.keystorekeytool-keyalgRSA-genkeypair-aliasandroiddebugkey-keypassandroid-keystoredebug.keystore-storepassandroid-dname"CN=AndroidDebug,O=Android,C=US"-valid......
  • Android中使用系统的签名打包
    背景正常开发一个Android软件项目,我们会生成一个签名文件,具体实现方式详见:项目签名当我们开发一个系统级的app时,若apk已经集成到系统中,再想重新安装新包测试时一般会安装不上,提示签名不一致,原因是系统在整体编译时需要整体的来进行系统签名,当我们把新的apk往系统安装时,就会提示......
  • keycloak~jwt的rs256签名的验证方式
    接口地址keycloak开放接口地址:/auth/realms/fabao/.well-known/openid-configurationrsa算法相关术语RSA算法是一种非对称加密算法,其安全性基于大整数分解的困难性。在RSA算法中,有以下几个关键参数:n(模数):n是一个大整数,通常为两个大素数p和q的乘积,即n=p*q。n用......
  • Unity Android 打包报错解决方案记录
    1.安卓版本过低报错提示PickedupJAVA_TOOL_OPTIONS:-Dfile.encoding=UTF-8D:\Develop\Unity\HRVTest\Library\Bee\Android\Prj\Mono2x\Gradle\unityLibrary\src\main\java\com\unity\androidnotifications\UnityNotificationManager.java:164:错误:找不到符号......
  • Go - go build -ldflags
     #downloaddependenciesandbuildRUNgomoddownloadRUNCGO_ENABLED=0GOOS=$TARGETOSGOARCH=$TARGETARCHgobuild-ldflags="-s-w"-o/go/bin/server zzh@ZZHPC:~/aaa$gobuild-ldflags="-help"./main.go#command-line-arguments......
  • Android Studio修改代码后直接点击run没生效,需要Rebuild或者删除build文件夹后再run才
    AndroidStudio修改代码后直接点击run没生效,需要Rebuild或者删除build文件夹后再run才生效的解决方法第一步:app->editconfigurations进入app配置选中app,滑动到下面的beforelaunch,点击+号,添加一个Gradle-awareMake给Task输入一个名称,或者不填留空使用原理名称,然......
  • mybtais-plus报错BuilderException: Error evaluating expression 'ew.sqlSegment !=
    在学习项目时,出现了这个报错,几经排查,发现原因:我这里是因为使用了LambdaQuery方法,不知为何就出现了冲突,导致错误,代码如下:@OverridepublicCommonUserfindByOpenId(StringopenId){returnlambdaQuery().eq(CommonUser::getOpenId,openId).one();控制台也提示到了这里有问......