如何为Flutter应用配置.in域名以避免Android资源链接错误?
嘿,这个问题我之前也碰到过——核心原因是你用了Kotlin的关键字in作为包名前缀,Flutter为了让Kotlin代码能正常编译,自动在.kt文件里给in加了反引号,但Android的包名规则根本不允许出现反引号,导致构建时生成的AndroidManifest.xml带了非法的包名格式,触发资源链接失败。
下面给你两个可行的解决方案:
方案1:重新创建项目(最省心推荐)
直接换一个不是Kotlin关键字的组织前缀,比如把in.fiesto改成infiesto或者io.fiesto,重新执行创建命令就行:
flutter create --org infiesto lafiesto
这个方法能彻底避开关键字冲突,后续不会再有类似的奇怪问题。
方案2:手动修复现有项目(保留原组织名)
如果一定要保留in作为前缀,可以按以下步骤调整:
修正主Manifest文件
保持android/src/main/AndroidManifest.xml里的包名为合法格式,不要加反引号:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.fiesto.lafiesto">保留Kotlin文件的反引号
MainActivity.kt里的包名必须保留反引号,不然Kotlin编译器会报错,继续用这个格式:package `in`.fiesto.lafiesto import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { }修改app级build.gradle配置
打开android/app/build.gradle,在android块里添加namespace属性,同时确保applicationId是合法的包名:android { namespace "in.fiesto.lafiesto" compileSdk 34 // 这里用你项目的对应版本就行 defaultConfig { applicationId "in.fiesto.lafiesto" // 其他原有配置(minSdk、targetSdk等)保持不变 } // 其他原有配置保持不变 }清理缓存并重新构建
最后执行这几个命令清理缓存,重新构建项目:flutter clean flutter pub get flutter run这样配置后,Android构建系统会用合法的包名处理资源,而Kotlin代码也能正常识别关键字作为标识符。
为啥你之前的修改没用?
你之前把AndroidManifest.xml改成带反引号的包名是错的——Android完全不接受这种格式;而调整SDK版本和这个关键字冲突的问题根本无关,所以自然解决不了报错。
内容的提问来源于stack exchange,提问作者abhishek kumar

