当使用 sourceSets 管理风味特定的 AndroidManifest.xml 配置时,下面是一个基本的代码示例

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app/
|-- src/
| |-- main/
| | |-- AndroidManifest.xml (包含公用配置)
| | |-- java/
| | |-- res/
| |
| |-- xiaomi/
| | |-- AndroidManifest.xml (风味特定配置)
| |
| |-- other/
| | |-- AndroidManifest.xml (风味特定配置)
| |
| |-- ...

app/build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
android {
// ... 其他配置 ...

sourceSets {
xiaomi {
// 指定风味特定的 AndroidManifest.xml 文件
manifest.srcFile 'src/xiaomi/AndroidManifest.xml'
}

other {
// 指定另一个风味特定的 AndroidManifest.xml 文件
manifest.srcFile 'src/other/AndroidManifest.xml'
}
}
}

src/main/AndroidManifest.xml(公用配置)

1
2
3
4
5
6
7
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">

<!-- 公用配置项 -->
<!-- ... -->

</manifest>

src/xiaomi/AndroidManifest.xml(风味特定配置)

1
2
3
4
5
6
7
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">

<!-- 风味特定配置项 -->
<!-- ... -->

</manifest>

src/other/AndroidManifest.xml(另一个风味特定配置)

1
2
3
4
5
6
7
8
xmlCopy code
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">

<!-- 另一个风味特定配置项 -->
<!-- ... -->

</manifest>

在这个示例中,我们在 sourceSets 中分别为 xiaomiother 风味指定了不同的 AndroidManifest.xml 文件。每个风味的配置将会覆盖默认的 main 文件夹下的 AndroidManifest.xml 文件中相应的部分。

通过这种方式,可以灵活地管理不同风味的配置,并确保风味特定的配置能够正确地被应用,同时保留公用的配置。可以实际需求进行相应的调整和定制。

总结

sourceSets 中使用 manifest.srcFile 可以将风味特定的 AndroidManifest.xml 文件替换默认的清单文件。

如果在指定的风味特定清单文件中未定义的部分,将会从 main 文件夹下的默认 AndroidManifest.xml 文件进行合并。

针对风味特定的配置,将配置放在 xiaomiother 文件夹下的风味特定 AndroidManifest.xml 文件中。

对于公用配置,保留在 main 文件夹下的默认 AndroidManifest.xml 文件中。

再说一下 sourceSets的常用配置,具体看下面代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
android {
...

productFlavors {
xiaomi {
// xiaomi的配置
}
other {
// other的配置
}
// 更多风味...
}

sourceSets {
xiaomi {
// 这里指定xiaomi的源代码和资源路径
java.srcDirs = ['src/xiaomi/java']
res.srcDirs = ['src/xiaomi/res']
assets.srcDirs = ['src/xiaomi/assets']
manifest.srcFile 'src/xiaomi/AndroidManifest.xml'
}
other {
// 这里指定other的源代码和资源路径
java.srcDirs = ['src/xiaomi/java']
res.srcDirs = ['src/other/res']
assets.srcDirs = ['src/other/assets']
manifest.srcFile 'src/other/AndroidManifest.xml'
}
// 更多风味...
}
}