Bootstrap

处理namespace问题:Namespace not specified for AGP 8.0.0

  1. How do I fix ‘namespace not specified’ error in Android Studio?

  2. Namespace not specified for AGP 8.0.0

解决方案

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bertking.basecomponent">. // 将此处的包名删除掉
</manifest>

将这里的package在build.gradle文件中展示:

	android {
		...
	    namespace "com.bertking.basecomponent" //将AndroidManifest.xml 中的package添加到这里
    	...
	 }
#!/bin/bash


# 检查是否提供了项目根目录
if [ "$#" -ne 1 ]; then
    echo "用法: \$0 <项目根目录>"
    exit 1
fi


# 指定要搜索的根目录
SEARCH_DIR=$1


# 搜索所有 AndroidManifest.xml 文件
find "$SEARCH_DIR" -type f -name "AndroidManifest.xml" | while read -r MANIFEST_FILE; do
  # 从 AndroidManifest.xml 中提取 package 属性
  PACKAGE_NAME=$(sed -n 's/.*package="\([^"]*\)".*/\1/p' "$MANIFEST_FILE")

  # 删除 package 属性并确保标签正确闭合
  perl -i -0777 -pe 's/(<manifest[^>]*?)\s+package="[^"]*"(.*?>)/\1\2/s' "$MANIFEST_FILE"

  # 检查提取的 package name 是否为空
  if [ -z "$PACKAGE_NAME" ]; then
    echo "Warning: Failed to extract package name from $MANIFEST_FILE"
    continue
  fi

  # 尝试在 AndroidManifest.xml 的上级目录中找到 build.gradle 文件
  CURRENT_DIR=$(dirname "$MANIFEST_FILE")
  BUILD_GRADLE_FILE=""

  while [ "$CURRENT_DIR" != "/" ]; do
    if [ -f "$CURRENT_DIR/build.gradle" ]; then
      BUILD_GRADLE_FILE="$CURRENT_DIR/build.gradle"
      break
    fi
    CURRENT_DIR=$(dirname "$CURRENT_DIR")
  done

  if [ -z "$BUILD_GRADLE_FILE" ]; then
    echo "Warning: build.gradle not found for $MANIFEST_FILE"
    continue
  fi

  # 在 build.gradle 中设置 namespace 属性
  if grep -q "namespace " "$BUILD_GRADLE_FILE"; then
    # 更新现有的 namespace 属性
    sed -i "s/namespace .*/namespace '$PACKAGE_NAME'/" "$BUILD_GRADLE_FILE"
  else
    # 在 android 块中添加 namespace 属性
    perl -i -pe '
      if (/android \{/) {
          $_ .= "    namespace \"'"$PACKAGE_NAME"'\"\n";
      }' "$BUILD_GRADLE_FILE"
  fi

  echo "Namespace set to '$PACKAGE_NAME' in $BUILD_GRADLE_FILE"

  # 检查是否有写权限
  if [ ! -w "$BUILD_GRADLE_FILE" ]; then
    echo "Warning: You do not have write permission for $BUILD_GRADLE_FILE."

    # 尝试使用 sudo 修改权限
    echo "Attempting to change permissions with sudo..."
    sudo chmod +w "$BUILD_GRADLE_FILE"
  fi
done

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;