uniapp项目实践总结(二十四)安卓平台 APP 打包教程
导语:当你的应用程序开发完成后,在上架安卓应用商店之前,需要进行打包操作,下面简单介绍一下打包方法。
目录
- 准备工作
- 配置项目
- 生成证书
- 打包配置
准备工作
在打包之前,请保证你的 uniapp 应用程序编译到安卓手机模拟器的 App 是可以正常运行的,APP 打包分为安卓和 ios 两个平台,下面简单介绍一下安卓的打包方法,由于本地打包问题较多,操作比较复杂,这里就省略了,本次主要介绍在线打包的方法。
配置项目
主要是在manifest.json
进行配置;打开文件后添加以下几个内容。
基本信息
应用名称、描述、版本名称、版本号;
图标配置
上传你的应用图标,建议1024*1024
,然后自动生成所有图标并替换;
启动界面
使用原生隐私政策提示框,这个很重要,勾选后会自动生成配置文件androidPrivacy.json
,示例如下:
根据你自己的实际情况填写对应的内容和地址。
{
"version": "1.0.0",
"prompt": "template",
"title": "服务协议和隐私政策",
"message": " 请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/> 你可阅读<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept": "同意并接受",
"buttonRefuse": "暂不同意",
"hrefLoader": "system|default",
"backToExit": "false",
"second": {
"title": "确认提示",
"message": " 进入应用前,你需先同意<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept": "同意并继续",
"buttonRefuse": "退出应用"
},
"disagreeMode": {
"support": false,
"loadNativePlugins": false,
"visitorEntry": true,
"showAlways": false
},
"styles": {
"backgroundColor": "#00FF00",
"borderRadius": "5px",
"title": {
"color": "#ff00ff"
},
"buttonAccept": {
"color": "#ffff00"
},
"buttonRefuse": {
"color": "#00ffff"
},
"buttonVisitor": {
"color": "#00ffff"
}
}
}
模块配置
这块根据你自己的需要进行打勾选择。比如我用到的是扫码,分享就勾选就好了;如果遇到支付,登录或分享,还需要到对应平台申请应用 ID 和通用链接。
权限配置
这块就是根据你自己应用的情况来勾选对应的权限,用到什么就勾选什么好了,不用勾选多余的,以免上架审核被打回来。
常用其他设置
这块主要是支持 CPU 类型,HBuilderX 已经支持以下 CPU 架构:
armeabi-v7a
:第 7 代及以上的 ARM 处理器(ARM32 位),市面上大多数手机使用此 CPU 类型。arm64-v8a
: 第 8 代、64 位 ARM 处理器(ARM64 位),最近两年新发的设备使用此 CPU 类型,可以兼容使用 armeabi-v7a 的 so 库。x86
: 少部分平板使用 x86,AS 模拟器中选了 intel x86 时使用 x86 处理器,以及其它常用三方模拟器通常使用 x86
还要就是 UrlSchemes 协议设置,这里根据自己应用名称设置就好了。
- 剩余配置
剩下的就根据自己实际情况配置就好,不多介绍了。
生成证书
这里主要是使用 JavaSDK 自带的keytool
工具来生成自有证书。
查看帮助
C:\Users\Hello>keytool
密钥和证书管理工具
命令:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令
使用 "keytool -command_name -help" 获取 command_name 的用法
制作证书
keytool -genkey -alias hello -keyalg RSA -keysize 2048 -validity 36500 -keystore hello.keystore
hello
是证书别名,建议字母和数字;hello.keystore
是证书文件名称;36500
是证书的有效期,单位天;
回车以后填入以下信息确认。
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: Mark
您的组织单位名称是什么?
[Unknown]: Hello
您的组织名称是什么?
[Unknown]: Hello.inc
您所在的城市或区域名称是什么?
[Unknown]: JC
您所在的省/市/自治区名称是什么?
[Unknown]: SX
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=Mark, OU=Hello, O=Hello.inc, L=JC, ST=SX, C=CN是否正确?
[否]: y
输入 <hello> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore hello.keystore -destkeystore hello.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
查看证书
可以使用以下命令查看证书信息。
keytool -list -v -keystore hello.keystore
# 输入密码,回车
输入密钥库口令:
可以看到打印出信息了。
密钥库类型: PKCS12
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: hello
创建日期: 2023-9-25
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Mark, OU=Hello, O=Hello.inc, L=JC, ST=SX, C=CN
发布者: CN=Mark, OU=Hello, O=Hello.inc, L=JC, ST=SX, C=CN
序列号: 57f8059e
有效期为 Mon Sep 25 17:55:21 CST 2023 至 Wed Sep 01 17:55:21 CST 2123
证书指纹:
MD5: 32:5D:CA:E6:62:91:E5:1A:AE:86:07:08:B9:49:D8:08
SHA1: 4D:F1:3E:4C:1A:7A:F2:A3:3C:35:5F:C9:8D:1F:4D:F1:11:6A:B0:A0
SHA256: 10:EC:97:1E:70:CC:00:86:BF:3A:F3:6A:56:12:36:41:B6:C8:92:DE:4F:C6:9B:D8:77:E0:A8:E5:68:D3:24:B2
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: A0 E4 E3 A3 F8 E5 FF 8A D9 1E EF D9 F6 DE E5 A7 ................
0010: C4 DC 97 3D ...=
]
]
*******************************************
*******************************************
其中证书的指纹信息:
- MD5:证书的 MD5 指纹信息
- SHA1:证书的 SHA1 指纹信息
- SHA256:证书的 SHA256 指纹信息
常用的命令
# 生成jks证书
keytool -genkeypair -alias demo1 -keystore demo.jks -validity 36500 -keyalg ec
keytool -genkeypair -alias demo2 -keystore demo.jks
# 查看jks证书
keytool -list -keystore demo.jks
# 查看jks证书信息
keytool -list -v -keystore demo.jks
keytool -list -keystore demo.jks -storepass 123456
# 导入cer证书
keytool -exportcert -alias demo1 -file demo1.cer -keystore demo.jks -storepass 123456
# 导出cer证书
keytool -importcert -alias demo1cert -file demo1.cer -keystore demo.jks -storepass 123456
keytool -importkeystore -srckeystore demo.jks -srcalias demo1 -srcstorepass 123456 -destkeystore demo1.p12 -deststoretype pkcs12 -deststorepass 123456
# 打印cer证书信息
keytool -printcert -file demo1.cer
# 生成公钥和私钥
openssl pkcs12 -in demo1.p12 -out demo1.pem -passin pass:123456 -passout pass:123456
openssl ec -in demo1.key
打包配置
自制好证书以后,开始填写相关的信息。
Android 包名
包名必须是字母、数字或下划线,并且以.
分割为两段内容,每段内容必须以字母开头,首字母必须为小写字母,例如:dev.hello.test
;
签名证书
可以选择自有证书,就是刚刚制作的证书,使用云端证书以及公共测试证书三种选择,建议云端或者自有证书。
- 证书别名:例如
hello
; - 证书私钥密码:例如
123456
; - 证书文件:游览选择你的证书文件;
打包类型
- 正式包:可以安装或发布到应用商店;
- 自定义基座调试包:只能本地真机调试使用;
- 渠道包:就是针对各个应用商店进行打包;
- 传统打包:需要上传代码及证书;
- 快速安心打包:不上传代码及证书,打包更快;
填完以上信息后,点击打包按钮,开始打包了,打包数量多时需要排队等候。
[HBuilder] 11:17:50.233 项目 hello [__UNI__XXXXXXX]的打包状态:
[HBuilder] 11:17:50.233 时间: 2023-09-25 11:17:48 类型: Android自有证书 队列中
[HBuilder] 11:17:50.233 目前云打包排队人数较多,当前打包任务位于队列第 27位,预计 2 分钟内进入打包状态。
打包成功
打包成功以后,在{项目根目录}/unpackage/release/apk/
文件夹下会生成一个__UNI__XXXXXX__20230925111748.apk
的安卓安装包,这就是打包成功了。
最后
以上就是安卓平台 APP 打包教程的主要内容,有不足之处,请多多指正。