【问题标题】:Android Library AAR depending on another libraryAndroid 库 AAR 依赖于另一个库
【发布时间】:2014-05-27 09:25:03
【问题描述】:

您好,我有一个生成 AAR 的 Android 库项目。

一切都很好,但是当我在另一个项目中使用 AAR 时出现此错误:

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

AAR 使用了 picasso,是否可以在生成时也导出 AAR 的依赖关系?

【问题讨论】:

  • 你如何在其他项目中使用 AAR?
  • 像这样:repositories { flatDir { dirs 'libs' } mavenCentral() } 然后使用通常的 groupId 格式包含它们
  • 这应该是我想的预期行为:groups.google.com/forum/#!topic/adt-dev/0ZAP8AVUZVw!我想我必须下载毕加索 jar,然后 gradle 会自动包含它,否则它不会。会试一试并发布答案
  • 我从未使用过flatDir。我将我的 AAR 发布到本地 Maven 存储库,它从那里解决依赖关系,没有问题。
  • 使用 jars 而不是 maven 依赖项有效。我想这个想法是你不能混合这两个flatDir 和纯远程依赖。如何建立本地 Maven 存储库。

标签: java android library-project aar


【解决方案1】:

如何设置本地 Maven 存储库。

警告:以下配方有效,但可能需要改进,因为我与 Maven 专家。去年我敲定了这种方法,用于我的 CWAC 库。

第 1 步:将 classpath 'com.github.dcendents:android-maven-plugin:1.0' 添加到库项目的 build.gradle 文件中的 buildscript dependencies 块中。还要添加 versiongroup 语句以提供有关您的 AAR 的信息。

第 2 步:使用 gradle install 编译 AAR 并将其安装在默认的本地 Maven 存储库中。

第 3 步:通常,您会将 mavenLocal() 添加到应用程序项目的 dependencies 块中,以通过其工件 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:github.com/dcendents/android-maven-gradle-plugin,并使用此处的说明更改 gradle-wrapper.properties,确保 gradle 至少为 2.4:tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
  • 请问gradle install怎么用?我在 windows 上安装了 gradle for java 并尝试了gradle install,我收到了这个错误Task 'install' not found in root project 'bin'.
  • @WilliamKinaan:这个答案是 2.5 岁。我建议寻找更新的解决方案。
  • @CommonsWare 说得有道理,不过我一直在读Gradle,我只想知道,仅供个人使用如何应用gradle install
  • @WilliamKinaan:要么您缺少引用的插件,要么插件在过去 2.5 年中发生了变化。我不再使用该插件,因为标准的 maven 插件及其 uploadArchives 任务适用于现代版本的 Android Studio/Android Plugin for Gradle。
猜你喜欢
  • 2016-07-10
  • 2014-04-01
  • 1970-01-01
  • 2014-09-29
  • 2018-04-02
  • 2015-04-18
  • 2015-01-05
  • 2016-04-04
  • 2013-07-19
相关资源
最近更新 更多