最近在使用flutter打包安卓apk的时候发现有错误,发现是使用了qr_code_scanner实现扫码的错误。
截屏2024-11-07 09.07.41.png
仔细阅读报错信息发现有这行错误:flutter Namespace not specified. Specify a namespace in the module's build file,查阅资料后得出结论,在使用flutterSDK 3.24之后发现新建项目,项目默认都是基于AGP8了,由于 AGP 开始强制要求 namespace 配置,不仅仅是主工程,也包括第三方库都强制要求 namespace 。但是我们在引入第三方库的时候会发现部分库没能及时的去做相关配置,这也就导致了我们会出现标题错误:
解决方法:在android/build.gradle中添加判断即可
// 修复由于高版本导致namespace检测为空的问题,没遇到可不添加
subprojects {
afterEvaluate { project ->
if (project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application')) {
println "project: ${project.name} Namespace get: ${project.android.namespace}"
def packageName = project.android.namespace ?: project.android.defaultConfig.applicationId ?: project.android.sourceSets.main.manifest.srcFile.text.find(/package="([^"]*)"/) ?: project.group
project.android.namespace = packageName
println "Namespace set to: ${packageName} for project: ${project.name}"
def manifestFile = project.android.sourceSets.main.manifest.srcFile
if (manifestFile.exists()) {
def manifestText = manifestFile.text
if (manifestText.contains('package=')) {
manifestText = manifestText.replaceAll(/package="[^"]*"/, "")
manifestFile.text = manifestText
println "Package attribute removed in AndroidManifest.xml for project: ${project.name}"
} else {
println "No package attribute found in AndroidManifest.xml for project: ${project.name}"
}
} else {
println "AndroidManifest.xml not found for project: ${project.name}"
}
}
}
}
// 修复由于高版本导致namespace检测为空的问题,没遇到可不添加
补充:如果出现如下截图错误的话可以通过配置gradle.properties文件添加这两行内容就可以了正常运行了。
android.nonTransitiveRClass=false
android.nonFinalResIds=false
注意添加完之后,第一次运行可能会报错,这个具体原因不清楚,不过不用管,接着再运行一次就可以了