apk的签名,简单说开发者可以通过签名 对应用进行标识和更新。包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装。这是一个非常重要的安全功能。
系统中的签名文件,也是对系统中应用进行签名,编译应用是可以指定签名类型。

下面介绍的是Android系统中的签名相关内容。

Android系统中的主要签名文件

media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem。

Android系统中的签名文件的路径

build/target/product/security/目录下。

编译时签名文件的配置

在Android.mk通过设置LOCAL_CERTIFICATE实现。如:LOCAL_CERTIFICATE := platform即选择platform来签名。
注:预置无源码的apk应用时,很多时候仍然使用原本第三方签名,LOCAL_CERTIFICATE := PRESIGNED。

.pk8和.x509.pem的区别

.pk8就是私钥文件,用于对apk进行签名。这个私钥需要保密保存,不能公开。
.x509.pem是证书文件,相当于公钥。这个可以公开,主要用于验证某个apk是否由相应的私钥签名。

系统不同签名文件的区别

简介:

  • sharedUserId

每个apk或文件,系统都会分配属于自己的统一的用户ID(UID),创建沙箱保证其他应用的影响或影响其他应用。如:一般应用只能访问自己包名下的文件(/data/data/pkgname),不能反问其他包名下的,其他应用也访问不了自己包名下的文件。
sharedUserId,拥有同一user id的应用 之间就可以共享数据库和文件,相互访问。这些应用可以运行在同一进程,也可以运行不同进程。

  • sharedUserId与签名文件

只有拥有相同sharedUserId标签的,且拥有相同签名的 应用才能分配相同的用户ID,实现数据共享。如果仅仅拥有相同sharedUserId标签,是无法确保安全的,也很容易被非法利用。

系统中5类签名文件说明

  • platform:平台的核心应用签名,签名的apk是完成系统的核心功能。这些apk所在的进程UID是system。manifest节点中有添加android:sharedUserId="android.uid.system"。
  • media: 这个签名的apk是media/download的一部分。manifest节点中有添加android:sharedUserId="android.media"。
  • shared:这个签名的apk可以和home/contacts进程共享数据。manifest节点中有添加android:sharedUserId="android.uid.shared"。
  • testkey/releasekey:平台默认key。在编译中未指定LOCAL_CERTIFICATE的,默认是用testkey。因为testkey是公开的,任何人都可以获取,不安全,所以一般使用 自己创建releasekey作为默认key。

修改平台默认签名

  • build/core/config.mk路径下,修改下面变量为:

DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
或者使用宏控选择。

  • system/sepolicy/private/keys.conf 和 system/sepolicy/prebuilts/api/{apilevel}/private/keys.conf下,修改:

-ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
+ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem

  • build/core/core/Makefile下修改变量为:

BUILD_VERSION_TAGS = release-keys
或者使用宏控选择。

平台签名的创建

在工程目录下执行下面命令就可以生成一套platform,shared,media,releasekey签名文件:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done

注:

  • 生成是用工程中的./development/tools/make_key脚本,依次生成
  • subject中参数的含义:

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

  • 生成签名文件过程,一般按回车,若输入密码后面签名apk需要手动输入。

查看签名apk的签名信息

keytool -printcert -jarfile xxx.apk
使用这个命令能够查看apk所使用签名的相关信息,如下图所示

使用系统签名文件直接给apk签名

java -Djava.library.path=. -jar signapk.jar xxx.x509.pem xxx.pk8 beforesign.apk aftersign.apk
如下示例,
将app-debug.apk使用releasekey签名,签名后的apk名字为app-debug_release.apk。
注意路径,如 signapk.jar路径在out/host/linux-x86/framework/signapk.jar,可以拷贝出来。平台签名文件路径上面已经讲过。如果出现报错,多注意下提示,调整即可。
java -Djava.library.path=. -jar signapk.jar releasekey.x509.pem releasekey.pk8 app-debug.apk app-debug_release.apk

Android系统签名简介相关推荐

  1. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名

    刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到 /system/app/*,咨询导师,得到反馈 app 需要使用系统的权限 在 Androi ...

  2. Android系统签名jks文件

    Android Studio普通应用->系统应用 在android framework开发过程中,通常使用系统应用在验证某些功能,(系统功能权限大,可以通过反射获取hide接口,便于功能调试). ...

  3. Android系统签名生成Studio导入系统keystore

    一.Android签名文件简述 为什么要签名? 任何一个安装包都需要有签名.为App签名的本质是说明这个App是我开发的,不是别人.通过签名可以在应用和开发者之间建立可信任的关联. 通过签名,Andr ...

  4. android 签名报错,Android系统签名报错 no conscrypt_openjdk_jni in java.library.path

    1.Android 7.1之前,系统签名如下: java -jar signapk.jar platform.x509.pem platform.pk8 source.apk target.apk 2 ...

  5. Android系统应用简介

    1. 四大组件 Android 系统四大组件分别是活动(Activity).服务(Service).广播接收器(BroadcastReceiver)和内容提供器(Content Provider).其 ...

  6. android系统签名

    1.在系统源码下找到signapk.jar platform.x509.pem platform.pk8三个文件,一般在build或prebuilt目录下 2.在AndroidManifest.xml ...

  7. Android系统分区简介

    Android分区简介 安卓手机和平板一般包括以下分区: /boot /system /recovery /data /cache /misc /sdcard /sd-ext /boot 此分区可以保 ...

  8. Android系统签名生成,在AndroidStudio中使用

    1.首先找到以下文件 build/target/product/security/platform.pk8 build/target/product/security/platform.x509.pe ...

  9. Android使用keytool-importkeypair生成一个系统签名,只要打包的时候使用该签名,便可以获得系统所有权限

    Android系统源码中提供了platform.x509.pem .platform.pk8等签名文件例如: 这个是不能直接在调试的时候使用的,如果要用,需要先转换为android studio调试用 ...

最新文章

  1. lnmp php编译参数,LAMP、LNMP环境编译参数查询
  2. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单
  3. C#中图片.BYTE[]和base64string的转换
  4. 【django】配置项目日志【5】
  5. python拼图_Python实现, 命令行下的拼图游戏
  6. 用预训练GNN预估点击率有奇效?
  7. 七天免登录JavaScript实现
  8. MySQL(8)--- 选择数据库
  9. 想了解“云+AI”究竟怎么“玩儿”,还要看这里、看这里!
  10. 面试官:如何设计出骚气的秒杀系统?
  11. 20200524每日一句
  12. C语言向文件写入学生信息并读取显示出来
  13. java 进制转换工具_Java实现的进制转换工具类完整示例
  14. games101 材质与外观
  15. 华东师范大学计算机考研信息汇总
  16. 神经网络与深度学习(邱锡鹏)
  17. windows主机如何登录阿里云服务器
  18. python实现23种设计模式
  19. svn 禁止访问的问题
  20. CISCO 服务器配置 RAID 指南及安装操作系统

热门文章

  1. 如何下载python与安装
  2. c语言实用计算器项目,C语言实现简单计算器小项目
  3. JavaScript函数定义的几种方式
  4. 110道Python面试笔试题超强汇总
  5. stm32 软件怎么设置写保护_STM32 , 写保护问题! (amobbs.com 阿莫电子论坛)
  6. 欧文分校的计算机科学,有关美国加州大学欧文分校计算机科学专业.pdf
  7. centos7安装MySQL8以及各种管理工具
  8. gwr模型用什么做_如何对好文章做信息处理,用好文章摘录模型
  9. 模仿qq空间评论以及回复
  10. 基于视频点播上传、多分辨率转码-搭建自己的短视频|教学视频播放系统