📋前言
✨本文主要介绍基于uni-app前端框架开发后,实现 Android 离线打包的详细流程。
一、准备环境
确保 HBuilderX、离线 SDK 和 JDK 的版本一致。
1.1 下载并安装 HBuilderX

1.2 下载并安装 JDK 8
JDK 必须 JDK8(1.8),Android Studio 新版自带的 JDK11/17 会构建报错。

1.3 下载 Android 离线SDK
从 DCloud Android 离线SDK下载页 下载与你的 HBuilderX 大版本完全匹配的离线SDK。【HBuilderX 5.15 + Android 离线 SDK 5.15】


1.4 下载安装 Android Studio
官方下载页:https://developer.android.com/studio?hl=zh-cn
官方国内镜像下载页:https://developer.android.google.cn/studio?hl=zh-cn

二、配置项目信息
2.1 确保 manifest.json 的AppID已生成

2.2 登录DCloud开发者中心
-
官方地址: https://dev.dcloud.net.cn/,核心后台,离线 SDK、AppID、推送、证书管理都在这里。
-
在
我的应用中找到该项目,申请离线打包Key(3.1.10版本后必需,后续配置要用到)。
sh
# 生成签名证书(在电脑上需要安装好 Java JDK)
keytool -genkey -alias waisaa -keyalg RSA -keysize 2048 -validity 36500 -keystore waisaa.keystore
# 密钥库口令:123456
# 迁移到行业标准格式 PKCS12
keytool -importkeystore -srckeystore waisaa.keystore -destkeystore waisaa.keystore -deststoretype pkcs12
# 查看证书信息
keytool -list -v -keystore waisaa.keystore
# 离线打包Key
4eb123456ceef501234567f0bd810cb8


三、生成本地打包App资源
在 HBuilderX 打开项目 → 菜单栏"发行" → "App-Android/iOS-本地打包" → "生成本地打包App资源",等待生成完毕会在unpackage/resources目录下生成该项目的资源包。


四、导入SDK
解压离线SDK,用 Android Studio 打开 HBuilder-Integrate-AS 工程。


五、替换资源文件
将 HBuilderX 生成的 __UNI__xxxx 资源文件夹 完整复制到 app/src/main/assets/apps/ 目录下,并删除旧的默认文件夹。

六、修改项目信息【关键步骤】
这个步骤的配置很关键,用到了前面准备好的相关信息,需要一一对应。
6.1 配置 AppID
在 assets/data/dcloud_control.xml 文件中,将 标签的 appid 值改成你的 AppID。

6.2 配置 AppKey
在 AndroidManifest.xml 文件中,找到 <meta-data android:name="dcloud_appkey" .../>,将 android:value 替换为你在开发者中心申请的 AppKey。

6.3 配置 应用签名
在 app/build.gradle 文件中的 signingConfigs 块内,填写你的证书信息(storeFile、storePassword、keyAlias、keyPassword)。
注意:
keyPassword和storePassword的值都为密钥库口令。


6.4 配置 包名 (applicationId)
同样在 app/build.gradle 文件中,修改 defaultConfig 下的 namespace 和 applicationId 为你的应用包名。

6.5 自动读取版本并赋值
这一步配置可以实现每次打包只用更换app资源包,不用手动修改版本,版本号会自动读取资源包中的版本号。也同样是在 app/build.gradle 文件中进行修改,在apply plugin: 'com.android.application'下面加入如下内容(注意路径中的AppID替换成你自己的):
// ========== 1. 导入JSON解析 ==========
import groovy.json.JsonSlurper
// ========== 2. 定义方法:读取UniApp的manifest.json版本 ==========
def getUniAppVersion() {
// 👉 这里路径要改成你自己的!
// 一般是:src/main/assets/apps/你的UniAppID/www/manifest.json
def manifestFile = file('src/main/assets/apps/__UNI__0777BD3/www/manifest.json')
if (!manifestFile.exists()) {
println "⚠️ manifest.json不存在,使用默认版本"
return [code: 0, name: "1.0.0"]
}
try {
def json = new JsonSlurper().parse(manifestFile)
def code = json.version.code as Integer
def name = json.version.name
println "✅ 自动读取版本:versionCode=${code}, versionName=${name}"
return [code: code, name: name]
} catch (e) {
println "❌ 读取manifest失败:${e.message}"
return [code: 0, name: "1.0.0"]
}
}
// 执行获取
def uniVer = getUniAppVersion()

6.6 配置打包apk名称
也同样是在 app/build.gradle 文件中进行修改,在buildTypes'下面加入如下内容(这里根据获取的打包类型和版本号自己定义具体格式):
applicationVariants.all { variant ->
variant.outputs.all {
def buildType = variant.buildType.name
def version = variant.versionName
outputFileName = "wlfrecipe_v${version}.apk"
}
}

6.7 配置apk图标
把你自己制作好的logo放到 res/drawable/目录下,名称固定为 icon.png。

6.8 配置app名称
修改 res/values/目录下的 strings.xml,把app_name设置成自己app的名称。

七、生成APK
在 Android Studio 中,点击菜单栏的 Build → Build Bundle(s) / APK(s) → Build APK(s),等待编译完成即可。最终会在 simpleDemo/build/outputs/apk/debug目录下生成apk。
