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。

相关推荐
apihz7 小时前
全球域名 WHOIS 信息实时查询免费 API 接口教程,支持1000+后缀
android·网络·网络协议·tcp/ip·apache·域名·whois
非典型Android程序员9 小时前
Binder机制学习总结
android
AI2中文网9 小时前
App Inventor 2 音频播放器 vs 音效 vs 视频播放器:三个媒体组件,选错了App直接卡死
android·音视频·媒体
李剑一9 小时前
uni-app x 实现本地 JSON 文件的导入导出(APP端可用)
android·前端·uni-app
喜欢打篮球的普通人10 小时前
LLVM后端指令选择
android·java·javascript
hunterandroid10 小时前
Room 数据库迁移:让本地数据升级更稳
android·前端
阿巴斯甜10 小时前
Compose NavHost的使用:
android
雁鸣零落10 小时前
浏览器扩展 CaptionGo,在网页视频上显示双语字幕,支持 PC 和手机端使用
android·chrome·edge·firefox·安卓
2501_9151063210 小时前
iOS 软件测试工具性能监控、日志分析 KeyMob、Instruments等
android·ios·小程序·https·uni-app·iphone·webview
__Witheart__11 小时前
lunch选择的版型与版型对应的配置文件
android·linux