• Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.6——签署发布apk


    问题:

    为了将APK发布到google市场,需要对APK数字签名。

    解决方案:

    可以使用java的keytoll命令去创建一个证书,并且在gradle配置文件的signingConfigs块使用。

    讨论:

    所有的APK在发布之前都必须签名。默认的,Android用一个已知的key对测试的APK进行签名。你可以使用java的keytool命令行看到。

    debug的密钥存储在home目录下的一个叫.android的目录下。密钥的默认名叫debug.keysore,并且有一个android密码。

    在命令行输入 cd ~/.android/,然后输入keytool -list -keystore debug.keystore,默认密码android,可以看到密钥信息:

    密钥类型是JKS(Java KeyStore,公钥和私钥)。java支持另一种叫JCEKS(Java Cryptography Extensions KeyStore)的类型,这是用于共享密钥,但不是用于android应用。

    这个密钥有一个别名叫androiddebugkey的用于给测试APK签名的证书。

    PS:重置测试密钥,只需要删除debug.keystore,在你下次部署应用的时候,会重新生成。

    你不可以发布一个没有签名的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?
      [Unknown]:  Marlborough
    What is the name of your State or Province?
     [Unknown]:  CT
    What is the two-letter country code for this unit?
      [Unknown]:  US
    Is CN=Ken Kousen, OU=Unknown, O="Kousen IT, Inc.", L=Marlborough,
      ST=CT, C=US correct?
      [no]:  yes
    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]
    

    你可以使用jarsigner和zipalign工具去签名APK,但是使用gradle会更简单。如:

    你也许不想讲密码硬编码到build文件,你可以将它们放在gradle.properties文件中或者在命令行中设置。

    在DSL文档中,signingConfigs块被委托给SigningConfig类,里面有四个常用的属性:

    keyAlias:这个值在keytool签署特定的密钥时使用

    keyPassword:在签名进程中使用的key的密码

    storeFile:磁盘文件,包含keytool生成的keys和证书

    storePassword:密钥自己使用的密码

    另外有个storeType属性设置算法(默认是JKS),但是很少使用。

    为了是这些配置生效,在releas下增加signingConfig属性,如下:

    当你运行assembleRelease任务时,会在app/build/outputs/apk目录下生成一个发行版的APK。

    有一个重要的注意事项,你必须保留密钥,否则你就不能对应用发布任何更新,因为所有版本必须要使用同一个签名。

    将keystore放在一个安全的地方。这样做并不是为了加密的目的。而是为了完整性(确保APK没有被修改)和不可否认性(确保你是为一个可以对它签名的人)。如果别人得到了你的keystore,他们可以以你的名义签名别的app。

  • 相关阅读:
    自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图
    Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌
    补习系列(1)-springboot项目基础搭建课
    华为云OCR文字识别 免费在线体验!
    Python开发还在用virtualenv?不如了解下pipenv...#华为云·寻找黑马程序员#
    大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
    八分音符(频率)卷积算子 Octave Convolution
    补习系列-springboot-使用assembly进行项目打包
    Vue中拆分视图层代码的5点建议
    线上一个数组查询遇到的坑
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6376068.html
Copyright © 2020-2023  润新知