修复_Manifest_错误指南.md 5.8 KB

Manifest Merger 错误修复指南

🔍 问题分析

你遇到的问题有两个层面:

1. Java 版本问题(主要问题)

  • 当前:使用 Java 8
  • 需要:Android Gradle Plugin 7.0+ 需要 Java 11+
  • 影响:无法使用现代化的 AGP 版本

2. Manifest Merger 问题

  • namespace 不一致导致合并冲突
  • android:allowBackup 属性冲突
  • 模块重复声明 Receiver

✅ 推荐解决方案:升级到 Java 11

方案 A:使用 Java 11(推荐)⭐⭐⭐⭐⭐

1. 下载并安装 Java 11

2. 设置 JAVA_HOME 环境变量

# 打开环境变量设置
# 系统属性 → 高级 → 环境变量

# 添加或修改:
JAVA_HOME = C:\Program Files\Eclipse Adoptium\jdk-11.0.xx-hotspot

# 更新 Path,添加:
%JAVA_HOME%\bin

3. 验证 Java 版本

java -version
# 应该显示:openjdk version "11.0.xx"

4. 重新编译

.\gradlew clean assembleApp_bbengDebug

5. 使用的配置

build.gradle(根目录):

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'  // 推荐版本
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10'
    }
}

app/build.gradle

android {
    compileSdkVersion 33
    buildToolsVersion '33.0.0'
    
    namespace 'com.YuyeTech.HeartRate'  // ← 支持 namespace
    
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 32
        // ...
    }
}

🔧 方案 B:继续使用 Java 8(不推荐)

如果你坚持使用 Java 8,需要使用旧版本的 AGP:

1. 修改 build.gradle(根目录)

buildscript {
    repositories {
        google()
        // jcenter()  // ← 移除,已废弃
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        mavenCentral()  // ← 添加
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.2'  // Java 8 最后支持版本
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21'
    }
}

allprojects {
    repositories {
        google()
        // jcenter()  // ← 移除
        maven { url = uri("https://jitpack.io") }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        mavenCentral()  // ← 添加
    }
}

2. 修改 app/build.gradle

android {
    compileSdkVersion 30  // AGP 4.2.2 最高支持 30
    buildToolsVersion '30.0.3'

    // ❌ 不支持 namespace,必须在 AndroidManifest.xml 中使用 package
    
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30  // 也需要降低
        applicationId "com.YuyeTech.HeartRate"
        // ...
    }
}

3. 修改 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.YuyeTech.HeartRate">  <!-- ← 必须添加 package -->

    <application
        android:name="com.YuyeTech.HeartRate.MyApplication"
        android:allowBackup="true"
        android:allowClearUserData="true"
        tools:replace="android:allowBackup,android:allowClearUserData">
        ...
    </application>
</manifest>

4. 移除模块中的重复声明

myLockView/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 所有 receiver 和 service 都在主 app 的 Manifest 中声明 -->
</manifest>

🚀 快速修复命令(方案 B)

如果你现在无法安装 Java 11,执行以下修改:

# 1. 备份当前文件(可选)
# 2. 我已经帮你修改了以下文件:
#    - build.gradle
#    - app/build.gradle
#    - app/src/main/AndroidManifest.xml
#    - myLockView/src/main/AndroidManifest.xml

# 3. 清理并编译
.\gradlew clean assembleApp_bbengDebug

📝 已修改的文件总结

✅ build.gradle(根目录)

  • AGP 版本:4.2.2(Java 8 兼容)
  • Kotlin 版本:1.8.10

✅ app/build.gradle

  • 移除 namespace
  • compileSdkVersion 保持 33

✅ app/src/main/AndroidManifest.xml

  • 添加 package="com.YuyeTech.HeartRate"
  • 添加 android:allowBackup="true"
  • 添加 tools:replace="android:allowBackup"

✅ myLockView/src/main/AndroidManifest.xml

  • 移除所有 <application> 内容(避免重复)

⚠️ 重要说明

方案 A(Java 11)的优势

  • ✅ 使用现代化的 AGP 版本
  • ✅ 支持 namespace(更好的模块化)
  • ✅ 更好的编译性能
  • ✅ 更多新特性支持
  • ✅ 官方推荐

方案 B(Java 8)的劣势

  • ⚠️ AGP 4.2.2 已经很旧(2021年)
  • ⚠️ 不支持最新的 Android API
  • ⚠️ 很多新特性无法使用
  • ⚠️ 未来可能有兼容性问题

🎯 当前状态

我已经按照方案 B(Java 8 兼容)修改了你的配置。

现在请尝试编译:

.\gradlew clean
.\gradlew assembleApp_bbengDebug

如果还有错误,请提供完整的错误信息。


💡 最终建议

强烈建议升级到 Java 11!

这样做的好处:

  1. 一次性解决所有问题
  2. 获得更好的开发体验
  3. 未来兼容性更好
  4. 编译速度更快

安装 Java 11 只需要 5 分钟,但能节省大量后续的配置时间。


创建时间:2026-01-22
适用场景:Manifest merger 错误、Java 版本问题