Android库项目瞬态依赖松散AAR类型

时间:2014-09-24 20:39:52

标签: android maven android-gradle android-build

我正在开展一个包含两个Android库项目的项目。当我将这些库上传到我的Maven仓库(Nexus)时,生成的pom在依赖项中不包含<type>aar</type>元素。

这是我的依赖树

* App1
 \
  * lib1
  |\
  | * lib2
  * Other libs

您可以在此图表中看到我的app取决于lib1,这取决于lib2。这两个库都是Android库项目,因此是AAR。

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&#39;优秀的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>元素。

在我的app项目(这是一个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的依赖列表中生成<type>aar</type>,因此maven默认为查找jar。

有没有人知道如何使用Gradle构建包含瞬态依赖关系的Android库项目?

2 个答案:

答案 0 :(得分:0)

只需使用任何文本编辑器将aar添加到pom即可。之后,打开一个控制台进入项目的根目录(pom所在的位置)并运行&#34; mvn clean install&#34;。将生成aar工件并将其部署到您的maven仓库。

无论如何,使用Maven创建aar库要容易得多。只需使用任何Android库原型创建一个Maven项目(de.akquinet非常好,但你必须使用3.8.2和3.9之间的插件版本,http://mvnrepository.com/artifact/de.akquinet.android.archetypes)。只需创建项目,添加库然后运行命令&#34; mvn clean install&#34;将它们安装到本地maven目录中。之后,只需将它们用作普通的aar依赖项。

答案 1 :(得分:0)

尝试gradle-fury。它修复了所有这些...呃...东西。特别是由gradle生成的无效和/或不准确的pom。确认工作解决方案发布到sonatype oss / maven中心。没有手动pom编辑,pgp签名支持等等。

网站:https://github.com/gradle-fury/gradle-fury

具体来说,您需要maven-support gradle脚本,它可以为您完成所有工作。通常在pom中的所有内容都存储在gradle.properties中。支持android变种,war文件,(很快修复distZip),javadocs和源jar等等。

免责声明,我正在努力

编辑:再多一点信息。尽管愤怒确实为AAR库注入了依赖关系和正确的输入,但gradle-android插件(谷歌制作的东西)并不尊重依赖部分并忽略它。基本上,AAR项目的传递依赖性是不受支持的。不知道为什么