Android应用程序签名

深入了解Android应用程序签名 应用程序签名是将数字签名应用于 Android 应用程序(APK 文件)的过程。它使用密钥对对应用程序进行加密,确保在应用程序发布和分发过程中的完整性和真实性。验证完整性:签名可确保 APK 文件在传输或分发过程中没有被篡改或损坏。验证真实性:签名允许用户验证应用程序的来源和开发者身份,以确保 APK 来自可信的来源。安全性:签名可以防止恶意用户在未经授权的情况下更改应用程序的代码或资源。apksigner 是 Android SDK 中的一个命令行工具,用于对 APK 文件进行签名和验证。 阅读详情

主体部分参考(http://jindalong.blog.techweb.com.cn/archives/26.html)

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。

Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定用户可不可以安装该应用程序。android的这个签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,他只是用来让应用程序包自我认证的。Android系统默认自动给应用程序签名,ADT会自动使用debug密钥为应用程序签名,debug密钥是一个名为debug.keystore的文件,位置位于电脑的:

/Documents and Settings/liuhua/.Android/debug.keystore,其中的liuhua是电脑的用户名。

下面介绍手动签名:

1. apk的签名工作可以通过两种方式来完成:

1)通过ADT提供的图形化界面完成apk签名;

2)完全通过DOS命令来完成apk签名

给apk签名一共要用到3个工具(3个命令),分别是:keytool、jarsigner和zipalign

1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;

2)jarsigner:使用数字证书给apk文件签名;

3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)

通常你开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书。如果你是第一次做Android应用程序签名,上面的3个工具都将用到;但如果你已经有数字证书了,以后再给其它apk签名时,只需要用到jarsigner和zipalign就可以完成。另外,keytool和 jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。

3个工具默认所在的路径:

1)keytool:该工具位于jdk安装路径的bin目录下;

2)jarsigner:该工具位于jdk安装路径的bin目录下;

3)zipalign:该工具位于Android-sdk-windows/tools/目录下

2.生成未经签名的apk文件

打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package …”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。

3. 使用keytool工具生成数字证书

keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000

说明:

1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;

2)-keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;

3)-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;

4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;

5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效

4. 使用jarsigner工具为Android应用程序签名

jarsigner -verbose -keystore liufeng.keystore -storepass 123456 -keypass 123456 -digestalg SHA1 -sigalg MD5withRSA -signedjar a_signed.apk a.apkliufeng.keystore

说明:

1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;

2)-keystore liufeng.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;

3)-signedjar notepad_signed.apk notepad.apk 表示给notepad.apk文件签名,签名后的文件名称为notepad_signed.apk;

4)最后面的liufeng.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称

[-storepass <口令>]         用于密钥库完整性的口令

[-keypass <口令>]           私有密钥的口令 (如果不同)

[-digestalg <算法>]        摘要算法的名称

[-sigalg <算法>]           签名算法的名称

5)其中的123456是生成数字签名时使用的密码。

5. 使用zipalign工具优化已签名的apk(非必须但建议这么做)

zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk

说明:

1)zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;

2)notepad_signed.apk notepad_signed_aligned.apk 表示对已签名文件notepad_signed.apk进行优化,优化后的文件名为 notepad_signed_aligned.apk

如果你以前的程序是采用默认签名的方式(debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。

因为程序覆盖安装主要检查两点:

1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;

2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。

另外,可能有人可能会认为反正debug签名的应用程序也能安装使用,那也没有必要自己签名了嘛。千万不要这样想,debug签名的应用程序有这样两个限制,或者说风险:

1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;

2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!

可以把上面这个完整的步骤写成一个bat文件,这样需要签名的时候只要运行这个bat就可以了。下面给出一个完整的bat文件示例:

生成签名文件:

keytool -genkey -v -keystore XXX.keystore -alias XXX.keystore -keyalg RSA -validity 20000

对APK进行签名:

jarsigner -verbose -keystore XXX.keystore -storepass 123456 -keypass 123456 -digestalg SHA1 -sigalg MD5withRSA -signedjar a_signed.apk a.apk XXX.keystore

6.使用keytool解析签名文件

keytool.exe -printcert  -file  CERT.RSA

输出结果含义如下:


7.看某个apk是否经过了签名
$ jarsigner –verify my_application.apk

例如:jarsigner -verify -verbose -certs abc.apk


避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧) 本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。 阅读详情

相关推荐

高效 DEM 拼接

通过以上步骤的系统实施,能够实现高效、准确的大型地理信息系统 DEM 数据拼接,满足复杂和大规模项目的应用需求。

llhllq2015的博客 1032

Android中的包名和签名问题

Android中包名是唯一的 1.包名、签名都相同:会直接覆盖。 2.包名相同,签名不同:安装失败。 3.包名的命名规范:com.公司名.项目名。例如:com.baidu.test。...

weixin_37011894的博客 3234

CM-GAI:基于连续介质力学与最优传输的数据生成新范式

在数据驱动的工程与科学研究中,如何利用有限的物理数据实现可靠预测是核心挑战。传统方法如深度神经网络,在数据稀缺时往往泛化能力不足且缺乏物理一致性。为解决此问题,一种融合物理原理与数据驱动的新范式应运而生。其核心思想是将数据分布的变化类比为连续介质在广义力驱动下的力学变形过程,通过最优传输理论为分布变换提供最优路径的度量。这种方法将物理规律(如质量守恒、运动方程)作为硬约束嵌入模型,确保了生成过程的物理可解释性。物理信息神经网络(PINNs)则被用作高效求解器,处理高维特征空间中的复杂控制方程。在工程实践中,

weixin_30607029的博客 608

Android签名验证——Hook签名第一步

网上虽然很多Hook Android App 签名的方法,例如: 一键绕过App签名验证 一键破解APK签名校验 但是要想知道其中Hook的实现原理,并且能自己编写Hook实现,那么我们首先得知道以下几个问题: Android开发如何进行签名验证 Hook签名原理,及其实现 这篇文章先讲第一个问题——Android签名验证 由于网上相关文章比较多,这里就不赘术,仅提供核心代码 能研究这个...

lemisky的博客 4423

FPGA中Verilog HDL/VHDL实现NCO(数字控制振荡器)的查表法优化与性能分析

本文深入探讨了在FPGA中使用Verilog HDL/VHDL实现数字控制振荡器(NCO)的查表法优化与性能分析。文章详细解析了NCO的核心工作原理,包括相位累加器、查找表(ROM)的设计,并重点介绍了利用波形对称性压缩ROM、相位抖动注入等关键优化技巧,以提升无杂散动态范围(SFDR)并平衡速度、精度与资源消耗。

vscode6remote的博客 455

【2026OD新机考】【哈希表】20260422-文章特征提取【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

90+天陪伴式学习,100+直播课时,300+动画图解视频,500+LeetCode经典题,500+华为OD真题/大厂真题,还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁。这道题的本质是多集合交集问题的变形,属于非常典型的哈希表应用题。,储存全局的每个片段中,各个字符最少出现的次数。表示该字母并非所有片段的公共字母。,按照顺序构建答案即可。没有字母在所有三个字符串中都出现。每个字母在各字符串中都至少出现。次,所以结果中每个字母出现一次。这样,当上述循环结束后,最终。显然在上述代码中,如果字母。

weixin_48157259的博客 66

Android签名校验去除 PMSHook升级版

拦截PackageInfo的创建过程,判断是否为目标程序,然后对生成的PI对象的signatures字段进行替换,即可完成签名校验的通过。使用方法:在软件入口处的构造函数中或者静态初始化去除调用KillPM函数即可,传入的参数第一个是包名,第二个是签名的charString。基本上可以绕过所有使用安卓自身API进行的校验,和之前的PMS代理不同,这种方式刚刚出现,被针对的少,因此过签强度更高。

m0_47587308的博客 2741

详细推导波特图增益和相位曲线

最近因为项目需求,在回看波特图方面的内容。大三那会,《自动控制原理》这本书里面就讲过这些东西,但是那时候总感觉学这些没啥用,反正以后也用不到,对这种课程的重视度不是很高。 工作后发现,只要你从事的是和本专业相关的工作,大学学过的很多理论课程在后面大概率都会用到。曾经那些我们在学校以为用不上的东西,熟不知在后面用处还多着呢。所以啊,仅仅只是我们的以为而已! 现在还在学校的同学,对待《自动控制理论》、《信号与系统》、《通信原理》这样的核心专业课,建议还是好好学习一下,认真听听课。哪怕是考试完以后就会忘掉,但当我

D_Katter的博客 3936

Android Hook签名原理

昨天写了 Android签名验证——Hook签名第一步 今天研究了下Hook签名的实现,但是貌似还有点复杂,所以就不去实现了, 这里讲一下大致原理 签名获取 //大致获取签名信息流程 PackageManager packageManager=getPackageManager();//ApplicationPackageManager PackageInfo packageInfo=pack...

lemisky的博客 2339

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

安装这个软件之前先安装VisualStudio,本文安装这个软件时已经安装了VisualStudio2019。1、下载倍福PLC编程软件TwinCAT。

qq_34059233的博客 3664

optee技术简介

OP-TEE(Open Portable Trusted Execution Environment)是一种开源的可信执行环境(TEE),专为ARM TrustZone架构设计。TEE是一种独立的执行环境,运行在主操作系统之外,为敏感任务提供安全的计算空间,如加密、身份验证、密钥管理等。

baron-周贺贺-代码改变世界ctw 1279

android手写签名android-signaturepad

GitHub地址:https://github.com/gcacace/android-signaturepad 1 配置: repositories { mavenCentral() } compile 'com.github.gcacace:signature-pad:1.2.1' 2 使用: Intent intent3 = new Intent(m...

jifenglie的博客 3611

【深度学习新浪潮】OpenClaw技术架构详解:从核心组件到生产级优化

OpenClaw 以三层解耦架构 + 四大核心模块为基础,实现了本地优先、易部署、易扩展、易优化的 AI 智能体平台。开发者可通过极简部署快速落地,再通过量化、缓存、并发、分布式等手段持续优化性能,适合从个人助理到企业级自动化的全场景应用。

专注:太空算力、AI infra、异构调度、大模型成本工程 2920

[014] Android应用程序签名详解

      本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。1、什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版本,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了。计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所以,计算机中所说的签名和生活中所说的签名在本质上是一样的,它所起到的作用也是一致的!      让我们来看看

柳峰的专栏 4万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android应用程序签名 debug签名

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。             Android通过数字签名来 标识应用程

Central-Perk的专栏 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入了解 Android 中的应用程序签名

应用程序签名是将数字签名应用于 Android 应用程序(APK 文件)的过程。它使用密钥对对应用程序进行加密,确保在应用程序发布和分发过程中的完整性和真实性。

特立独行的博客 4071

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android应用程序的签名

程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。-----------------------------------------------------------------------------------以下为转载---------------------------------------------------

2501_90392068的博客 1272

2024年Android最全Android应用程序签名 debug签名,安卓面试题及答案

通常你开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书。只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。3)-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;

2401_84123201的博客 759

Android应用程序签名详解

本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名? 如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了。计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所以,计算机中

心系旭阳 516

Android 应用程序签名

Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。1、什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了。计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所以,计算机中所说的签名

阳光岛主 8241

android中怎样将自己的应用程序的签名改为系统签名一样

1.使用已经存在的签名到处android应用程序的apk 2.使用压缩软件打开apk,进入META-INF目录下,删除应用程序的3个签名文件 3.到android系统目录build/target/product/security/拷贝系统签名文件:platform.x509.pem、platform.pk8到应用apk中。 4.利用签名工具signapk.jar修改应用程序签名:

lg878398509的专栏 2万+

Android:什么是签名、为什么要给应用程序签名、如何给应用程序签名

Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了。计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所以,计算

DUKE0317的专栏 1984

Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。

本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?       如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了。计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗

小小时代的专栏 781
上一篇: 详细解读ARM寄存器之CPSR
下一篇: Android签名与认证详细分析之一(CERT.RSA剖析)
hookfeng
博客等级 码龄12年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值