【发布时间】:2015-02-19 11:37:12
【问题描述】:
我们构建了一个库,然后分发给我们的客户。我们分发原始 aar 文件供他们使用。我们还使用 GitHub 的原始访问 API 来提供一个 Maven 存储库。
现在为了保持整洁,我们将库分成几个模块:
include ':library'
include ':geohash'
include ':networkstate'
include ':okvolley'
include ':volley'
library 是一个 Android 库,volley 和 okvolley 和 networkstate 也是。
现在当我发布 library 时,依赖关系树如下所示:
\--- com.sensorberg.sdk:sensorberg-sdk:0.10.0-SNAPSHOT
+--- com.squareup.okhttp:okhttp-urlconnection:2.2.0
| \--- com.squareup.okhttp:okhttp:2.2.0
| \--- com.squareup.okio:okio:1.2.0
+--- com.google.code.gson:gson:2.3.1
+--- android-sdk:okvolley:unspecified
| +--- com.squareup.okhttp:okhttp-urlconnection:2.2.0 (*)
| +--- com.google.code.gson:gson:2.3.1
| +--- android-near-gradle:volley:unspecified
| \--- com.squareup.okhttp:okhttp:2.2.0 (*)
+--- android-sdk:networkstate:unspecified
+--- com.squareup.okhttp:okhttp:2.2.0 (*)
+--- android-sdk:volley:unspecified
\--- com.loopj.android:android-async-http:1.4.5
如您所见,android-sdk:networkstate:unspecified 和 android-sdk:okvolley:unspecified 出现在外部依赖项列表中。
我想创建我的library aar 并捆绑本地模块。它应该做一个本地清单合并和远 jar ......并合并所有模块的依赖关系。应该只显示外部模块。
我确实尝试从各个模块的 build/output/aar 文件夹中引用本地 aar 文件,但这似乎也不起作用。它似乎仍然通过名称引用本地模块,而不是合并 jar 的清单......
有人做过这样的事吗?在 Android 之外,这将被称为 fatjar,并且有像 musketyr/gradle-fatjar-plugin 这样的插件可以使用 Gradle 生成 fatjar。
我在本地模块上试过这个
if (project.ext.libraryBuild == true) {
def moduleName = getName()
File artifactFile = file("/build/outputs/aar/${moduleName}-release.aar")
if (!artifactFile.exists()) {
throw new GradleException("Dependency ${moduleName} is not build")
}
configurations.create("default")
artifacts.add("default", artifactFile)
return;
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 19
buildToolsVersion = '21.1.2'
}
直接引用 aar...
【问题讨论】:
-
创建一个包含所有依赖项的 aar,合并清单、资源、类文件。
-
@mins 不。 aar 是从 gradle 创建的。当然,您可以从 UI 触发相同的过程。我想更改类型或 aar。
-
也许 zip 包含 aar 和 jars?正如我从今天的谈话中了解到的那样,人们根本不想使用 gradle,或者 gradle 但没有适当的依赖关系?
-
您找到解决方案了吗?
标签: android gradle android-library