写点什么

Android 查看签名

作者:沃德
  • 2022 年 7 月 06 日
  • 本文字数:2762 字

    阅读完需:约 9 分钟

查看 keystore

$keytool -list -keystore debug.keystore 
复制代码


Keystore type: JKSKeystore provider: SUNYour keystore contains 1 entryandroiddebugkey, Mar 21, 2013, PrivateKeyEntry, Certificate fingerprint (MD5): E0:F4:90:EE:CD:77:17:0E:B8:C4:AC:64:B2:F6:FC:83
复制代码

查看三方应用或是系统应用签名

$keytool -printcert -file META-INF/CERT.RSA
复制代码


Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 514ab2e1
Valid from: Thu Mar 21 15:12:33 CST 2013 until: Sat Mar 14 15:12:33 CST 2043
Certificate fingerprints:
MD5: E0:F4:90:EE:CD:77:17:0E:B8:C4:AC:64:B2:F6:FC:83
SHA1: 7F:E5:11:D8:37:4F:DA:D7:75:EA:A5:8C:47:06:85:95:6D:1D:3F:2B
Signature algorithm name: SHA1withRSA
Version: 3
复制代码

给空白包签名

jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]
复制代码


jarsigner 命令格式:-verbose 输出详细信息 -keystore 密钥库位置 -signedjar 要生成的文件 要签名的文件 密钥库文件 keystorePath 参数代表 keyStore 的绝对路径,如 D:\keystoreapkOut 参数代表签名后的 apk 路径,如 D:\signed.apkapkin 参数代表在腾讯应用中心下载的未签名 apk,默认名称为 tap_unsign.apkalias 参数代表签名用的 alias 名称(创建 keyStore 时所填写),如 timdong


$ jarsigner -verbose -keystore debug.keystore -signedjar test2.apk tap_unsign1.apk timdongEnter Passphrase for keystore:adding: META-INF/MANIFEST.MFadding: META-INF/ANDROIDD.SFadding: META-INF/ANDROIDD.RSAsigning: res/drawable/ic_launcher.pngsigning: res/layout/main.xmlsigning: AndroidManifest.xmlsigning: resources.arscsigning: classes.dex

用命令行方式签名

a) 生成签名 $ keytool -genkey -keystore keyfile -keyalg RSA -validity 10000 -alias yan


注:validity 为天数,keyfile 为生成 key 存放的文件,yan 为私钥,RSA 为指定的加密算法(可用 RSA 或 DSA)


b) 生成签名 $ jarsigner -verbose -keystore keyfile -signedjar signed.apk base.apk yan


注:keyfile 为生成 key 存放的文件,signed.apk 为签名后的 apk,base.apk 为未签名的 apk,yan 为私钥


c) 看某个 apk 是否经过了签名 $ jarsigner -verify my_application.apk


d) 优化(签名后需要做对齐优化处理)$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

签名的相关文件

apk 包中签名相关的文件在 meta_INF 目录下


CERT.SF:生成每个文件相对的密钥


MANIFEST.MF:数字签名信息


xxx.SF:这是 JAR 文件的签名文件,占位符 xxx 标识了签名者


xxx.DSA:对输出文件的签名和公钥

无法覆盖安装

1、通过签名的方式生成你的 APK,而不是直接从 Bin 目录底下去拷贝,每个 Android 可执行程序的 APK 都有自己的签名,只要签名一致,就可以覆盖安装,而不需要卸载;


2、数据库表结构的变化(增加一个字段,减少一个字段,新表的建立)。正常升级数据库的方法 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)


3、sharepreferences 的数据有改变,这个跟数据库差不多,比如原来的 sharepreferences 保存的一数据是 boolean,在后一版本把保存的数据改为 string,问题就出现了。

导出签名

1)打开 cmd 控制台,输入命令:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore,按照提示依次填写内容,并记住密码,后面会用到;


2)生成好 keystore 后,就可以导出签名 apk 了。Eclipse 中,右击需要签名的工程àandroid toolsàexport signed application package,location 为生成的 keystore 所在的位置,密码为创建 keystore 时设置的密码,然后按照提示,next,最后 finish,成功导出签名 apk。

Zipalign 简单优化

为什么要优化 Android SDK 中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行 zipalign,使得在运行时 Android 与应用程序间的交互更加有效率。因此,这种方式能够让应用程序和整个系统运行得更快。我们强烈推荐在新的和已经发布的程序上使用 zipalign 工具来得到优化后的版本——即使你的程序是在老版本的 Android 平台下开发的。

如何有助于性能改善

在 Android 中,每个应用程序中储存的数据文件都会被多个进程访问;安装程序会读取应用程序的 manifest 文件来处理与之相关的权限问题;Home 应用程序会读取资源文件来获取应用程序的名和图标;系统服务会因为很多种原因读取资源(例如,显示应用程序的 Notification);此外,就是应用程序自身用到资源文件。


在 Android 中,当资源文件通过内存映射对齐到 4 字节边界时,访问资源文件的代码才是有效率的。但是,如果资源本身没有进行对齐处理(未使用 zipalign 工具),它就必须回到老路上,显式地读取它们——这个过程将会比较缓慢且会花费额外的内存。


对于应用程序开发者来说,这种显式读取方式是相当便利的。它允许使用一些不同的开发方法,包括正常流程中不包含对齐的资源,因此,这种读取方式具有很大的便利性(本段的原始意思请参考原文)。


遗憾的是,对于用户来说,这个情况恰恰是相反的——从未对齐的 apk 中读取资源比较慢且花费较多内存。最好的情况是,Home 程序和未对齐的程序启动得比对齐后的慢(这也是唯一可见的效果)。最坏的情况是,安装一些未对齐资源的应用程序会增加内存压力,并因此造成系统反复地启动和杀死进程。最终,用户放弃使用如此慢又耗电的设备。

如何优化

1)使用 ADT:


如果你使用导出向导的话,Eclipse 中的 ADT 插件(从 Ver.0.9.3 开始)就能自动对齐 Release 程序包。


使用向导,右击工程属性,选择 Android ToolsàExport Signed Application Package。当然,你还可以通过 AndroidManifest.xml 编辑器的第一页做到。


2)使用 Ant:


Ant 编译脚本(从 Android 1.6 开始)可以对齐程序包。老平台的版本不能通过 Ant 编译脚本进行对齐,必须手动对齐。


从 Android 1.6 开始,Debug 模式下编译时,Ant 自动对齐和签名程序包。


Release 模式下,如果有足够的信息签名程序包的话,Ant 才会执行对齐操作,因为对齐处理发生在签名之后。为了能够签名程序包,进而执行对齐操作,Ant 必须知道 keystore 的位置以及 build.properties 中 key 的名字。相应的属性名为 key.store 和 key.alias。如果这些属性为空,签名工具会在编译过程中提示输入 store/key 的密码,然后脚本会执行签名及 apk 文件的对齐。如果这些属性都没有,Release 程序包不会进行签名,自然也就不会进行对齐了。


3)手动:


为了能够手动对齐程序包,Android 1.6 及以后的 SDK 的 tools/文件夹下都有 zipalign 工具。你可以使用它来对齐任何版本下的程序包。你必须在签名 apk 文件后进行,使用以下命令:zipalign -v 4 source.apk destination.apk


4)验证对齐:


zipalign -c -v 4 application.apk


用户头像

沃德

关注

我就是个零 2018.06.14 加入

程序员而已

评论

发布
暂无评论
Android 查看签名_程序员_沃德_InfoQ写作社区