uni-app 离线打包
2022-09-24 20:36:43 # uni-app # Android

本文将指导如何实现 uni-app 和原生安卓的混合开发

uni-app 和原生 App 混合开发问题:

首先务必确认 uni-app 和原生代码,谁是主谁是从的问题。

  • 如果你的应用是 uni-app 开发的,需要扩展一些原生能力,那么首先去插件市场看看有没有现成的插件,如果没有,就自己开发,开发文档请参考原生插件开发教程
  • 如果你的 App 是原生开发的,部分功能栏目想通过 uni-app 实现,有 2 种方式
    • 在原生 App 里集成 uni小程序 sdk ,参考
    • 如果不想集成原生 sdk ,那就把 uni-app 代码发布成 H5 方式,在原生 App 里通过 webview 打开。

如果应用是 uni-app 开发为主,只是想离线打包,那么不应该使用 uni小程序 sdk ,而是使用 App 离线打包 SDK ,参考。 另注意离线打包无法享受插件市场的付费原生插件,如有相关需求需自己进行原生插件开发。

本文我们只讨论第一种情况,即:应用是 uni-app 开发的,需要扩展一些原生能力。

开发环境情况与所需文件

  1. Android Studio

  2. JDK 1.8

  3. HBuilderX(3.6.3.20220917)

  4. DCloud账号

  5. Android 离线 5+SDK

    百度云,提取码: 7rfu

创建 uni-app 应用

登录DCloud,进入开发者管理后台。

​ 点击创建应用

202209252124241

​ 创建 uni-app 项目

202209252131219

202210132345564

​ Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。所以要使得我们的 uni-app 应用,能够离线打包,支持原生插件,那接下来的一步就是生成签名证书。

关于生成 Android 证书

目前我们生成证书的途径主要有两种:

  • 使用 keytool 生成 Android 证书(证书的可定制性高,但是对新手并不友好。
  • 使用 DCloud 官方提供的自动生成证书的功能(证书的可定制性不高,但是对新手友好。

接下来作者将介绍这两种方式生成 Android 证书。

使用 keytool 生成 Android 证书

​ 可详见 DCloud 官方书写的Android平台签名证书(.keystore)生成指南

生成签名证书

​ 打开命令行(cmd)

202209251238716

202209251950291

​ 输入以下命令:

1
keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
  • testalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字

  • test.keystore是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径

  • 36500是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期

回车后会提示:

202209251954227

查看证书信息

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

1
2
keytool -list -v -keystore test.keystore  
Enter keystore password: //输入密码,回车

会输出以下格式信息:

202209252054748

其中证书指纹信息(Certificate fingerprints ):

  • MD5
    证书的 MD5 指纹信息(安全码MD5)
  • SHA1
    证书的 SHA1 指纹信息(安全码SHA1)
  • SHA256
    证书的 SHA256 指纹信息(安全码SHA245)

生成的证书将会出现在该路径下:

1
C:\User\<用户名>\

202209252022257

使用 DCloud 官方提供的自动生成证书的功能,生成 Android 证书

回到 DCloud 的开发者后台

202209252158397

202209252159497

202209252200583

202209252200416

查看证书详情

202209252204781

202209252203804

Android Studio 导入官方的 5+SDK

​ 我们已经完成了签名证书的生成。接下来,我们要通过修改 uni-app 官方提供的 5+SDK 成为我们自己的 Android 项目。(PS: 5+SDK 的链接见本文开头的 “开发环境情况与所需文件” 列表)

202209252220939

使用 Android Studio 打开该项目

202209252231912

202209252234093

202209252235281

202209252240468

新建类包,实现自定义包名

202209252311414

202209252312827

在 DCloud 开发者后台,输入包名,以及签名证书的 SHA1 ,并保存。

202209252314809

保存成功后,该应用的 App Key 将会显示。

202209252315188

将其复制粘贴到

202209252320128

uni-app 部分

​ 我们已经完成了 Android Studio 导入并修改官方 5+SDK 的操作。接下来,我们将会使用 HBuilderX 构建一个 uni-app 应用,并完成 uni-app 方面的打包。

202209252243774

将该项目的 appid 修改为 DCloud 开发者后台对应应用的 appid。(PS: 如果你在后台新建了应用,那一般都是会自动对应的。如果没有对应,就只能手动修改了。)

202209252250229

将 uni-app 应用打包为 Android 资源包

202209252256892

202209252259348

将打包出来的资源包,拷贝出来

整合 uni-app 与 Android 代码,完成打包

打开 dcloud_control.xml 文件修改 appid 与 appvar (应用版本号)

202209252323221

将我们上文中得到的资源包,覆盖 “__UNI__E”,这个文件。

202209252326248

202209252327979

将我们之前生成好的证书放入项目,并配置对应参数。

202209252333758

将主的AndroidManifest.xml 文件头的 package 修改为我们在 DCloud 开发者后台设置的包名

202209252347155

将项目的主 build.gradle 文件的 applicationId 修改为我们在 DCloud 开发者后台设置的包名

202209252347295

运行代码

连接上安卓设备,右上角点击绿色三角形,运行代码。

202209260901893

完成

202209260901452

关于未配置appkey或配置错误的问题

202209260902419

请仔细检查:

  • uni-app 部分的代码, manifwst.json (文件)-> 源码视图 -> appid (键值对) , appid 是否修改
  • Android 部分代码,app (文件夹) -> build.gradle (文件) -> applicationId (键值对)
  • Android 部分代码,app (文件夹) -> src (文件夹) -> main (文件夹) -> AndroidManifest.xml (文件) -> 文件头的 package 参数
  • Android 部分代码,app (文件夹) -> src (文件夹) -> main (文件夹) -> AndroidManifest.xml (文件) -> meta-data (参数) -> android:value (参数)
  • Android 部分代码,app (文件夹) -> src (文件夹) -> main (文件夹) -> assets (文件夹) -> data (文件夹) -> dcloud_control.xml (文件) -> appid (参数)
  • Android 部分代码,app (文件夹) -> src (文件夹) -> main (文件夹) -> assets (文件夹) -> data (文件夹) -> dcloud_control.xml (文件) -> appver (参数)

代码地址

uni-app Android 部分代码地址:https://github.com/weiqhcode/UniPlugin-Hello-AS

uni-app js 部分代码地址:https://github.com/weiqhcode/uni-app-test