Open isitcrazythough opened 10 months ago
Took a look at the code and it seems to be fixed in develop. Is there a reason why it's not published already, considering that the package did not receive an update for 2 years?
Guess I'll leave it open until we get an update, considering it's quite critical.
How can I get around this error while there are no fixes?
I worked around this by forcing the correct namespace for all my dependencies by specifying this in android/build.gradle
subprojects {
beforeEvaluate {
project ->
if (project.hasProperty("android")) {
android {
def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
if (namespace == null && agpVersion >= 7) {
namespace project.group
}
}
}
}
}
@jdnichollsc, could you publish a new release? I see that the fix for this has already been merged, and react-native 0.73 is unusable without the fix or a workaround.
any updates?
I do the namespace in the buil.gradle of the app. Just do:
namespace = "com.proyecto26.inappbrowser"
And remove the line package="com.proyecto26.inappbrowser"
in the AndroidManifest
For me the solution it was a script before the compile to set the namespace in build.gradle and remove the package attribute from AndroidManifest.xml.
Here's the script:
allprojects {
repositories {
maven {
// https://wix.github.io/Detox/docs/introduction/project-setup
url("$rootDir/../node_modules/detox/Detox-android")
}
}
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null || namespace.isEmpty()) {
def defaultNamespace = project.group.toString().replace('.', '_')
namespace = defaultNamespace
}
buildFeatures {
buildConfig = true
}
}
// Task to ensure namespace and remove package attribute
project.tasks.register("fixManifestsAndNamespace") {
doLast {
// Ensure namespace in build.gradle
def buildGradleFile = file("${project.projectDir}/build.gradle")
if (buildGradleFile.exists()) {
def buildGradleContent = buildGradleFile.getText('UTF-8')
def manifestFile = file("${project.projectDir}/src/main/AndroidManifest.xml")
if (manifestFile.exists()) {
def manifestContent = manifestFile.getText('UTF-8')
def packageName = manifestContent.find(/package="([^"]+)"/) { match, p -> p }
if (packageName && !buildGradleContent.contains("namespace")) {
println "Setting namespace in ${buildGradleFile}"
buildGradleContent = buildGradleContent.replaceFirst(
/android\s*\{/, "android {\n namespace '${packageName}'"
)
buildGradleFile.write(buildGradleContent, 'UTF-8')
}
}
}
// Remove package attribute from AndroidManifest.xml
def manifests = fileTree(dir: project.projectDir, includes: ['**/AndroidManifest.xml'])
manifests.each { File manifestFile ->
def manifestContent = manifestFile.getText('UTF-8')
if (manifestContent.contains('package=')) {
println "Removing package attribute from ${manifestFile}"
manifestContent = manifestContent.replaceAll(/package="[^"]*"/, '')
manifestFile.write(manifestContent, 'UTF-8')
}
}
}
}
// Ensure the task runs before the build process
project.tasks.matching { it.name.startsWith("preBuild") }.all {
dependsOn project.tasks.named("fixManifestsAndNamespace")
}
}
}
}
}
@SabriGhazali thank you so much for sharing, the subproject
did it work for me!
thanks ,works for me too
@SabriGhazali's solution works but in my case it is important to put the allprojects
block at the top with buildscript
coming afterwards. Otherwise, the following error appears:
Cannot run Project.afterEvaluate(Closure) when the project is already evaluated.
t.projectDir}/build.gradle") if (buildGradleFile.exists()) { def buildGradleContent = buildGradleFile.getText('UTF-8') def manifestFile = file("${project.projectDir}/src/main/AndroidManifest.xml") if (manifestFile.exists()) { def manifestContent = manifestFile.getText('UTF-8') def packageName = manifestContent.find(/packa
This looks like what I've spent all day looking for! I assume it will work for Manifests in older, unsupported libraries that are declared in the pubspec?
Which platform(s) does your issue occur on?
Android
Please, provide the following version numbers that your issue occurs with:
Please, tell us how to recreate the issue in as much detail as possible.
Compiling react native android version is impossible due to the following error:
Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported. Recommendation: remove package="com.proyecto26.inappbrowser" from the source AndroidManifest.xml.
Reproduce by having the specified react native and gradle versions and trying to run the app with the inappbrowser module. It seems that specifying the package in the android manifest instead of a build file is deprecated, so compiling apps with newer react native versions is impossible.