Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >android apk 签名(平台和普通签名)

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

作者头像
全栈程序员站长
发布于 2022-09-06 03:05:12
发布于 2022-09-06 03:05:12
5.4K0
举报

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android 系统签名实现的三种方式
在项目开发时,如果需要使应用具有系统权限,例如可以支持静默安装和卸载APK,此时就需要使用系统签名。 常用的系统签名方式包括在ubuntu环境下、手动签名和在AndroidStudio环境配置,三种方式中,实现最简单的是通过AndroidStudo方式,该方式的签名实现与正常的APK签名相同,唯一不同的就是签名文件是通过系统生成的。 注意,无论采用何种签名方式,如果想实现具有系统权限的应用,在APK生成时,都需要在AndroidManifest.xml中配置android:sharedUserId=“android.uid.system”,如下所示
全栈程序员站长
2022/06/24
2.7K0
Android 系统签名实现的三种方式
Android系统签名以及生成keystore秘钥
Android系统中,所有的APP都需要签名,来保证报名在设备上是唯一的,避免相同包名应用被覆盖;系统签名意味着对于将这个APP视为系统APP,具有更高的权限,比如可以开机自启动,从后台启动activity等。
全栈程序员站长
2022/08/31
2.9K0
Android进阶-apk系统签名
除了直接使用signapk.jar签名外,还可以将签名文件生成keystore文件,然后给apk进行签名。 定位到签名文件和apk目录,然后输入如下命令: 1.
全栈程序员站长
2022/08/31
1.5K0
Android进阶-apk系统签名
android系统签名工具,android应用实现重启系统+签名「建议收藏」
1.在AndroidManifest.xml文件的manifest标签中加入一条android:sharedUserId=”android.uid.system”
全栈程序员站长
2022/09/10
1.1K0
把Android系统签名弄成jks
假设我们得到了系统签名文件:platform.pk8、platform.x509.pem,还需要一个用于签名的文件:signapk.jar,这里提供了一份下载连接,可供练习使用:链接:https://pan.baidu.com/s/1OiBcVyhZVqTulb6HXwcqHA 提取码:7g81
全栈程序员站长
2022/08/31
2.1K0
把Android系统签名弄成jks
android 系统签名
大家好,又见面了,我是你们的朋友全栈君。最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份。
全栈程序员站长
2022/06/24
7620
android签名命令行,Android系统签名位置及命令
app 需要使用系统的权限 在 AndroidManifest.xml 中声明了系统全下申明了系统权限android:sharedUserId=”android.uid.system”
全栈程序员站长
2022/08/31
1.4K0
给Android程序签署platform权限的名 博客分类: Android小技巧 AndroidSecurity
    做Home程序的时候,由于需要提供时间日期的设置功能,所以需要修改系统时间。修改时间的代码很简单,就那么一句,但是要让它生效可就不那么容易了。     修改系统时间的条件是,你的程序的user id必须跟system一样,也就是说,需要system权限。     怎样达到这个条件呢?     Android提供了sharedUserId来设置程序归属哪个user id,我们在程序的manifest文件里面加上如下属性
chroya
2018/10/31
7440
Android使用系统签名以及安装[通俗易懂]
IDE: ADT eclipse \ jdk 1.6\ 真机实测 \Windows 7
全栈程序员站长
2022/08/31
8670
android apk获取系统签名[通俗易懂]
一 准备材料 1 signapk包 1)通常在源码环境的build\tools\signapk目录下,包含如下文件:
全栈程序员站长
2022/06/24
2.9K0
android apk获取系统签名[通俗易懂]
Android开发Gradle高级技巧、自定义Gradle Task、打包完成自动签名、执行Shell脚本
先说下为什么有这篇文章吧,最近在写一个应用需要进行系统签名;每次我都需要先将apk生成然后使用sign.jar和系统证书进行签名,非常的麻烦而且tmd还是搞两个系统也就是每次都需要用两个系统证书分别进行签名…
Android技术干货分享
2019/03/27
4.6K0
Android开发Gradle高级技巧、自定义Gradle Task、打包完成自动签名、执行Shell脚本
android 应用的证书签名跟系统签名
作为软件行业的从业者都知道,一款软件的开发过程中肯定会诞生两种版本,即debug版本和release版本,debug版本包含有调试信息,一般来说都要比release版本大,android应用当然也不例外
全栈程序员站长
2022/06/27
2K0
android 应用的证书签名跟系统签名
android签名/打包
Android 对apk进行重签名和查看签名(window 和mac)及生成签名 用apksigner进行批量签名的脚本 安卓重签名脚本——AndroidResigner.bat
tea9
2022/09/08
9730
查看Android apk签名信息
keytool -changealias -keystore my.jks -alias myalias -destalias otheralias
全栈程序员站长
2022/06/27
1.1K0
s001android逆向安全初级篇之apk逆向常用工具及简单使用一览
关于apk 逆向中的一些工具的使用,看了不少文章,也使用过有很长一段时间了,今天对此做一总结:
上善若水.夏
2018/09/28
1.3K0
APK签名原理
网上已有多篇分析签名的类似文章,但是都有一个共同的问题,就是概念混乱,混乱的一塌糊涂。
全栈程序员站长
2022/07/01
8650
安卓系统签名方法2则
最近一个安卓的项目,本来是使用安卓板4.2的;但由于生产需求将原来的单板集成到整体(显示触屏+安卓)。由于其提供的样板是6.0。整个程序的主功能运行还可以,就是无法写日志和播放本地视频。于是研究一下,发现原来是他们提供的安卓未root导致的。于是跟供应商联系给root文件,谁知这丫的不给,就给了个安卓的系统签名。。好吧,给系统签名就重新编译吧。但过程不是太顺利,花了差不多一天时间进行处理;总算搞掂,现在分享一下成果吧。
谭广健
2020/01/16
2K0
Android中应用调用系统权限
现在设备的安全性越来越受到重视,随之而来的便是开发中的各种不便,比如有普通权限,运行时权限,系统权限之分。对于运行时权限的添加可以参考 对于Android中各个权限的含义可以参考android/frameworks/base/core/res/AndroidManifest.xml中的释义 Android6.0蓝牙开发中获取附近低功耗蓝牙设备结果权限问题分析 而对于系统权限,却没有很好的解决方案,暂时只有一些特定的解决方案。 转载请注明出处,本文出自 海天之蓝 的博客 Android中应用调用
fanfan
2018/01/24
1.6K0
相关推荐
Android 系统签名实现的三种方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档