
前言✨本文主要介绍基于uni-app前端框架开发后实现 Android 离线打包的详细流程。一、准备环境确保 HBuilderX、离线 SDK 和 JDK 的版本一致。1.1 下载并安装HBuilderX1.2 下载并安装JDK 8JDK 必须 JDK81.8Android Studio 新版自带的 JDK11/17 会构建报错。1.3 下载 Android 离线SDK从 DCloud Android 离线SDK下载页 下载与你的 HBuilderX 大版本完全匹配的离线SDK。【HBuilderX 5.15Android 离线 SDK 5.15】1.4 下载安装Android Studio官方下载页https://developer.android.com/studio?hlzh-cn官方国内镜像下载页https://developer.android.google.cn/studio?hlzh-cn二、配置项目信息2.1 确保 manifest.json 的AppID已生成2.2 登录DCloud开发者中心官方地址https://dev.dcloud.net.cn/核心后台离线 SDK、AppID、推送、证书管理都在这里。在我的应用中找到该项目申请离线打包Key3.1.10版本后必需后续配置要用到。# 生成签名证书(在电脑上需要安装好 Java JDK)keytool-genkey-aliaswaisaa-keyalgRSA-keysize2048-validity36500-keystorewaisaa.keystore# 密钥库口令123456# 迁移到行业标准格式 PKCS12keytool-importkeystore-srckeystorewaisaa.keystore-destkeystorewaisaa.keystore-deststoretypepkcs12# 查看证书信息keytool-list-v-keystorewaisaa.keystore# 离线打包Key4eb123456ceef501234567f0bd810cb8三、生成本地打包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为你的应用包名。注意两个不同的app包名不能相同因为Android 系统识别应用的唯一标识是包名applicationId不是 DCloud 的 appid。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的名称。6.9 配置app自动更新所需权限在AndroidManifest.xml文件中新增如下内容!-- 网络权限下载APK需要 -- uses-permission android:nameandroid.permission.INTERNET / uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE / !-- 读写存储保存APK文件需要 -- uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE / uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE / !-- 关键安装APK权限Android 8 必须 -- uses-permission android:nameandroid.permission.REQUEST_INSTALL_PACKAGES / !-- 可选小米等机型的额外权限 -- uses-permission android:namecom.miui.securitycenter.permission.INSTALL_APP /七、生成APK在 Android Studio 中点击菜单栏的Main Menu→Build→Generate App Bundle(s) or APKs→Generate APKs等待编译完成即可。最终会在simpleDemo/build/outputs/apk/debug目录下生成apk。