isar_flutter_libs 引发 Namespace not specified

问题

在运行 Flutter Android 项目遇到启动问题提示 Namespace not specified 相关异常,一般的这种异常通常是插件或者 gradle 配置与 APG 不匹配导致

A problem occurred configuring project ':isar_flutter_libs

这次的问题是 isar_flutter_libs 插件没有支持最新的 AGP 适用,这个库最后停止在两年前,看起来想更新他支持最新 APG 短期不太现实

解决

解决思路就是要么对 AGP 降级,要么在 Android 配置中增加动态属性设置

app\android\build.gradle.kts

groovy 复制代码
// === HOTFIX_AGP8_NAMESPACE_isar_flutter_libs ===
// 动态为三方库模块注入 namespace(AGP 8+)。
subprojects {
    if (name == "isar_flutter_libs") {
        plugins.withId("com.android.library") {
            val ext = extensions.findByName("android")
            val setter = ext?.javaClass?.methods?.firstOrNull { it.name == "setNamespace" && it.parameterTypes.size == 1 }
            val getter = ext?.javaClass?.methods?.firstOrNull { it.name == "getNamespace" && it.parameterTypes.isEmpty() }
            val hasNs = try { getter?.invoke(ext) != null } catch (_: Throwable) { false }
            if (!hasNs && setter != null) {
                setter.invoke(ext, "dev.isar.flutter.libs")
                println("[hotfix] set namespace for :isar_flutter_libs -> dev.isar.flutter.libs")
            }
        }
    }
}

重新清除依赖运行 看到日志里有如下更新表明注入已生效

csharp 复制代码
[hotfix] set namespace for :isar_flutter_libs -> dev.isar.flutter.libs

然后又遇到其他问题

flutter_local_notifications(以及其依赖链)在低于 Android 8.0(API 26)设备上使用了 Java 8+ 核心库 API;AGP 会在 :app:checkDebugAarMetadata 阶段检查到未开启 desugaring 直接失败。

app\android\app\build.gradle.kts 增加如下声明

android 配置增加

groovy 复制代码
android {
    namespace = "com.example.ble_chat_flutter"
    compileSdk = flutter.compileSdkVersion
  + ndkVersion = "27.0.12077973"

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
      + isCoreLibraryDesugaringEnabled = true
    }

defaultConfig 配置增加

groovy 复制代码
    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.example.monorepo"
        // You can update the following values to match your application needs.
        // For more information, see: https://flutter.dev/to/review-gradle-config.
      + minSdk = 23

末尾加

groovy 复制代码
+ dependencies {
+     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
+ }

整体完成插件适配, groovy 通过预编译

相关推荐
爱笑鱼17 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼18 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
zhazhazsy18 小时前
Flutter 多 Isolate 实战:搭建主 Isolate 数据与能力桥
flutter
壮哥_icon19 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138420 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记20 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难20 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
math_hongfan21 小时前
鸿蒙Flutter setState机制深入理解
学习·flutter·华为·harmonyos·鸿蒙
阿pin1 天前
Android随笔-Retrofit
android·retrofit
想取一个与众不同的名字好难1 天前
安卓自定义颜色选择器
android