提问人:rharter 提问时间:9/25/2014 更新时间:10/22/2016 访问量:839
Android 库项目瞬态依赖松散 AAR 类型
Android library project transient dependencies loose AAR type
问:
我正在做一个项目,其中包括两个 Android 库项目。当我将这些库上传到我的 Maven 存储库 (Nexus) 时,生成的 pom 不包含依赖项中的元素。<type>aar</type>
这是我的依赖关系树
* App1
\
* lib1
|\
| * lib2
* Other libs
在这张图中你可以看到,my 依赖于 ,它依赖于 。这两个库都是 Android 库项目,因此是 AAR。app
lib1
lib2
lib1/build.gradle
apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
provided project(':lib2')
compile 'com.squareup.picasso:picasso:2.3.3'
}
lib2/build.gradle
apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion 19
versionCode 1
versionName '1.0'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.squareup.retrofit:retrofit:1.6.1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
compile 'com.squareup.okhttp:okhttp:2.0.0'
}
请注意如何包含作为依赖项。Lib1
Lib2
project()
现在,当我使用 Chris Banes 出色的 gradle-mvn-push 插件部署它时,一切都按预期工作。在生成的 pom.xml 中,我只注意到一个奇怪的地方。
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>lib2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
...
</dependencies>
请注意,mavenDeployer 插件在生成 pom 时遗漏了依赖项中的元素。<type>aar</type>
在我的应用程序项目(这是一个 maven 项目)中,我列出了以下依赖项:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>lib1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>aar</type>
</dependency>
...
</dependencies>
尝试使用 Maven 构建它时,出现以下错误。
Could not resolve dependencies for project com.example:app:apk:1.0.0-SNAPSHOT: The following artifacts could not be resolved: com.example:lib2:jar:0.0.1-SNAPSHOT
请注意它如何查找库的 jar 版本。我相信,由于 mavenDeployer 插件不是在生成的 pom 的依赖项列表中生成的,因此 maven 默认寻找 jar。<type>aar</type>
有谁知道如何构建包含 Gradle 瞬态依赖项的 Android 库项目?
答:
只需使用任何文本编辑器将 aar 添加到 pom 中即可。之后,在项目的根目录(pom 所在的位置)中打开控制台并运行“mvn clean install”。将生成 aar 项目并将其部署到 maven 存储库。
无论如何,使用 Maven 创建 aar 库要容易得多。只需使用任何 android 库原型创建一个 Maven 项目(de.akquinet 的非常好,但您必须使用 3.8.2 和 3.9 之间的插件版本,http://mvnrepository.com/artifact/de.akquinet.android.archetypes)。只需创建项目,添加库,然后运行命令“mvn clean install”即可将它们安装到本地 maven 目录中。之后,只需将它们用作普通的 aar 依赖项即可。
评论
试试gradle-fury。它解决了这一切......呃......东西。特别是 gradle 生成的无效和/或不准确的 pom。已确认发布到 sonatype oss/maven central 的工作解决方案。无需手动 pom 编辑、pgp 签名支持等等。
站点: https://github.com/gradle-fury/gradle-fury
具体来说,您需要 maven-support gradle 脚本来为您完成所有工作。通常在 pom 中的所有内容都存储在 gradle.properties 中。也支持 android 变体、war 文件(即将修复 distZip)、javadocs 和源 jar 等。
免责声明,我正在努力
编辑:另一个花絮信息。尽管 fury 确实为 AAR 库注入了依赖项和正确键入,但 gradle-android 插件(谷歌制作的东西)不尊重依赖项部分并忽略它。基本上不支持 AAR 项目的可传递依赖项。不知道为什么
评论