首页 > 解决方案 > Android项目如何使用/合并多个AndroidManifest.xml

问题描述

我想将我的项目拆分为多个sourceSets,所以我想使用多个AndroidManifest.xml 来声明当前sourceSets 的组件,util build apk 合并主AndroidManifest.xml,但是只支持一个主AndroidManifest.xml 设置,所以我该怎么做它?

为什么我要使用多个源集?因为如果使用多个模块,它的编译速度会很慢。

这是我的项目设置

  def moduleDirs = project.projectDir.listFiles()
            .findAll {
        def name = it.name
        // filter all inner's module
        it.isDirectory() && msExtension.modulePrefix.any { name.startsWith(it) }
    }

    Set<File> manifestSet = new HashSet<>()

    Set<String> modules = new HashSet<>()
    def sourceSetConf = { AndroidSourceSet sourceSet ->
        moduleDirs.each {
            def moduleName = it.name
            def dir = sourceSet.name
            sourceSet.assets.srcDirs "${moduleName}/src/${dir}/assets"
            sourceSet.java.srcDirs "${moduleName}/src/${dir}/java"
            sourceSet.res.srcDirs "${moduleName}/src/${dir}/res"
            sourceSet.aidl.srcDirs "${moduleName}/src/${dir}/aidl"

            // each AndroidManifest.xml
            def manifestFile = project.file("${moduleName}/AndroidManifest.xml")
            if (manifestFile != null && manifestFile.exists()) {
                manifestSet.add(manifestFile)
            }

            modules.add(moduleName)
        }
    }

    // for default main sources
    sourceSetConf(android.sourceSets.main)

    // for buildType sources
    android.buildTypes.each {
        def buildType = it.name
        android.sourceSets.getByName(buildType) {
            sourceSetConf(it)
        }
    }

    // for flavor sources
    android.productFlavors.each {
        def flavor = it.name
        android.sourceSets.getByName(flavor) {
            sourceSetConf(it)
        }
    }

我从 gradle 中看到了多个模块合并的一些代码,但仍然不知道如何

ManifestMerger2
ProcessManifest

标签: androidgradle

解决方案


通过 Android Studio 使用多个模块。创建模块之间的依赖关系。要ModuleA依赖于,ModuleB请将以下内容放入build.gradleModuleA

dependencies {
  // ...
  compile project(':ModuleB')
  // ...
}

AndroiManifest.xml这应该在构建时从两个模块合并ModuleA


推荐阅读