`

为你的APK进行数字签名

阅读更多

摘要: 我们需要为 APK进行数字签名,这样才能发布到 Google Play商店。解决方法很简单,使用 Java的keytool命令创建证书并在 Gradle构建文件的 signingConfigs块中使用就可以办到。下面让我们看看详细讨论。本文选自《巧用Gradle构建Android应用》。

  所有 Android包(APK)文件在部署之前都需要被数字签名,Android使用一个已有的密钥签发调试用的 APK。你可以使用 Java提供的 keytool命令来查看。
默认情况下,调试用的密钥存储库在你的用户目录下的 .Android子目录下面。默认的名字叫作 debug.keystore,并且其密码是 Android。下面示例显示了怎么列举默认的证书。

  示例. 列举调试密钥库(Mac OS x)

> cd ~/.android
> keytool -list -keystore debug.keystore 
Enter keystore password: ("android") 

Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 1 entry 

androiddebugkey,Feb 9, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 
B7:39:B5:80:BE:A0:0D:6C:84:4F:A1:1F:4B:A1:00:14:12:25:DA:14

  密钥库的类型是 JKS,其代表(很自然的)Java KeyStore,用于公钥和私钥。Java提供另一种类型叫作 JCEKS(Java Cryptography Extensions KeyStore),其可以被用于共享密钥,但是没有被 Android应用程序使用。
  这个密钥库中有一个自签名的证书,别名为 Androiddebugkey,当 APK被部署到连接的设备或者模拟器上时,其被用于签名调试用的 APK。
  为了重设调试用的密钥库,简单地删除 debug.keystore文件,下次部署 app时会重新创建。
你不能部署一个发布版本的 app除非你对其签名了,意味着生成一个发布用的密钥。这也需要使用 keytool工具。一次很简单的运行如下所示。

  示例. 生成发布密钥

keytool -genkey -v -keystore myapp.keystore -alias my_alias
 -keyalg RSA -keysize 2048 -validity 10000 (all on one line) 
Enter keystore password: (probably shouldn't use use "password") 
Re-enter new password: (but if you did, type it again) 
What is your first and last name?
 [Unknown]: Ken Kousen 
What is the name of your organizational unit? 
 [Unknown]: 
What is the name of your organization? 
 [Unknown]: Kousen IT, Inc. 
What is the name of your City or Locality?

What is the name of your State or Province?


What is the two-letter country code for this unit? 

Is CN=Ken Kousen, OU=Unknown, O="Kousen IT, Inc.", L=Marlborough, 
 ST=CT, C=US correct? 

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA)
  with a validity of 10,000 days for: CN=Ken Kousen, OU=Unknown, 
  O="Kousen IT, Inc.", L=Marlborough, ST=CT, C=US 
Enter key password for <my_alias>
       (RETURN if same as keystore password): 
[Storing myapp.keystore]


What is the two-letter country code for this unit?  

Is CN=Ken Kousen, OU=Unknown, O="Kousen IT, Inc.", L=Marlborough, 
 ST=CT, C=US correct? 


Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) 
with a validity of 10,000 days for: CN=Ken Kousen, OU=Unknown, 
O="Kousen IT, Inc.", L=Marlborough, ST=CT, C=US 
Enter key password for <my_alias> 
       (RETURN if same as keystore password): 
[Storing myapp.keystore] 

  RSA算法被用于生成公私钥对,大小为 2KB,使用 SHA256进行签名,10 000(27年多)天有效期。
  你现在可以使用 jarsigner和 zipalign工具来为你的 APK签名了,但是让 Gradle来做会更容易。
  添加 signingConfigs块作为 Android闭包的一个子块,如下所示。

  示例. 在模块构建文件中的signingConfis块

android { 
    // ... other sections ... 
    signingConfigs { 
       release { 
           keyAlias 'my_alias' 
           keyPassword 'password' 
           storeFile file('/Users/kousen/keystores/myapp.keystore')
           storePassword 'password' 
        } 
    } 
}

  你可能不想将密码硬编码在构建文件中。幸运的是,你可以把它们放到 gradle.properties文件中,或者从命令行指定。
  从 DSL文档中,signingConfigs块委托给一个 SigningConfig的类,其包含四个常用的属性:

  • keyAlias:当签发一个特定的密钥时在 keytool中被使用。
  • keyPassword:在签发过程中使用的一个特定密钥的密码。
  • storeFile:包含密钥和证书的磁盘文件,由 keytool生成。
  • storePassword:密钥库文件自身使用的密码。 还有一个 storeType属性(默认为 JKS, 如示例 2-29所示),但是这个属性很少使用。 为了使用新的配置,添加一个 signingConfig属性到 release构建类型。

示例. 在发布构建中使用签名配置

android { 
     //其他段

buildTypes { 
   release { 
           //其他设置
           signingConfig signingConfigs.release 
       } 
     } 
} 

  当你在 Gradle中调用 assembleRelease任务的时候,构建为在 app/build/outpu/apk目录下生成一个发布版本的 APK。

  示例. 运行assembleRelease任务

> ./gradlew assembleRelease 
:app:preBuild UP-TO-DATE 
:app:preReleaseBuild UP-TO-DATE 
//...太多任务
:app:zipalignRelease UP-TO-DATE 
:app:assembleRelease UP-TO-DATE 

BUILD SUCCESSFUL 

kousen at krakatoa in ~/Documents/AndroIDstudio/MyAndroidApp 
> ls -l app/build/outputs/apk 
total 12088
-rw-r--r--1 kousen staff 1275604 Aug 24 15:05 app-debug.apk
-rw-r--r--1 kousen staff 1275481 Aug 26 21:04 app-release.apk 

  注意——这很重要— —不要丢失密钥库。如果丢了,你将不能发布任何关于你的 app的更新,因为所有的版本都必须要用同样的密钥签名。 
  本文选自《巧用Gradle构建Android应用》,点此链接可在博文视点官网查看。
                      图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       图片描述

分享到:
评论

相关推荐

    APK万能签名工具

    在Android系统中,每个APK文件都有一个数字签名,这个签名用于验证应用程序的来源和完整性,确保应用在安装时的安全性。当用户从网上下载APK文件,尤其是经过第三方修改过的版本,原有的签名可能会失效,导致安装时...

    apk重签名工具

    APK签名是一种数字签名机制,通过私钥对APK进行签名,确保应用的完整性和开发者身份。Android系统在安装APK时会验证其签名,以防止恶意篡改。当一个APK需要更新时,新版本的APK必须与旧版本使用相同的签名,否则系统...

    Windows版本 Android Apk签名工具

    Android系统要求每个发布到市场的APK文件都必须有一个数字证书签名。这个签名用于验证应用程序的开发者身份,确保应用在安装和更新过程中不被篡改。同时,签名也用于权限管理,只有拥有相同签名的应用才能进行权限...

    APK文件批量一键签名工具包

    3. **生成签名APK**:执行上述命令后,`signapk.jar`会使用你的密钥对APK进行签名,并生成一个新的签名过的APK文件。 `one_click_signer`可能是工具包中提供的脚本或程序,用于自动化上述过程,实现一键签名多个APK...

    APK重新签名

    在APK开发完成后,为了确保其来源可信和防止篡改,开发者会使用一个私钥对APK进行数字签名。这个签名包含了关于应用发布者的身份信息,以及对APK内容的哈希值,可以验证应用未被修改。Android系统在安装APK时会检查...

    android apk签名工具

    为了确保APK的安全性和可信任性,Android系统要求每个APK在发布之前必须进行数字签名。这个过程涉及到了签名工具,正如标题所示,“Android APK签名工具”正是用于这个目的。当APK的数字签名过期或者在反编译修改了...

    安卓APK批量自动签名

    在Android系统中,每个APK都需要一个数字签名,这个签名验证了应用的开发者身份以及代码未被篡改。签名过程涉及到使用私钥对APK的元数据进行加密,然后附带一个对应的公钥证书。用户安装APK时,系统会检查签名,确保...

    apk签名工具

    2. **生成数字签名**:使用私钥对APK的SHA-256摘要进行加密,生成数字签名。 3. **添加签名信息**:签名信息被添加到APK的META-INF目录下,包括公钥证书和数字签名。 4. **重新打包APK**:签名后的信息被合并回APK...

    安卓apk签名修改工具

    apk签名工具,自己定制个性的rom就轻而易举了!用这个签名apk文件,然后将apk安装到了模拟器中。 用的时候很简单,选择apk包,然后选择签名就可以。 1.有了这个软件,可以...4.用本软件给ROM制作数字签名,然后刷机

    APKSign apk签名软件

    签名文件通常包含私钥,它是开发者用来对APK进行数字签名的密钥。 标签中的“签名”是Android开发中的一个重要概念,每个发布到市场的应用都需要通过特定的数字证书进行签名,以证明应用的开发者身份和确保代码的...

    apk合成和签名工具

    1. 选择或创建一个数字证书,用于对APK进行签名。这个证书可以是自签名的,也可以是由权威机构签发的。 2. 使用签名工具(如 jarsigner 或 Android Studio 内置工具)对APK进行签名,这将验证开发者身份并确保APK在...

    android10 apk签名文件

    签名是对APK进行数字签名的过程,目的是确保APK未被篡改,并且能证明应用的来源。 1.2 作用: - 验证完整性:通过对比签名信息和APK内容,检查文件是否在传输或存储过程中被修改。 - 身份认证:签名证书能识别...

    微信工具apk签名获取

    在Android系统中,每个安装到设备上的应用程序都需要一个数字签名,这是为了确保应用的完整性和来源可信。签名过程主要包括两个步骤:生成密钥对(包括公钥和私钥)以及使用私钥对APK进行签名。私钥由开发者保管,...

    apk的签名,优化

    签名过程包括三个主要步骤:生成密钥对(公钥和私钥)、对APK进行数字签名以及封装签名信息到APK中。开发者通常使用Keystore系统来创建和管理这些密钥。例如,可以使用`keytool`命令行工具生成一个Keystore文件,...

    Android Apk签名工具

    2. 签名Apk:使用私钥对Apk进行签名,这一步骤会在Apk的META-INF目录下添加签名信息,如证书和数字签名。 3. 对Apk进行优化和压缩:某些签名工具可能还提供Apk的优化和压缩功能,以减小Apk的大小,提高下载和安装...

    Android apk 空包签名说明

    **jarsigner** 是Java Development Kit (JDK) 自带的一个工具,主要用于数字签名JAR文件,包括Android APK文件。通过该工具,开发者可以为APK文件添加数字证书,确保其来源的真实性和完整性。 #### 三、签名前的...

    apk自动签名工具

    2. **签名APK**:使用私钥对APK进行签名,生成一个数字签名。 3. **验证签名**:使用公钥,设备可以验证APK的签名,确保未被篡改。 **三、自动签名工具** "apk自动签名工具"旨在简化上述手动签名流程,提高效率。...

    APK重签名工具

    重签名APK是为了更改原有的数字签名,这可能是出于多种原因,如多渠道发布、应用内调试或者替换旧的签名证书。下面我们将深入探讨APK重签名工具及其相关知识。 首先,理解Android应用的签名机制至关重要。在Android...

    APK签名及更改APK名称工具

    APK签名过程涉及对APK进行数字签名,验证其未被篡改,并确认开发者身份。 首先,我们来了解APK签名的过程。通常,Android系统要求每个APK在发布前都要用开发者私钥进行签名。签名过程包括三个主要步骤:生成密钥对...

    apk安卓包签名工具简单方便

    签名过程通过私钥生成数字签名,这个签名能够证明应用的开发者身份,并且保证应用在分发过程中未经修改。 本工具的描述提到,它可以直接编辑APK文件,意味着用户不需要深入了解复杂的命令行操作或者使用如Android ...

Global site tag (gtag.js) - Google Analytics