我们建立了一个库,分发给我们的客户。我们分发原始的aar文件供他们使用。我们还使用GitHub的原始access 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的清单...
有人做过这样的事吗?在安卓之外,这将被称为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 ..。
发布于 2017-05-03 05:41:59
我只是不鼓励让android库依赖于另一个android库。在output aar (参见:https://stackoverflow.com/a/20715155/2707179)中没有对捆绑android库的官方支持,我认为在可预见的未来也不会出现。
因此,目前最简单的做法是将所有与android相关的东西放在一个模块中,而将其他模块保持为纯java。
捆绑普通java模块非常容易(只需将输出类或输出jar复制到gradle中的android库中),但android模块要难得多。在某种程度上,有一个很好的gradle script https://github.com/adwiv/android-fat-aar。不幸的是,它不再维护,也不能与最新的android gradle插件一起工作。android插件中的变化没有很好的文档记录,所以创建(和维护)你自己的自定义插件/脚本将是非常痛苦的。
我真的不理解Android团队不允许将一个android库嵌入到另一个库中的理由(除了“它很复杂”),但在目前的情况下,将所有android内容放在一个模块中要容易得多。
当然,模块化你的项目是一个好主意。我真的试图保持独立的模块,但在某种程度上,我不得不放弃,所有这些变通方法都不值得。
发布于 2017-02-27 14:14:51
https://stackoverflow.com/questions/28605367
复制相似问题