最近在使用flutter打包安卓apk的時候發(fā)現(xiàn)有錯誤份氧,發(fā)現(xiàn)是使用了qr_code_scanner實現(xiàn)掃碼的錯誤丹拯。
截屏2024-11-07 09.07.41.png
仔細(xì)閱讀報錯信息發(fā)現(xiàn)有這行錯誤:flutter Namespace not specified. Specify a namespace in the module's build file监氢,查閱資料后得出結(jié)論渺氧,在使用flutterSDK 3.24之后發(fā)現(xiàn)新建項目赢底,項目默認(rèn)都是基于AGP8了挫望,由于 AGP 開始強(qiáng)制要求 namespace 配置殴蓬,不僅僅是主工程匿级,也包括第三方庫都強(qiáng)制要求 namespace 。但是我們在引入第三方庫的時候會發(fā)現(xiàn)部分庫沒能及時的去做相關(guān)配置染厅,這也就導(dǎo)致了我們會出現(xiàn)標(biāo)題錯誤:
解決方法:在android/build.gradle中添加判斷即可
// 修復(fù)由于高版本導(dǎo)致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}"
}
}
}
}
// 修復(fù)由于高版本導(dǎo)致namespace檢測為空的問題,沒遇到可不添加
補(bǔ)充:如果出現(xiàn)如下截圖錯誤的話可以通過配置gradle.properties文件添加這兩行內(nèi)容就可以了正常運行了肖粮。
android.nonTransitiveRClass=false
android.nonFinalResIds=false
注意添加完之后孤页,第一次運行可能會報錯,這個具體原因不清楚尿赚,不過不用管散庶,接著再運行一次就可以了