Android 打包记

作者: 尹_路人 | 来源:发表于2019-08-23 11:24 被阅读1次

    Android 打包记

    安卓打包相比iOS算是简单的多的多了,没有那么 多证书限制

    安卓打包只需要一个签名文件(keystore),能证明这个包(apk)是属于你的就行了

    一、生成keystore

    两种方法可以生成keystore

    (1) Android Studio (V3.4.2)






    操作完成后,在android/路径下会生成一个名为adnpack_dist.keystore的文件

    关于Signature Versions: V1, V2 请参考 https://blog.csdn.net/lvshuchangyin/article/details/62227286

    (2) keytool命令 CLI

    $ keytool -genkey -v -keystore andpack_dist_cli.keystore -alias andpack_dist_cli -keyalg RSA -keysize 2048 -validity 10000  
    

    输出:

    输入密钥库口令:  
    再次输入新口令: 
    您的名字与姓氏是什么?
      [Unknown]:  yongqianvip
    您的组织单位名称是什么?
      [Unknown]:  com
    您的组织名称是什么?
      [Unknown]:  com
    您所在的城市或区域名称是什么?
      [Unknown]:  bj
    您所在的省/市/自治区名称是什么?
      [Unknown]:  bj
    该单位的双字母国家/地区代码是什么?
      [Unknown]:  CN
    CN=yongqianvip, OU=com, O=com, L=bj, ST=bj, C=CN是否正确?
      [否]:  y
    
    正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
             CN=yongqianvip, OU=com, O=com, L=bj, ST=bj, C=CN
    输入 <my-key-alias> 的密钥口令
            (如果和密钥库口令相同, 按回车):  
    [正在存储andpack_dist_cli.keystore]
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore andpack_dist_cli.keystore -destkeystore andpack_dist_cli.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    

    针对CLI执行最后的Warning问题,建议参照提示,把我们生成的非标准keystore迁移到标准格式

    操作完成后,在android/路径下生成一个名为adnpack_dist_cli.keystore的文件

    二、使用keystore给应用签名

    通过上述两种方式,我们得到了keystore文件(这个文件默认是被VCS忽略的,本地保留即可),在工程中通过配置,在打包时用来给包签名

    android/app/build.gradle中编辑以下信息

    android {
        ...
        // 签名配置部分
        signingConfigs{
            release{
            storeFile file("../andpack_dist.keystore")  // keystore相对路径  
            storePassword "715@1234567"
            keyAlias "andpack_dist"
            keyPassword "715@1234567"
       }
       buildTypes {
            release {
                ...
                signingConfig signingConfigs.release // 配置签名
            }
        }
        ...
    }
    

    android/下执行:

    $ ./gradlew assembleRelease
    

    一切正常则会在andorid/app/build/outputs/apk/下输出apk

    三、其他

    通过上述步骤得到签名过的apk,已经可以用于发布了,但是实测过程发现,一个空的工程输出的apk竟然将近20M大小,这是不能接受的,所以用Android Studio分析一个apk的组成结构


    问题很明显了,没有选择目标架构,默认包含了 armeabi-v7a, x86, arm64-v8a, x86_64四种架构,这个可以根据自己实际业务场景选择配置,因为我不是做Android 原生开发的,所以这块可能解释的不太清除,请客官自行Google
    如果仅保留armeabi-v7a,修改android/app/build.gradle

    android {
        ...
        defaultConfig {
            ...
            ndk {
                abiFilters "armeabi-v7a"
            }
        }
        splits {
            abi {
                reset()
                enable enableSeparateBuildPerCPUArchitecture
                universalApk false  // If true, also generate a universal APK
                include "armeabi-v7a"
            }
        }
       ...
    }
    

    重新打包,得到的apk包结构如下

    相关文章

      网友评论

        本文标题:Android 打包记

        本文链接:https://www.haomeiwen.com/subject/osuzsctx.html