解决方案
<?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