Flutter 项目部署问题排查记录
项目信息
| 项目 | 值 |
|---|---|
| 应用名 | hazardouswaste\_dashboard\_app |
| 版本 | 1.2.0+12 |
| 设备 | ZC 328 |
| 设备架构 | armeabi-v7a |
| 设备系统版本 | Android 7.1 (API 25) |
问题一:安装失败 INSTALL\_FAILED\_OLDER\_SDK
现象
adb: failed to install app-debug.apk: Failure [INSTALL_FAILED_OLDER_SDK:
Requires newer sdk version #26 (current version is #25)]原因
| 项目 | 值 |
|---|---|
| APK 要求最低 SDK | 26(Android 8.0) |
| 设备实际 SDK | 25(Android 7.1) |
| 根因 | build.gradle中minSdkVersion设置为 26,超出设备系统版本 |
涉及文件
android/app/build.gradle解决方案
将 build.gradle 中的 minSdk 从 26 降低为 25:
gradle
defaultConfig {
applicationId = "com.zkzl.hazardouswaste_dashboard_app"
minSdk = 25 // 原值 26,改为 25
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}操作命令
bash
flutter clean
flutter pub get
flutter run结果
✅ 应用可正常安装到目标设备
问题二:运行崩溃 UnsatisfiedLinkError
现象
FATAL EXCEPTION: pool-2-thread-1
java.lang.UnsatisfiedLinkError: couldn't find "libDsThermalAndroid.so"崩溃调用链
DSTPUsbPrinterService.printWasteLabel()
→ ZPL.<init>() // DSTP 打印机 SDK 初始化
→ RFID.<init>()
→ RFIDNative.<clinit>() // 加载原生库
→ System.loadLibrary() // ❌ 找不到 libDsThermalAndroid.so原因
| 项目 | 说明 |
|---|---|
| 缺失文件 | libDsThermalAndroid.so(DSTS 热敏打印机 SDK 的原生库) |
| 文件实际位置 | android/app/libs/armeabi-v7a/和android/app/libs/arm64-v8a/ |
| 构建行为 | build.gradle中fileTree仅扫描.jar和.aar,不打包.so文件 |
| 根因 | .so放在了libs/目录,Android 构建系统不会将其打包进 APK |
build.gradle 中的相关配置:
gradle
// 只包含 .jar 和 .aar,不包含 .so
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))涉及文件
text
android/app/libs/armeabi-v7a/libDsThermalAndroid.so ← 错误位置
android/app/libs/arm64-v8a/libDsThermalAndroid.so ← 错误位置解决方案
将 .so 文件从 libs/ 移动到 jniLibs/ 目录:
# 创建正确目录
mkdir -p android/app/src/main/jniLibs/armeabi-v7a
mkdir -p android/app/src/main/jniLibs/arm64-v8a
# 移动文件
mv android/app/libs/armeabi-v7a/libDsThermalAndroid.so \
android/app/src/main/jniLibs/armeabi-v7a/
mv android/app/libs/arm64-v8a/libDsThermalAndroid.so \
android/app/src/main/jniLibs/arm64-v8a/修复后的目录结构
android/app/
├── libs/ ← 只放 .jar / .aar
│ └── (打印机SDK的 .aar 或 .jar 文件)
└── src/main/
└── jniLibs/ ← .so 原生库放这里
├── armeabi-v7a/
│ └── libDsThermalAndroid.so
└── arm64-v8a/
└── libDsThermalAndroid.so操作命令
flutter clean
flutter pub get
flutter run验证方法
bash
unzip -l build/app/outputs/flutter-apk/app-debug.apk | grep DsThermal正确输出应包含:
lib/armeabi-v7a/libDsThermalAndroid.so
lib/arm64-v8a/libDsThermalAndroid.so结果
✅ 应用可正常启动,打印机 SDK 初始化不再崩溃
知识点总结
| 目录 | 用途 | 构建系统行为 |
|---|---|---|
android/app/libs/ | Java/Kotlin 依赖 | 只扫描*.jar和*.aar |
android/app/src/main/jniLibs/ | 原生 .so 库 | 自动打包到 APK 的lib//目录 |