android apk 签名(平台和普通签名)

2023-05-16

      因为做了太多的终端项目,客户总会有自己的apk提供,这时候各种签名问题就来了,最近整理了一下相关知识,分享给大家。

签名的用处:

1.应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!

2.应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块  

3.代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

举个例子,如果你里面的apk是签名A,但是外面同包名的apk是签名B,那是install不进去的;

再比如一个apk你使用它自身的签名预置进系统,那它只会有普通权限,而如果签了平台签名,则会有很多系统权限,具体权限可以查看frameworks/base/core/res/AndroidManifest.xml文件。

一.平台签名

      首先说一下接触最多的平台签名(platform signature),也称为系统签名.

      下面方法中platform.x509.pem和platform.pk8文件可能是alps/build/target/product/security/ 中的,也有可能alps/device/mediatek/common/security/中的,具体需要查看MTK_SIGNATURE_CUSTOMIZATION这个宏为yes的就是alps/device/mediatek/common/security/,反之,具体逻辑如下:

  ifeq ($(MTK_SIGNATURE_CUSTOMIZATION),yes)
    ifeq ($(wildcard device/mediatek/security/$(strip $(MTK_TARGET_PROJECT))),)
      $(error Please create device/mediatek/security/$(strip $(MTK_TARGET_PROJECT))/ and put your releasekey there!!)
    else
      PRODUCT_DEFAULT_DEV_CERTIFICATE := device/mediatek/security/$(strip $(MTK_TARGET_PROJECT))/releasekey
    endif

1.在N之前的签名方法为

      在已经编译好的工程中 :out/host/linux-x86/framework/路径 取出 signapk.jar 文件 ,然后从 alps/build/target/product/security/    下面取出另外两个文件 platform.x509.pem 和 platform.pk8
然后三个文件+apk文件,放在同一个路径下。 

执行签名操作:
    java -jar signapk.jar platform.x509.pem platform.pk8 input.apk(原始的apk) output.apk(生成的apk)
    然后apk就相当于系统签名了,获取了系统权限(以后会有一篇讲权限的)。

2.在N或者之后

在alps路径下:

java -Xmx2048m -Djava.library.path="out/host/linux-x86/lib64"   -jar out/host/linux-x86/framework/signapk.jar  build/target/product/security/platform.x509.pem     build/target/product/security/platform.pk8  input.apk(原始的apk) output.apk(生成的apk)

当然也可以拿出out/host/linux-x86/lib64/  ,out/host/linux-x86/framework/signapk.jar,build/target/product/security/platform.x509.pem,build/target/product/security/platform.pk8等文件拿出来放在一起,但是路径就得记得修改了,所以建议直接在alps下运行该命令。

3.查看是否签名成功

1)解压apk

2)进入解压出来的文件夹,其中有一个META-INF文件夹,在该文件夹位置打开终端,输入:

keytool -printcert -file XXXX.RSA(一般来讲会是CERA.RSA)

然后就可以从下面这些信息看出是否成功:

还有一种方式是运行jarsigner -verify -verbose -certs xxx.apk(你的签完的apk) >log.txt

log.txt会打出签名信息,也能够看出。

4.生成平台签名的步骤

平台签名步骤

在alps路径下:
    1、development/tools/make_key releasekey  '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'
    development/tools/make_key platform  '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'
    development/tools/make_key media  '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'
    development/tools/make_key shared  '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'
    development/tools/make_key testkey  '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'

不要输密码,密码为空,除非你能忍受编译的时候隔几分钟要你输一次密码,或者自己写脚本输密码

    2、拷贝到alps/device/mediatek/common/security/
    3、MTK_SIGNATURE_CUSTOMIZATION = no --> MTK_SIGNATURE_CUSTOMIZATION = yes
    4、MTK_INTERNAL = no(如果有)

上面的信息对应:

    '/C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx/emailAddress=xxx@xx.com'
    What is your first and last name?(CN)
    What is the name of your organizational unit?(OU)
    What is the name of your organization?(O)
    What is the name of your City or Locality?(L)
    What is the name of your State or Province?(ST)
    What is the two-letter country code for this unit?(C)
    What is the email address?

关于这几个签名对应的意义:

        1)testkey/releasekey:普通APK,默认情况下使用。
        2)platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
        3)shared:该APK需要和home/contacts进程共享数据。
        4)media:该APK是media/download系统中的一环。

5.生成.jks

很多时候可以是需要拿这签名去开发的,要是每次都使用命令使用  platform.x509.pem和platform.pk8文件去签那就实在太麻烦了,需要生成apk然后再拿出来签,所以我们可以生成一个keystore文件让他们直接在andorid studio上用。


1.openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
2.openssl pkcs12 -export -in  platform.x509.pem -out platform.p12 -inkey  platform.pem -password pass:xxx(xxx是密码) -name xxx(xxx是别名)
3.keytool -importkeystore -deststorepass xxx(xxx是密码) -destkeystore ./xxx.jks(xxx就是keystore的名称) -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass xxx(xxx是密码)

这样的话会生成一个xxx.jks文件,这个文件就是keystore文件,该文件可以改成keystore后缀,当然也可以不修改,然后就可以将他提供给客户作开发用了。

 

6.源码中使用平台签名

makefile(比如预置apk时的android.mk)中加入:

LOCAL_CERTIFICATE := platform

编译进去就是用的平台签名。

 

二.普通签名

1.生成签名文件

有两种方式,

1)android studio:

首先Build---Generate Signed Apk,然后选择Create new... ,接着就可以写入信息了,写入后选择.jks文件的存放路径就可以了。

2)终端生成:

首先输入keytool -genkey -v -keystore android.keystore(xxx即为keystore名称)  -alias xxx (xxx为别名) -keyalg RSA -validity 3650,接着照着提示输入信息:

然后就生成了keystore了。

2.使用keystore签名

1)Android studio:

首先Build---Generate Signed Apk,然后就不用新建了,直接使用原来的.jks文件,输入密码和别名,生成apk就行了。

2)使用终端:

jarsigner -verbose -keystore xxx.keystore(原先生成的keystore) -signedjar  xxx_signed.apk(签名后的apk名称,"signed"不为必须,建议这么写,好区分) -digestalg SHA1 -sigalg MD5withRSA PhoneBook.apk(需要签名的apk名称) xxx(keystore别名)

运行该命令之后就会生成已签名的xxx_signed.apk

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android apk 签名(平台和普通签名) 的相关文章

随机推荐

  • STM32CubeMX学习教程之四:定时器中断

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX TIM1 Interrupt 软件 xff1a STM32CubeMX V4 25 0 System Workbench V2 4
  • 算法——贝塞尔(Bézier)曲线拟合

    文章目录 1 基本概念 1 1 从熟悉的地方入手 1 2 贝塞尔曲线拟合原理 转载 2 公式和物理意义 2 0 阶数和伯恩斯坦多项式等 2 0 1 阶数 2 0 2 伯恩斯坦多项式 2 0 3 杨辉三角和二项式系数 2 1 一阶 次贝塞尔公
  • STM32CubeMX学习教程之五:PWM实现呼吸灯效果

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX PWM Output 软件 xff1a STM32CubeMX V4 25 0 System Workbench V2 4 固件库版
  • STM32CubeMX学习教程之十:硬件I2C读写AT24C02

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX hardware I2C AT24C02 网上有流传已久一种说法 xff0c 就是STM的I2C有bug xff0c 不好用 确实很
  • Visual Studio Code 的 includePath 全局设置

    这几天折腾使用Visual Studio Code 编写 ESP8266 non os 代码 xff0c 基本设置都没问题 xff0c 但是就是自动补全折腾很久没弄好 在折腾了一圈插件之后 xff08 包括Auto Import C 43
  • 使用.gitignore忽略文件或者文件夹及其失效解决方法

    git如果需要忽略某个文件夹 xff0c 可以在初始化之后 xff0c 在仓库根目录下创建一个 gitignore文件 xff0c 添加需要忽略的文件和文件夹即可 我们也不需要从头写 gitignore文件 xff0c GitHub已经为我
  • python源代码文件加密

    由于python设计的初衷是开源的 xff0c 因此py文件是可以直接看到源码的 但开发商业软件 xff0c 代码加密保护就比较重要了 python编译后程序 pyc文件是py文件经过编译后生成的二进制文件 xff0c 因此可以发布pyc文
  • gnu binutils

    The GNU Binutils are a collection of binary tools The main ones are ld the GNU linker as the GNU assembler But they also
  • android wakelock

    1 android休眠控制锁 powermanager acquir 获取控制锁 powermanager release 释放控制锁 2 在powerManagerService中 xff0c 有检测当前framework层中的wakel
  • 产品经理常用术语

    产品经理常用术语 长尾理论 网络时代兴起的一种新理论 xff0c 由于成本和效率的因素 xff0c 当商品储存流通展示的场地和渠道足够宽广 xff0c 商品生产成本急剧下降以至于个人都可以进行生产 xff0c 并且商品的销售成本急剧降低时
  • 传统CD车机面板操作说明

    转自http bbs hifidiy net thread 675597 1 1 html 一般CD车机带USB SD卡的面板操作说明 1 1 控制面板外观图 2 0 基本 共同 功能操作说明 2 1 开启和关闭电源 静音开关 按 钮为开启
  • 汽车总线系统通信协议

    天合汽车零部件 xff08 上海 xff09 有限公司 上海交通大学区域光纤通信网与新型光通信系统国家重点实验室 xff08 上网时间 xff1a 2006 11 xff09 摘要 xff1a 本文主要针对汽车电子控制系统和车载多媒体系统
  • 算法——连续性后处理(把26邻域连续的变成6邻域连续的)

    文章目录 1 概念 1 1 6邻域连续 1 2 18邻域连续 1 3 26邻域连续 1 4 总结 2 目标 3 严格一点的 3 1 原理描述 3 1 1 18邻域连续补充 3 1 2 26邻域连续补充 3 2 代码实现 C 4 宽松一点的
  • RedHat Linux下安装JDK1.7报错Permission denied

    在RedHat Linux5 中安装JDK1 7时 xff0c 当我解压jdk xff0c 并且配置好了环境变量 xff0c 测试的时候 xff0c 报以下错误 root 64 jingfeng01 java version Error d
  • 几种压缩算法的压缩和速度比较

    Quick Benchmark Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO EDIT Add zstd Contents hide 1 Selected archives2 Test conditio
  • DDR低功耗模式

    DDR规格 xff1a DDR工作状态图 xff1a DDR 刷新描述 xff1a 电特性 xff1a 工作模式简介 xff1a 1 1 自刷新模式 xff08 Self Refresh Mode xff09 DDR4 SDRAM中自刷新超
  • 嵌入式Linux的低功耗策略

    引 言 由于Linux系统具备嵌入式操作系统需要的很多特色 xff0c 如适应于多种CPU和多种硬件平台 性能稳定 可裁剪性很好 源码开放 研发和使用简单等 现在 xff0c 基于Linux应用的嵌入式设备日益增多 xff0c Linux正
  • libevent实现的HTTP Server

    在使用C语言编码时 有时候需要实现一个HTTP接口 我们可以选择使用libevent库来实现 以下代码演示了使用libevent 并同时支持多线程处理HTTP的请求 头文件 引入的头文件 span class token macro pro
  • Python爬虫完整案例 - 爬取百度百科词条信息

    概述 一个完整的爬虫 xff0c 一般由以下5个组件构成 1 URL管理器 负责维护待爬取URL队列 和已爬取URL队列 xff0c 必须拥有去重功能 2 HTML下载器 负责根据调度器从URL管理器中取出的url xff0c 下载html
  • android apk 签名(平台和普通签名)

    因为做了太多的终端项目 xff0c 客户总会有自己的apk提供 xff0c 这时候各种签名问题就来了 xff0c 最近整理了一下相关知识 xff0c 分享给大家 签名的用处 xff1a 1 应用程序升级 xff1a 如果你希望用户无缝升级到