摘要: 我们需要为 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进行数字签名相关推荐

  1. vue生成带签名的apk

    昨天说到生成签名证书,今天就是最后一步了,生成带签名的apk.啦啦啦~~ 生成带签名的apk有两种方式,一种是先生成debug版本,再加上数字签名证书然后生成带签名的APK.另外一种是直接一条命令生成 ...

  2. play 应用商店_如何在Play商店中发布应用程序

    play 应用商店 If you have been following my articles, you may have noticed that I have been writing abou ...

  3. APP android 测试用例手册

    一.客户端程序安全测试 1.检查apk的信息 java -jar GetApkInfo.jar  tfkj.apk 2.数字签名检查 C:\Program Files\Java\jdk1.8.0_11 ...

  4. 在mysql中 更新数据中where_SQL中使用UPDATE更新数据时一定要记得WHERE子句

    Servlet访问第一次500,刷新后404的解决办法 第一次运行错误:HTTP Status 500 -  --------------------------------------------t ...

  5. android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...

    本文将带你了解Android应用开发Android Studio数字签名打包apk图文步骤教程,希望本文对大家学Android有所帮助. Android Studio数字签名打包release版apk ...

  6. Android 数字签名学习笔记

    在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此 数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为sig ...

  7. (转) Android生成签名文件并用其对apk文件进行签名

    最近编程时遇到问题:写了一个android小程序,打包后用apktool反编译再打包都没问题,安装时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误 ...

  8. Unity OBB分包(基础APK+OBB) 与apk签名

    1.OBB (Opaque Binary Blob)文件格式,是安卓游戏通用数据包.在一些大型游戏上较为常见,同时还附以Data文件,亦或是md5.dat文件出现 产生原因:由于某些平台对于apk上传 ...

  9. android签名的应用-- 禁止未经授权签名的apk安装

    点击打开链接 最近项目有需求: 只有使用特定签名签的apk才可以安装,其他任何apk都不能安装(root版,使用adb push进去的除外).n多度娘.google之后最终实现,把实现代码罗列一下,以 ...

  10. Android开发把项目打包成apk

    做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为" ...

最新文章

  1. 跳槽“六要”你懂吗?[转载]
  2. sdut 1479 数据结构实验之栈与队列九:行编辑器
  3. 瞬间几千次的重复提交,我用 Spring Boot + Redis 扛住了!
  4. java中channelmessage,MessagePack在Netty中的应用
  5. QtObject QML类型
  6. 计算机科学与技术社会实践报告,计算机科学与技术系社会实践报告
  7. flume package遇到的问题
  8. python finally语句里面出现异常_Python异常处理中的else和finally
  9. 苹果推送iOS13.3正式版 联通用户有惊喜!
  10. Mac如何关闭触控板防止误触?内置的设置就可以达成
  11. java cron 解析_quartz cron 在线解析
  12. 金蝶K3系统如何更改已使用物料的计量单位信息
  13. 怎样复制秀米html码,秀米微信图文编辑器如何复制?
  14. Kafka入门经典教程
  15. U盘Linux启动引导
  16. 手游扫码登录神器教程
  17. 头歌答案--编写一个能搜索单词的程序Bailey–Borwein–Plouffe公式
  18. 你是如何变的自律的?
  19. 计算机cpu配置,怎么看cpu配置?查看电脑cpu等硬件配置的操作
  20. SLB 负载均衡实践

热门文章

  1. easyUI 数据表格datagrid的使用
  2. python生成html表格
  3. 《转载》python爬虫实践之模拟登录
  4. 【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息
  5. layer弹出相册层
  6. 2-PowerShell 对象,查询操作和格式化
  7. In-Stream Big Data Processing
  8. 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
  9. (HoneyView)轻便好用的免费图片浏览器
  10. Linux操作系统中修改hostname