Android Studio打包、获取SHA1和MD5值

本文详细介绍了如何使用AndroidStudio进行APK的打包操作,并通过内置的控制台获取SHA1和MD5值。包括创建新密钥、保存文件路径、生成APK及调用keytool命令获取安全哈希值的全过程。

一、使用 Android Studio 进行打包

  • 点击 Build > Generate Signed APK…

    这里写图片描述

  • 在弹出框中我们选中 Create new… 来创建新的 key

    这里写图片描述

  • 在新窗口中我们填写相关信息(密码妥善保存!),选择 key 的存储路径(注意 Eclipse 中的 .keystore 在 AS 中为 .jks 格式)

    这里写图片描述

  • 我们发现C盘下有了 xwv.jks 文件(妥善保存!),然后点击 finish 会弹出如下弹框

    这里写图片描述

  • 点击 Show in Explorer 就弹出打包后的 apk 文件所在目录了. 我这里都保存在C盘下

    这里写图片描述


二、在 AS 中获取 SHA1、MD5 值

  • AS 本身集成了控制台,所以很方便调用. 如图底部的 Terminal

    这里写图片描述

  • 如果你的 AS 底部没有显示这个参考下图,点击 AS 最左下角会出现 Terminal 控制台按钮

    这里写图片描述

  • **输入:keytool -v -list -keystore ** 你的 jks 文件及目录

  • 输入之前填写的密钥库口令,然后 Enter. SHA1、MD5 如期出现

    这里写图片描述

### Android Studio 中 APK 打包的签名机制及预置 APK 的区别 #### 一、Android Studio 中 APK 打包的签名机制 在 Android Studio 中,APK 打包时可以选择不同的签名机制。签名机制的选择会影响 APK 的兼容性安全性。 1. **v1签名(JAR签名)** v1签名是最早的签名机制,基于传统的 Java JAR 签名框架[^4]。它通过计算整个 APK 文件的哈希,并使用 RSA 或 DSA 加密算法进行签名。这种签名方式将签名信息存储在 `META-INF` 目录下的 `.SF` `.RSA` 或 `.DSA` 文件中。尽管 v1 签名具有广泛的兼容性,但其安全性较低,因为使用的哈希算法(如 MD5 SHA1)可能存在碰撞风险。 2. **v2签名(APK Signature Scheme v2)** v2签名是在 Android 7.0 中引入的一种更高效的签名机制。它通过对 APK 内容的部分区域进行增量签名,提高了签名效率验证性能[^4]。v2签名的验证过程更快,并且安全性更高,因为它使用 SHA256 哈希算法 ECDSA 签名算法。签名信息嵌入到 APK 文件的特定区域(通常为文件末尾的 ID 块中),而不是修改 APK 的内容结构或添加额外的文件。 3. **v3签名(APK Signature Scheme v3)** v3签名是在 Android 9.0 中引入的增强版签名机制。它进一步提升了签名的安全性,并提供了对签名块完整性的保护[^4]。v3签名延续了 v2 签名的增量签名方式,同时支持附加时间戳,允许签名轮替定位到更高的平台版本。 4. **v4签名(APK Signature Scheme v4+)** v4签名是在 Android 11.0 中引入的一种特殊签名机制,主要用于支持 ADB 增量 APK 安装。它基于 Merkle 哈希树计算 APK 的所有字节,签名存储在单独的 `.apk.idsig` 文件中,不包含在 APK 文件内。v4签名主要适用于 ADB 增量安装场景,提高安装效率。 #### 二、如何在 Android Studio 中进行签名 在 Android Studio 中进行 APK 签名可以通过以下步骤实现: 1. **生成签名文件** 使用 `keytool` 工具生成签名文件: ```bash keytool -genkey -v -keystore my-release-key.jks -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 ``` 这条命令会生成一个名为 `my-release-key.jks` 的密钥库文件,并设置别名为 `alias_name`[^5]。 2. **配置签名信息** 在 Android Studio 的 `build.gradle` 文件中配置签名信息: ```gradle android { ... signingConfigs { release { storeFile file("my-release-key.jks") storePassword "password" keyAlias "alias_name" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release } } } ``` 3. **选择签名类型** 在打包时,可以选择启用 v1 v2 签名。如果目标设备运行的是 Android 7.0 及以上版本,则建议同时启用 v1 v2 签名以确保兼容性安全性[^4]。 #### 三、预置 APK 的区别 预置 APK 是指在 Android 系统编译时直接嵌入到系统镜像中的应用程序。与普通 APK 相比,预置 APK 存在以下差异: 1. **签名差异** 预置 APK 通常需要使用系统签名文件进行签名,以确保其能够获得系统级权限。例如,在安卓系统源码目录 `build/target/product/security/` 中,可以找到 `platform.pk8` `platform.x509.pem` 等文件。通过这些文件生成的 `platform.jks` 密钥库可以用于对 APK 进行系统签名[^2]。如果未正确签名,可能会导致安装失败或权限不足的问题。 2. **编译差异** 预置 APK 在编译过程中可能经过额外的处理步骤,例如使用 `zipalign` 工具对 APK 进行字节对齐操作。这种操作会改变 APK 文件的内容,从而可能导致 v2 签名失效[^1]。因此,在编译预置 APK 时需要特别注意签名的有效性。 3. **安装位置差异** 预置 APK 通常安装在系统的 `/system/app/` 或 `/system/priv-app/` 目录下,而普通 APK 则安装在 `/data/app/` 目录下。预置 APK 的位置决定了其是否具有系统级权限以及是否可以在系统启动时自动运行[^2]。 4. **权限差异** 预置 APK 可以通过设置 `android:sharedUserId="android.uid.system"` 属性来获得系统级权限。这种权限允许 APK 访问系统级别的资源功能,而普通 APK 通常无法获得此类权限[^2]。 #### 四、示例代码:生成并应用系统签名 以下是一个使用系统签名文件对 APK 进行签名的示例命令: ```bash apksigner sign --ks platform.jks --ks-pass pass:android --key-pass pass:android yourapp.apk ``` 验证签名是否成功: ```bash apksigner verify -v yourapp.apk ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值