UniApp 结合 HBuilderX 进行离线打包,可以在本地环境更灵活地构建 Android APP。下面我将梳理一份从环境准备到生成 APK 的实战指南,并附上一些常见问题的解决方法。
一、 准备工作与环境配置
1. 开始离线打包前,需要准备好以下工具和材料:
| 准备项 | 说明 | 备注 |
|---|---|---|
| HBuilderX | 开发 UniApp 项目的主要 IDE。 | 从官网下载最新版。 |
| Android Studio | 用于编译和构建最终的 APK 文件。 | 官网下载地址 |
| App 离线 SDK | 核心依赖库,提供了 UniApp 运行所需的环境。 | 官网下载地址 ** 关键点**:必须确保下载的 离线 SDK 版本与你的 HBuilderX 版本一致。可在 HBuilderX 的"帮助"->"历次更新说明"中查看版本号。 |
| Java JDK | 建议使用 JDK 1.8 或更高版本(如 JDK 11, 17)。 | 需在 Android Studio 中配置。本文使用 JDK1.8示例 |
| App AGP | 核心依赖库,提供了 Android Gradle Tools 运行所需的环境。 | 关键点:必须确保与Android Gradle 版本匹配,本文使用 AGP 3.X 作为示例。 |
2. 离线打包关键步骤
完整的离线打包流程涉及云端配置和本地操作,核心步骤如下图所示:
二、生成本地打包资源
1. 注册DCloud 开发者账号
注册地址: https://dev.dcloud.net.cn/pages/common/login

2.完成个人手机号验证绑定

3. 创建应用
在开发者中心–>应用管理–>创建应用,创建完将生成应用 Appid;

3.uniapp项目配置 Appid
在 HBuilderX 中打开 UniApp 项目,打开manifest.json 文件,基础配置中填写 AppId,并配置 app基本信息;
{
"name" : "我的app",
"appid" : "__UNI__xxxxxxx",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "106",
//其他配置项
......
},

4. 生成本地打包资源
在 HBuilderX 中打开 UniApp 项目,点击菜单栏的 “发行” -> “原生App-本地打包” -> “生成本地打包App资源” 。

成功后,在项目根目录下的 unpackage/resources 目录下会生成一个以项目 AppID 命名的文件夹,这个文件夹就是打包的核心资源。

三、创建原生App
Android原生工程配置官方文档:
https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android.html
1. 打开Android studio 新建一个空白项目

2. 选择 Empty Activity 点击 Next。

3. 生成App目录结构如下:

项目结构说明
MyProject/
├── build.gradle # 项目级配置
├── gradle.properties # 全局属性
├── settings.gradle # 包含的子模块
├── gradle/
│ └── wrapper/
│ └── gradle-wrapper.properties # Gradle 版本配置
└── app/
└── build.gradle # App 模块配置
4.修改核心配置文件:
1. settings.gradle
rootProject.name = "Emergency"
include ':app'
2.项目级 build.gradle配置
// 项目根目录下的 build.gradle
buildscript {
repositories {
google() // 必须
jcenter() // 旧版 Android 项目常用
}
dependencies {
// 使用 AGP 3.6.4(兼容 Gradle 5.6.4)
classpath 'com.android.tools.build:gradle:3.6.4'
// 如果你的项目使用 Kotlin,还需要添加 Kotlin Gradle 插件
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72" // 兼容 Kotlin 1.3.x
}
}
allprojects {
repositories {
google() // 必须
jcenter() // 旧版 Android 项目常用
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
3. gradle-wrapper.properties(Gradle 5.6.4)
# gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
4.app/build.gradle配置
// app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' // 如果使用 Kotlin
apply plugin: 'kotlin-android-extensions' // 如果使用 Kotlin Android Extensions(已废弃,但旧项目可能还在用)
android {
compileSdkVersion 29 // 建议至少 28(Android 9.0)
buildToolsVersion "29.0.3" // 对应 compileSdkVersion
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 21 // 最低支持 Android 5.0
targetSdkVersion 29 // 建议与 compileSdkVersion 一致
versionCode 1
versionName "1.0"
// Java 8 兼容性配置
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// Kotlin 配置(如果使用 Kotlin)
kotlinOptions {
jvmTarget = '1.8'
}
}
buildTypes {
release {
minifyEnabled false // 是否启用混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// AndroidX 基础库(AGP 3.6.x 支持 AndroidX)
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2' // 如果使用 Kotlin
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
// Kotlin 标准库(如果使用 Kotlin)
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72"
// 测试依赖
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
5.gradle.properties(可选)
# gradle.properties
# 启用 AndroidX(如果项目使用 AndroidX)
android.useAndroidX=true
android.enableJetifier=true # 自动迁移旧 support 库到 AndroidX
# 配置 Java 8(可选,如果系统默认不是 Java 8)
org.gradle.java.home=C\:\\Program Files\\Java\\jdk1.8.0_391
四. 准备签名证书
方式一:JDK自带工具生成
安卓应用安装需要签名证书。如果你没有,可以使用 JDK 自带的 keytool工具生成:
#生成 key
keytool -genkeypair -v -keystore "F:\key\app_key.jks" -alias myKey -keyalg RSA -keysize 2048 -validity 10000
#查看验证 key
keytool -list -v -keystore "F:\key\app_key.jks" -storetype JKS
请记住设置的别名(alias)、密码(key passwod)以及密钥存储位置、密钥库密码(key store password)信息,后面需要配置在 Android Studio中。

方式二:Android Studio 中生成
点击 菜单栏 Build -> Generate Signed Bundle or APK ,填写密钥存储位置(key store path)、 密钥库密码(key store password)、别名(alias)、密码(key password)信息,将自动生成。

五、下载HbuildX 离线SDK
- 根据 HbuildX 版本,从官方下载地址下载相同版本的 离线SDK 安装包。(本地 HbuildX 版本为4.23)

- 解压 SDK,SDK目录说明
|-- HBuilder-HelloUniApp App离线打包演示应用
|-- HBuilder-Integrate-AS 集成uni-app的最简示例
|-- SDK SDK库文件目录
|-- Feature-Android.xls Android平台各扩展Feature API对应的详细配置
|-- Readme.txt 版本说明文件及注意事项
|-- UniPlugin-Hello-AS uni原生插件开发示例
六. 原生 App工程中配置 HbuildX 相关 SDK 文件
1. data文件夹拷贝
将上面解压的 SDK->assets->data文件夹拷贝到刚刚创建的原生App的 assets文件夹下,如下图:

2. 创建apps文件夹并拷贝资源
将 HBuilderX 中的项目导出的资源复制到 assets->apps下,如下图所示:

将上面 resources 目录下文件夹拷贝到 assets/apps 目录下

3. 修改dcloud_control.xml文件
修改 dcloud_control.xml中的appid为拷贝过来的uni-app的id,确保dcloud_control.xml中的appid与manifest.json中的id与文件夹名一致,如下图所示:

生成自定义基座,修改 dcloud_control.xml,需要在根节点下添加debug="true"和syncDebug="true",如下图:

自定义基座支持热更新需要将debug-server-release.aar打入apk中,生成正式包时可以删除。
2089

被折叠的 条评论
为什么被折叠?



