# 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
- **下载地址**:https://adoptium.net/temurin/releases/?version=11
- 选择 JDK 11 (LTS) for Windows x64
- 安装到默认位置或自定义路径
#### 2. 设置 JAVA_HOME 环境变量
```powershell
# 打开环境变量设置
# 系统属性 → 高级 → 环境变量
# 添加或修改:
JAVA_HOME = C:\Program Files\Eclipse Adoptium\jdk-11.0.xx-hotspot
# 更新 Path,添加:
%JAVA_HOME%\bin
```
#### 3. 验证 Java 版本
```bash
java -version
# 应该显示:openjdk version "11.0.xx"
```
#### 4. 重新编译
```bash
.\gradlew clean assembleApp_bbengDebug
```
#### 5. 使用的配置
`build.gradle`(根目录):
```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`:
```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`(根目录)
```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`
```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
...
```
### 4. 移除模块中的重复声明
`myLockView/src/main/AndroidManifest.xml`:
```xml
```
---
## 🚀 快速修复命令(方案 B)
如果你现在无法安装 Java 11,执行以下修改:
```bash
# 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
- 移除所有 `` 内容(避免重复)
---
## ⚠️ 重要说明
### 方案 A(Java 11)的优势
- ✅ 使用现代化的 AGP 版本
- ✅ 支持 `namespace`(更好的模块化)
- ✅ 更好的编译性能
- ✅ 更多新特性支持
- ✅ 官方推荐
### 方案 B(Java 8)的劣势
- ⚠️ AGP 4.2.2 已经很旧(2021年)
- ⚠️ 不支持最新的 Android API
- ⚠️ 很多新特性无法使用
- ⚠️ 未来可能有兼容性问题
---
## 🎯 当前状态
我已经按照**方案 B**(Java 8 兼容)修改了你的配置。
现在请尝试编译:
```bash
.\gradlew clean
.\gradlew assembleApp_bbengDebug
```
如果还有错误,请提供完整的错误信息。
---
## 💡 最终建议
**强烈建议升级到 Java 11!**
这样做的好处:
1. 一次性解决所有问题
2. 获得更好的开发体验
3. 未来兼容性更好
4. 编译速度更快
安装 Java 11 只需要 5 分钟,但能节省大量后续的配置时间。
---
**创建时间**:2026-01-22
**适用场景**:Manifest merger 错误、Java 版本问题