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包结构如下
网友评论