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 要求最低 SDK26(Android 8.0)
设备实际 SDK25(Android 7.1)
根因build.gradleminSdkVersion设置为 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.gradlefileTree仅扫描.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//目录
最后修改:2026 年 08 月 20 日
如果觉得我的文章对你有用,请随意赞赏