Appearance
UniApp X Android 离线打包:从零开始的完整指南
本文从创建全新 Android 项目开始,一步步配置 UniApp X 离线打包环境。纯命令行操作。
环境准备
下载 UniApp X Android SDK:https://web-ext-storage.dcloud.net.cn/uni-app-x/sdk/Android/Android-uni-app-x-SDK@14196-4.87.zip
⚠️ 注意:这是 uni-app X 的 SDK,不是传统 uni-app SDK!
bash
# 设置环境变量(替换为你的实际路径)
export SDK_PATH=~/Downloads/Android-uni-app-x-SDK # UniApp X SDK 解压路径第一步:创建项目目录结构
bash
# 创建项目目录
mkdir -p ~/AndroidStudioProjects/MyUniAppX
cd ~/AndroidStudioProjects/MyUniAppX
# 创建所有需要的目录
mkdir -p plugins
mkdir -p gradle/wrapper
mkdir -p app/src/main/java/com/example/myuniappx
mkdir -p app/src/main/res/values
mkdir -p uniappx/libs
mkdir -p uniappx/src/main/java
mkdir -p uniappx/src/main/res/values
mkdir -p uniappx/src/main/assets/apps第二步:创建 Gradle Wrapper(不需要预装 gradle)
gradle/wrapper/gradle-wrapper.properties
bash
cat > gradle/wrapper/gradle-wrapper.properties << 'EOF'
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
EOFgradlew (Unix 脚本)
bash
curl -o gradlew https://raw.githubusercontent.com/gradle/gradle/master/gradlew
chmod +x gradlew或者手动创建:
bash
cat > gradlew << 'GRADLEW_EOF'
#!/bin/sh
DIRNAME=$(dirname "$0")
APP_BASE_NAME=$(basename "$0")
cd "$DIRNAME" || exit 1
exec java -classpath "$DIRNAME/gradle/wrapper/gradle-wrapper.jar" org.gradle.wrapper.GradleWrapperMain "$@"
GRADLEW_EOF
chmod +x gradlew下载 gradle-wrapper.jar
bash
curl -L -o gradle/wrapper/gradle-wrapper.jar \
https://github.com/AntennaPod/AntennaPod/raw/refs/heads/master/gradle/wrapper/gradle-wrapper.jar第三步:创建 Gradle 配置文件
settings.gradle
bash
cat > settings.gradle << 'EOF'
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
flatDir { dirs('./plugins/') }
}
}
rootProject.name = "MyUniAppX"
include ':app'
include ':uniappx'
EOFbuild.gradle (根目录)
bash
cat > build.gradle << 'EOF'
buildscript {
dependencies {
classpath(files('plugins/uts-kotlin-compiler-plugin-0.0.1.jar'))
classpath(files('plugins/uts-kotlin-gradle-plugin-0.0.1.jar'))
}
}
plugins {
id 'com.android.application' version '8.2.2' apply false
id 'com.android.library' version '8.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.9.10' apply false
}
EOFgradle.properties
bash
cat > gradle.properties << 'EOF'
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
kotlin.code.style=official
EOF第四步:创建 app 主模块
app/build.gradle
bash
cat > app/build.gradle << 'EOF'
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
namespace 'com.example.myuniappx'
compileSdk 34
defaultConfig {
applicationId "com.example.myuniappx"
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
}
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
}
dependencies {
implementation project(':uniappx')
implementation fileTree(include: ['*.aar'], dir: '../uniappx/libs')
implementation 'androidx.core:core-ktx:1.10.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
}
EOFapp/src/main/AndroidManifest.xml
bash
cat > app/src/main/AndroidManifest.xml << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light">
</application>
</manifest>
EOFapp/src/main/res/values/strings.xml
bash
cat > app/src/main/res/values/strings.xml << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyUniAppX</string>
</resources>
EOF第五步:创建 uniappx 模块
uniappx/build.gradle
bash
cat > uniappx/build.gradle << 'EOF'
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
id 'io.dcloud.uts.kotlin'
}
android {
namespace 'io.dcloud.uniappx'
compileSdk 34
defaultConfig {
minSdk 21
targetSdk 34
}
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
}
dependencies {
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation "androidx.core:core-ktx:1.10.1"
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation "androidx.appcompat:appcompat:1.0.0"
implementation "androidx.exifinterface:exifinterface:1.3.6"
implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.webkit:webkit:1.6.0"
implementation "com.google.android.material:material:1.4.0"
implementation "androidx.viewpager2:viewpager2:1.1.0-beta02"
implementation "com.alibaba:fastjson:1.2.83"
implementation "com.facebook.fresco:fresco:3.4.0"
implementation "com.facebook.fresco:middleware:3.4.0"
implementation "com.facebook.fresco:animated-gif:3.4.0"
implementation "com.facebook.fresco:webpsupport:3.4.0"
implementation "com.facebook.fresco:animated-webp:3.4.0"
implementation "com.caverock:androidsvg:1.4"
implementation "com.github.bumptech.glide:glide:4.9.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.10"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.9.10"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
implementation "com.squareup.okhttp3:okhttp:3.12.12"
implementation "com.github.getActivity:XXPermissions:18.63"
implementation "net.lingala.zip4j:zip4j:2.11.5"
}
EOFuniappx/src/main/AndroidManifest.xml
bash
cat > uniappx/src/main/AndroidManifest.xml << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application android:name="io.dcloud.uniapp.UniApplication">
<activity
android:name="io.dcloud.uniapp.UniAppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@style/UniAppX.Activity.DefaultTheme"
android:windowSoftInputMode="adjustResize"
tools:replace="android:exported,android:theme,android:configChanges,android:windowSoftInputMode,android:screenOrientation">
</activity>
<meta-data
android:name="DCLOUD_UNI_APPID"
android:value="__UNI__YOUR_APPID" />
<meta-data
android:name="DCLOUD_CHANNEL"
android:value="google" />
</application>
</manifest>
EOFuniappx/src/main/res/values/strings.xml
bash
cat > uniappx/src/main/res/values/strings.xml << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">UniAppX</string>
</resources>
EOF第六步:复制 SDK 文件
bash
# 复制 gradle 插件
cp $SDK_PATH/plugins/uts-kotlin-compiler-plugin-0.0.1.jar ./plugins/
cp $SDK_PATH/plugins/uts-kotlin-gradle-plugin-0.0.1.jar ./plugins/
# 复制 AAR 文件
cp $SDK_PATH/libs/*.aar ./uniappx/libs/
# 验证
echo "=== plugins 目录 ==="
ls -la plugins/
echo "=== uniappx/libs 目录 ==="
ls -la uniappx/libs/第七步:导出 HBuilderX 资源
在 HBuilderX 中:发行 → 原生App-本地打包 → 生成本地打包App资源
bash
# 设置变量
export APPID=__UNI__XXXXXX
export HBX_PROJECT=/path/to/your/hbuilderx/project
# 复制资源
cp -r $HBX_PROJECT/unpackage/resources/app-android/$APPID ./uniappx/src/main/assets/apps/
# 复制 Kotlin 源码
cp -r $HBX_PROJECT/unpackage/resource/app-android/uniappx/app-android/src/* ./uniappx/src/main/java/
# 更新 AndroidManifest.xml 中的 APPID
sed -i '' "s/__UNI__YOUR_APPID/$APPID/g" uniappx/src/main/AndroidManifest.xml第八步:编译
bash
# 首次运行会下载 gradle
./gradlew assembleDebug
# 安装到设备
adb install app/build/outputs/apk/debug/app-debug.apk项目结构
MyUniAppX/
├── gradlew # Gradle wrapper 脚本
├── gradle/wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── build.gradle
├── settings.gradle
├── gradle.properties
├── plugins/ # UTS 插件
│ ├── uts-kotlin-compiler-plugin-0.0.1.jar
│ └── uts-kotlin-gradle-plugin-0.0.1.jar
├── app/
│ ├── build.gradle
│ └── src/main/
│ ├── AndroidManifest.xml
│ └── res/values/strings.xml
└── uniappx/
├── build.gradle
├── libs/*.aar # SDK AAR (19个)
└── src/main/
├── AndroidManifest.xml
├── assets/apps/__UNI__XXX/
├── java/ # Kotlin 代码
└── res/values/strings.xml最后更新:2026-01-14