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"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 模块配置

这块根据你自己的需要进行打勾选择。比如我用到的是扫码,分享就勾选就好了;如果遇到支付,登录或分享,还需要到对应平台申请应用 ID 和通用链接。

# 权限配置

这块就是根据你自己应用的情况来勾选对应的权限,用到什么就勾选什么好了,不用勾选多余的,以免上架审核被打回来。

# 常用其他设置

这块主要是支持 CPU 类型,HBuilderX 已经支持以下 CPU 架构:

  1. armeabi-v7a:第 7 代及以上的 ARM 处理器(ARM32 位),市面上大多数手机使用此 CPU 类型。
  2. arm64-v8a: 第 8 代、64 位 ARM 处理器(ARM64 位),最近两年新发的设备使用此 CPU 类型,可以兼容使用 armeabi-v7a 的 so 库。
  3. 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 的用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 制作证书

keytool -genkey -alias hello -keyalg RSA -keysize 2048 -validity 36500 -keystore hello.keystore
1
  • 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。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 查看证书

可以使用以下命令查看证书信息。

keytool -list -v -keystore hello.keystore
# 输入密码,回车
输入密钥库口令:
1
2
3

可以看到打印出信息了。

密钥库类型: 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                                        ...=
]
]

*******************************************
*******************************************
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

其中证书的指纹信息:

  1. MD5:证书的 MD5 指纹信息
  2. SHA1:证书的 SHA1 指纹信息
  3. 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 打包配置

自制好证书以后,开始填写相关的信息。

# Android 包名

包名必须是字母、数字或下划线,并且以.分割为两段内容,每段内容必须以字母开头,首字母必须为小写字母,例如:dev.hello.test;

# 签名证书

可以选择自有证书,就是刚刚制作的证书,使用云端证书以及公共测试证书三种选择,建议云端或者自有证书。

  • 证书别名:例如hello;
  • 证书私钥密码:例如123456;
  • 证书文件:游览选择你的证书文件;

# 打包类型

  • 正式包:可以安装或发布到应用商店;
  • 自定义基座调试包:只能本地真机调试使用;
  • 渠道包:就是针对各个应用商店进行打包;
  • 传统打包:需要上传代码及证书;
  • 快速安心打包:不上传代码及证书,打包更快;

APP端打包

填完以上信息后,点击打包按钮,开始打包了,打包数量多时需要排队等候。

[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 分钟内进入打包状态。
1
2
3

# 打包成功

打包成功以后,在{项目根目录}/unpackage/release/apk/文件夹下会生成一个__UNI__XXXXXX__20230925111748.apk的安卓安装包,这就是打包成功了。

# 最后

以上就是安卓平台 APP 打包教程的主要内容,有不足之处,请多多指正。

分享至:

  • qq
  • qq空间
  • 微博
  • 豆瓣
  • 贴吧