Android jarsigner和apksigner签名apk(.jks)

前言

为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必须加固后才能上架。另外存在一部分免费加固apk后会删除AndroidStudio打包的签名,需要我们重新签名,这就是本文的由来。

使用工具介绍

jarsigner

jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner,比如我的 jarsigner 工具的位置在:E:\devlop_tool\Java\jdk1.8.0_161\bin

 apksigner

apksigner 是 Google 官方提供的针对 Android Apk 签名和验证的专用工具,位于 Android SDK/build-tools/SDK 版本/apksigner 。

以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在:E:\devlop_tool\AndroidSDK\build-tools\30.0.2

下面,我们将使用jarsigner 和 apksigner 两种签名工具分别进行演示。

一. 使用jarsigner签名

1.首先cmd进入jdk的bin目录

2.使用下面签名命令 (以oppo应用转移空包签名为例)

jarsigner -verbose -keystore 证书签名文件路径 -signedjar 签名后新Apk路径.apk 要签名的Apk路径.apk 证书签名别名

3.示例代码(最好指定打包路径方便寻到,以免到bin目录导致异常

jarsigner -verbose -keystore F:\relealseProject\jiagu\xxx.jks -signedjar F:\relealseProject\unsign\vivo_sign.apk F:\relealseProject\unsign\vivo_unsign.apk xxx

4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名 

注意:证书别名一定填写正确(不然报错:请指定别名)。输出apk名字和要签名的apk顺序不要错乱(不然报错:jarsigner: 无法打开 jar 文件)

二. 使用apksigner签名

1.首先cmd进入jdk的bin目录

  2.使用下面签名命令 (以oppo应用转移空包签名为例)

apksigner sign --ks 证书签名文件路径 --ks-key-alias 证书签名别名 要签名的apk路径.apk

3.示例代码 

apksigner sign --ks F:\relealseProject\jiagu\XXX.jks --ks-key-alias XXX F:\workdir\gitlab\xxx\app\release\XXX.apk

4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名

注意:输入密钥库的密码后,直接就输出完毕了,什么情况?这就完成了?是的,因为 apksigner 是对整个 Apk 包进行验证签名,所以没有其它的输出信息。会发现多了一个后辍名为 .idsig 的,这个可以不用处理,直接删掉也没问题。


简单了解 v1 签名和 v2 签名的区别 

注:该段描述主要参考链接地址为 点击此处,如有描述不当之处,欢迎指正。

v1 签名

在 Android 7.0 (即 Android N,Android Api 24) 以下的版本,只能使用旧签名方案,也就是 v1 签名。

v1 签名使用 JDK 的 jarsigner 工具,对 zip 压缩包的每个文件进行验证,签名后仍可对压缩包进行修改、移动、重新压缩文件。

v2 签名

自 Android 7.0 开始,Google 新增了 v2 签名方案。

v2 签名使用 Google 自带的 apksigner 工具,对 zip 压缩包的整个文件进行验证,签名后不能修改压缩包,包括 zipalgin 。

如果你对 v2 签名的 apk 解压,没有发现签名文件,重新压缩后 v2 签名失效,这说明 v2 签名是对整个 Apk 进行签名验证。

v2 签名相对 v1 签名的优点

  • 因为不能修改压缩包,所以 v2 签名会更安全。
  • v2 签名是对整个 Apk 进行签名验证,不需要解压验证,所以签名验证的时间会更短。

两者区别说明:

jarsigner 只支持 v1 签名

apksigner 工具默认同时使用 v1 和 v2 签名,以兼容 Android 7 以下的系统版本。

检查 Apk 是否已签名 v1、v2、v3、v4,并对比两者的区别

在终端输入如下命令即可

apksigner verify -verbose -print-certs 要检查的Apk路径.apk
  • jarsigner

  • apksigner  

结束语

由上图可知两者签名的区别,各位看官根据需要使用即可。 

 赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用Android Studio签名APK的步骤: 1. 生成keystore文件:可以在Android Studio中通过Build-Agenerate Signed Bundle / APK菜单完成生成,也可以使用命令行: keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 2. 配置签名:在AndroidManifest.xml文件中配置签名信息,如下所示: ``` <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.myapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-feature android:name="android.hardware.telephony" /> <permission android:name="com.example.myapp.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.myapp.permission.MAPS_RECEIVE" /> <uses-library android:name="com.google.android.maps" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </manifest> ``` 3. 打包签名:使用Android Studio的Build-Agenerate Signed Bundle / APK菜单完成打包签名过程,也可以使用命令行:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name 4. 优化APK:使用zipalign优化APK,可以使用命令行:zipalign -v 4 my_application.apk my_application_aligned.apk ### 回答2: Android Studio 是一款应用程序开发工具,为开发者提供了完整的应用开发环境,也是 Android 系统中最常用的开发工具之一。在开发完成后,我们需要发布签名APK 文件,以便在 Google Play Store 中发布应用程序等。 签名 APK 文件让用户相信 APK 文件的安全性。还可以通过签名让系统知道应用程序是由哪个开发者发布的。这篇文章将介绍如何在 Android Studio签名 APK 文件。 首先,我们需要在 Android Studio 中打开要进行签名的项目。然后,选择 "Build" 菜单,再选择 "Generate Signed Bundle/APK"。然后,选择 "APK" 并选择下一步。 接下来,我们需要为我们的 APK 文件创建一个新的密钥存储文件,或者使用之前创建的密钥存储文件。如果我们没有创建过密钥存储文件,我们需要选择 "Create new" 并输入一个存储路径和一个密码。然后,我们需要填写所有必填字段,例如别名、组织单位名称、组织名称和国家等信息。 在成功创建密钥存储文件后,我们需要填写 APK 文件相关的信息,例如 APK 文件的目的地、签名用的密钥存储文件、别名及密码等信息。请确保正确填写所有信息并选择“V2(Full APK Signature)” 选项以允许全程签名。 最后,选择“Finish”,开始生成签名 APK,完成后从存储目录下找到 APK 文件即可。 以上就是在 Android Studio签名 APK 文件的步骤。在发布应用程序之前,应该始终使用签名 APK 文件,以确保应用的安全性和完整性。 ### 回答3: AndroidStudioAndroid应用程序开发平台,它提供了一个可以方便创建、打包等操作的图形化界面(GUI)以及丰富的插件机制,是 Android 开发的重要工具。签名apkAndroid应用程序开发过程中的一个重要步骤,如下是AndroidStudio签名apk的详细步骤: 步骤一: 在Android Studio中打开你的项目。 步骤二: 点击左上角菜单中 File ==> Project Structure。 步骤三: 在左侧面板选择app。 步骤四: 点击Signing菜单,然后点击“Create new…”按钮创建一个新的key。 步骤五: 按照提示输入必要的信息,包括Key store path,Key store password,Key alias, Key password,Valid from, Valid until等,然后点击“Ok”保存。 步骤六: 在Build Types菜单中,选中Release选项,并且在Signing Configs处选中你所创建的key。 步骤七: 重新编译你的应用程序,Android Studio将自动使用你所创建的key签名apk。 需要注意的是,为了保证应用程序的签名安全,你需要妥善保管Key store password、Key password、Key Alias等信息。此外,每次发布新的版本时都应该使用一个新的key。这样才能保证应用程序的安全性。签名apkAndroid 应用程序开发的重要步骤,一定要认真对待。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值