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

android apk 签名(平台和普通签名)因为做了太多的终端项目,客户总会有自己的apk提供,这时候各种签名问题就来了,最近整理了一下相关知识,分享给大家。签名的用处:1.应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程…

大家好,又见面了,我是你们的朋友全栈君。

      因为做了太多的终端项目,客户总会有自己的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)

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

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

还有一种方式是运行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,接着照着提示输入信息:

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

然后就生成了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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134683.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eplan激活码破解步骤视频【中文破解版】

    (eplan激活码破解步骤视频)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~C…

    2022年3月26日
    213
  • RocketMQ 入门使用详解[通俗易懂]

    RocketMQ 入门使用详解[通俗易懂]RocketMQ是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给Apache基金会,已经于2016年11月成为 Apache 孵化项目,相信RocketMQ的未来会发挥着越来越大的作用,将有更多的开发者因此受益。 本文仅对RocketMQ的简单实用做入门性介绍,不对RocketMQ的底层原理进行深入介绍,后续文章将对RocketMQ的原理做详细介绍。

    2022年6月17日
    21
  • linux修改用户名密码的命令_centos7修改用户名密码

    linux修改用户名密码的命令_centos7修改用户名密码1、更改密码:普通:passwdroot:sudopasswd2、更改用户名:方法一:只在当前终端生效exportPS1=’用户名’方法二:修改初始化文件,永久生效1、执行命令cd~vi.bashrc2、在最后一行加:exportPS1=’新用户名:’3、保存退出4、执行命令:source .bashrc修改完成。 …

    2022年9月18日
    2
  • 基于yolov4的目标检测_yolov3目标检测

    基于yolov4的目标检测_yolov3目标检测1项目的克隆和必要的环境依赖1.1项目的克隆YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv5就已经更新了5个分支了,分别是yolov5.1-yolov5.5分支。该项目就是利用的yolov5.5分支来作为讲解。首先打开yolov5的github的https://github.com/ultralytics/yolov5/tree…

    2022年10月16日
    2
  • 如何用gg修改器的偏移修改_gg修改器知道了代码怎么改

    如何用gg修改器的偏移修改_gg修改器知道了代码怎么改GG修改器正版是一款模拟游戏的辅助游戏,在这个修改器中我们可以尽情的使用模拟各种辅助游戏的方式,让我们可以在游戏中得到更多的游戏帮助,操作简单,并且包含了大量的游戏辅助能力,是一款非常好用的游戏辅助。GG修改器正版介绍1.玩家可以根据自己的想法随时随地修改游戏的值,修改位我们需要或者是最大值进行游戏;2.操作方法非常简单,让您在游戏中拥有真实的上帝体验,并体验游戏的乐趣和无限的能力;3.该软件不需…

    2025年9月13日
    5
  • c++中vector的用法详解_vector>初始化

    c++中vector的用法详解_vector>初始化vector()的用法概念vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector是C++STL的一个重要成员,使用它时需要包含头文件:#include<vector>;一、vector的初始化(1)vector<int>a(10);//定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。测试#include<iostream>#include&

    2022年9月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号