本文将指导如何实现 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 开发的,需要扩展一些原生能力。
Android Studio
JDK 1.8
HBuilderX(3.6.3.20220917)
DCloud账号
Android 离线 5+SDK
百度云,提取码: 7rfu
创建 uni-app 应用
登录DCloud,进入开发者管理后台。
点击创建应用
创建 uni-app 项目
Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。所以要使得我们的 uni-app 应用,能够离线打包,支持原生插件,那接下来的一步就是生成签名证书。
关于生成 Android 证书
目前我们生成证书的途径主要有两种:
- 使用 keytool 生成 Android 证书(证书的可定制性高,但是对新手并不友好。
- 使用 DCloud 官方提供的自动生成证书的功能(证书的可定制性不高,但是对新手友好。
接下来作者将介绍这两种方式生成 Android 证书。
使用 keytool 生成 Android 证书
可详见 DCloud 官方书写的Android平台签名证书(.keystore)生成指南
生成签名证书
打开命令行(cmd)
输入以下命令:
1 | keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore |
testalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
test.keystore是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径
36500是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期
回车后会提示:
查看证书信息
可以使用以下命令查看证书信息:
1 | keytool -list -v -keystore test.keystore |
会输出以下格式信息:
其中证书指纹信息(Certificate fingerprints ):
- MD5
证书的 MD5 指纹信息(安全码MD5) - SHA1
证书的 SHA1 指纹信息(安全码SHA1) - SHA256
证书的 SHA256 指纹信息(安全码SHA245)
生成的证书将会出现在该路径下:
1 | C:\User\<用户名>\ |
使用 DCloud 官方提供的自动生成证书的功能,生成 Android 证书
回到 DCloud 的开发者后台
查看证书详情
Android Studio 导入官方的 5+SDK
我们已经完成了签名证书的生成。接下来,我们要通过修改 uni-app 官方提供的 5+SDK 成为我们自己的 Android 项目。(PS: 5+SDK 的链接见本文开头的 “开发环境情况与所需文件” 列表)
使用 Android Studio 打开该项目
新建类包,实现自定义包名
在 DCloud 开发者后台,输入包名,以及签名证书的 SHA1 ,并保存。
保存成功后,该应用的 App Key 将会显示。
将其复制粘贴到
uni-app 部分
我们已经完成了 Android Studio 导入并修改官方 5+SDK 的操作。接下来,我们将会使用 HBuilderX 构建一个 uni-app 应用,并完成 uni-app 方面的打包。
将该项目的 appid 修改为 DCloud 开发者后台对应应用的 appid。(PS: 如果你在后台新建了应用,那一般都是会自动对应的。如果没有对应,就只能手动修改了。)
将 uni-app 应用打包为 Android 资源包
将打包出来的资源包,拷贝出来
整合 uni-app 与 Android 代码,完成打包
打开 dcloud_control.xml 文件修改 appid 与 appvar (应用版本号)
将我们上文中得到的资源包,覆盖 “__UNI__E”,这个文件。
将我们之前生成好的证书放入项目,并配置对应参数。
将主的AndroidManifest.xml 文件头的 package 修改为我们在 DCloud 开发者后台设置的包名
将项目的主 build.gradle 文件的 applicationId 修改为我们在 DCloud 开发者后台设置的包名
运行代码
连接上安卓设备,右上角点击绿色三角形,运行代码。
完成
关于未配置appkey或配置错误的问题
请仔细检查:
- 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