Android 离线打包详细流程

📋前言

✨本文主要介绍基于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)。

注意:keyPasswordstorePassword 的值都为密钥库口令。

6.4 配置 包名 (applicationId)

同样在 app/build.gradle 文件中,修改 defaultConfig 下的 namespaceapplicationId 为你的应用包名。

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。

相关推荐
fengci.3 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php
stevenzqzq4 小时前
Android 矢量图(Vector Drawable)核心坐标与尺寸机制技术文档
android
plainGeekDev5 小时前
运行时获取依赖 → 编译时注入
android·java·kotlin
Wiktok5 小时前
Vue3(Vite)打包安卓APP 完整最佳实践
android·vue
Co_Hui5 小时前
Android 系统服务的添加
android
杉氧7 小时前
用 Compose 挑战交互与动效天花板:ComposeCraftLab 开源实验室全解析
android·前端·kotlin
朝与同歌暮同酒7 小时前
冒泡社区《幻想三国》还能玩吗?安卓手机与电脑模拟器试玩记录
android·智能手机·电脑
音视频牛哥8 小时前
从数字孪生到机器人操控:Android Unity3D下RTMP/RTSP多路低延迟播放实践
android·unity·音视频·unity rtsp播放器·unity rtmp播放器·rtsp player·rtmp player
用户69371750013849 小时前
了解一下 Agent Harness
android·前端·后端
淡淡的香烟9 小时前
Android15适配16kb完整版
android