依赖于另一个库的Android AAR库

5

你好,我有一个Android Library项目,它生成了一个AAR文件。

一切都很好,但是当我在另一个项目中使用这个AAR时,我会遇到这个错误:

java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso

生成AAR时,AAR使用了Picasso,是否可以同时导出AAR的依赖项?

你在其他项目中如何使用AAR? - CommonsWare
像这样:repositories { flatDir { dirs 'libs' } mavenCentral() }然后使用通常的groupId格式将它们包含进来。 - redDragonzz
这应该是期望的行为吧:https://groups.google.com/forum/#!topic/adt-dev/0ZAP8AVUZVw!我想我必须下载picasso jar,然后gradle会自动包含它,否则就不会。我会尝试一下并发布答案。 - redDragonzz
我从未使用过 flatDir。我将我的 AAR 发布到本地 Maven 仓库,并从那里解析依赖项,没有任何问题。 - CommonsWare
使用JAR文件而不是Maven依赖项可以正常运行。我猜想问题在于您不能混合使用flatDir和纯远程依赖项。那么如何设置本地Maven仓库呢? - redDragonzz
1个回答

6
如何设置本地maven仓库?
警告:以下步骤可行,但可能需要改进,因为我远非Maven专家。去年,我为我的CWAC库使用了这种方法。
第1步:在库项目的build.gradle文件的buildscript dependencies块中添加“classpath 'com.github.dcendents:android-maven-plugin:1.0'”。还要添加version和group语句,以提供有关AAR的信息。
第2步:使用“gradle install”编译AAR并将其安装到默认的本地Maven存储库中。
第3步:通常情况下,您会将“mavenLocal()”添加到应用程序项目的dependencies块中,以通过其artifact ID获取AAR。尽管它曾经失效过,但现在可能又可以使用了。或者,可以使用“maven { url "${System.env.HOME}/.m2/repository" }”作为短期解决方案。
例如,您的库项目build.gradle文件可能包含:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

apply plugin: 'android-library'
apply plugin: 'android-maven'

version '0.4.0'
group 'some.likely.group.name.goes.here'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.squareup.picasso:picasso:2.2.0'
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
  // as normal
}

您可以使用 gradle install 命令将 JAR 发布到本地 Maven 仓库。然后,在您的应用程序项目的 build.gradle 文件中就会有以下内容:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

apply plugin: 'android'

repositories {
    mavenCentral()
    maven { url "${System.env.HOME}/.m2/repository" } // mavenLocal()
}

dependencies {
    compile 'some.likely.group.name.goes.here:name-of-library:0.4.0'
}

android {
    // as normal
}

替换以下内容:

  • some.likely.group.name.goes.here替换为特定的名称

  • 0.4.0替换为符合X.Y.Z格式的版本号

  • name-of-library是包含Android库项目的目录名(例如:presentationfoo


需要注意的一件重要事情是,对于仍在使用此方法的任何人:此方法已更新以适用于较新版本的gradle。请参考新的GitHub链接:https://github.com/dcendents/android-maven-gradle-plugin,并确保通过按照此处的说明更改`gradle-wrapper.properties`来至少使用2.4版gradle:http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0 - anddev84
请问如何使用 gradle install?我在Windows上安装了Java的gradle,并尝试运行 gradle install,但是出现了以下错误:Task 'install' not found in root project 'bin'. - William Kinaan
@WilliamKinaan:这个答案已经有2.5年了。我建议找一个更新的解决方案。 - CommonsWare
@CommonsWare 这很有道理,但我一直在阅读关于Gradle的内容,我只是想知道,仅供个人使用,如何应用gradle install。 - William Kinaan
@WilliamKinaan:你可能缺少引用的插件,或者这个插件在过去的2.5年里发生了变化。我不再使用那个插件了,因为标准的maven插件及其uploadArchives任务可以很好地与现代版本的Android Studio/Android Plugin for Gradle配合使用。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接