Android Studio如何从多个库项目中打包单个AAR?

时间:2013-12-20 09:43:13

标签: android gradle android-studio android-gradle

我正在构建android库项目,它依赖于另一个内部库项目。

我想知道是否有办法打包单个AAR库,其中已包含内部库。我想只向我的应用程序开发人员分享一个AAR库包。

这是我的build.gradle文件当前的外观,但目前它们生成单独的AAR文件,并且两者都需要包含在Application的build.gradle中。由于应用程序是由另一家公司构建的,我们需要与它们共享最终的AAR文件,而不是完整的库项目。

----- internalLib -------->>>>>>>>>>>

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion '18.1.1'
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

----- externalLib --------

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion '18.1.1'
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile project(':internalLib')
}

4 个答案:

答案 0 :(得分:32)

没有组合库的机制。这有点复杂,因为您可能想要控制哪些依赖项被合并(例如,您可能不希望在那里包含support-v4)。此外,您还需要合并资源和Android清单。

此时除非您确定资源在两个res文件夹之间没有冲突(例如,您可以在一个lib中使用strings_a.xml而在另一个lib中使用strings_b.xml),否则无法轻易入侵某些内容。这样你就可以通过将两个res文件夹复制到同一个位置来“合并”它们(而不是在android res级别进行合并)。

对于Manifest,它会更复杂,但可以使用一些自定义代码。

为此提供内置机制对我们的优先级非常低,所以不要指望它很快。

答案 1 :(得分:0)

为了方便起见,您必须分别在maven上上传每个库,并在父库模块中使用它的实现,直到主库模块为止。只有这样,当您在maven上发布主库时,才会包括所有子依赖项。

答案 2 :(得分:0)

就我们只有一个选项而言,在模块内添加 aar 作为 api 依赖项。 为此,我们必须生成 aar 文件并将其发布到 Maven 并使其可被另一个模块访问并在应用程序中使用它。

https://developer.android.com/studio/projects/android-library

正如上面提到的android开发者文档。

<块引用>

带有源代码的库模块被复制到您的项目中,因此您可以实际编辑库代码。如果您想维护单一版本的库代码,那么这可能不是您想要的,您应该添加上述已编译的 AAR 文件。

如果还有什么我们可以做的,请在命令部分写下来告诉我们。

答案 3 :(得分:0)

不支持

不建议将一个库包含到另一个库中,因为这会导致管理版本的严重问题以及创建和支持此类解决方案的复杂性。

您应该坚持使用依赖管理器等原生方法或重新构建您的代码库

[iOS Umbrella framework]