我们如何通过组合不同的模块来创建单个库?

时间:2017-03-09 04:55:11

标签: android gradle dependencies aar

我想从我的项目构建一个单独的库,该项目使用许多依赖项和资源。如果将cardview作为jar导入,它将没有资源,但是当它被添加为aar时,它会被添加为另一个模块。所以我无法将它组合成一个单独的aar库。我不想将我的项目提交到存储库。我如何建立图书馆,提前谢谢!

3 个答案:

答案 0 :(得分:0)

android-fat-aar应该为您解决此问题。

你必须

apply from: 'fat-aar.gradle'

从GitHub存储库中,然后用嵌入式依赖项替换编译依赖项。因此,不要将模块otherModule依赖关系定义为

dependencies {
    compile project(':otherModule')
}

您只需要将其定义为

dependencies {
    embedded project(':otherModule')
}

编译配置取决于嵌入式配置,因此您可以像以前一样在本地拥有相同的行为。

但最终这是一个有问题的配置,特别是如果你想使用一些Android支持库。您最有可能遇到重复问题。

如果您要为离线工作创建此设置,最好考虑使用Local Maven repository

repositories {
    mavenLocal()
}

包含您需要使用的库工件的副本。或者甚至可以为自己和需要它的任何人提供个人管理的存储库。

答案 1 :(得分:0)

您是否知道可以将模块用作库(来源,不编译AAR)?这意味着您的库项目可以使用所有gradle依赖项。下面是一个名为“MyApiLibrary”的库项目示例,它将是一个名为“api”的独立模块

首先将您的库创建为一个新项目(此示例的模块名称为“api”,但名称可以是您喜欢的任何名称)。 在该库模块的gradle文件中,使用库插件,您通常会使用应用程序插件

apply plugin: 'com.android.library' //not apply plugin: 'com.android.application'

另外,请确保库模块未在其gradle文件的applicationId中声明defaultConfig。然后像往常一样声明所有库依赖项。

然后在您的消费项目中,通过在 settings.gradle 中包含以下内容来导入库:

//this first line declares a pseudonym to refer to the library module
include ':api'
//this second line explains where the pseudonym links to 
//(the path to the module directory of the library project, relative to the root dir of the current project)
project(':api').projectDir = new File('../MyApiLibrary/api/')

在您的消费模块的gradle文件中,将项目作为依赖项引用:

dependencies {
    ...
    compile project(':api')
}

现在,主项目中的所有内容都可以访问Library项目的所有类和导入的依赖项

答案 2 :(得分:0)

如果我做对了,你有一个多模块项目,它有几个库项目,你想编译一个包含你的模块及其依赖项的aar。如果是这样的话:

- 安装maven。 - 将gradle maven插件(https://github.com/dcendents/android-maven-gradle-plugin)应用于您的模块。使用安装任务将模块安装为单个库。

- 创建一个新模块,该模块导入单个库的所有已安装版本及其依赖项。将android shade插件(https://github.com/zawn/android-shade-plugin,文档:http://imperceptiblethoughts.com/shadow/)应用于此模块。它的输出将是一个uber-aar,并且包含您的库模块及其依赖项。您可以将其安装到本地maven实例中,或将aar放入应用程序的libs目录中。