提供 Gradle 依赖是 AAR 而不是 JAR

Provided Gradle Dependency Is AAR not JAR

我有一个问题,我试图在我的项目中包含一个名为 ParseLoginUI 的库。

问题是它使用提供的标签而不是编译。我相信提供的标签意味着项目需要提供这种依赖关系才能让库工作,而不是这个库自己编译库。

所以在我的 Android 库中,它像这样引用 Facebook SDK。

 provided 'com.facebook.android:facebook-android-sdk:4.0.1'

然后在我的 mobile/build.gradle 这是我的主要模块中,我像这样编译 Facebook sdks。

compile 'com.facebook.android:facebook-android-sdk:4.0.1'

我一直在按照安装此库的指南进行操作,这就是您的本意。这是我收到的警告,它阻止我编译 ParseLoginUI/build.gradle 文件(提供它的文件)抛出的内容。

Warning:Project ParseLoginUI: provided dependencies can only be jars. com.facebook.android:facebook-android-sdk:aar:4.0.1 is an Android Library.

这个库的文档有一个修复是:

If you are using gradle 1.1.0 or above, you may encounter "Warning:Project ParseLoginUI: provided dependencies can only be jars. com.facebook.android:facebook-android-sdk:aar:4.0.1 is an Android Library". It is an open issue of android gradle build tool. Currently the workround is using gradle 1.0.0.

很公平,但我不想为了解决这个问题而降级我的 gradle(目前是 运行 v1.2.3)。必须有解决这个问题的方法或更好的方法。

我的问题

如何在库模块和主模块中包含 Facebook SDK?

根据 this issue,应该可以使用 Gradle 插件 1.3.0-beta3。您可能需要将构建工具更新到 23.0.0 rc1 或更高版本。

试试这个:http://www.labouisse.com/how-to/2014/07/28/gradle-provided-scope-and-intellij/

他基本上模仿了提供的实现。

取而代之的是,

  1. here

  2. 克隆 ParseLoginUI
  3. 将 ParseLoginUI 作为模块导入并将这些包含在 gradle

    compile project(':ParseLoginUI')
    compile 'com.facebook.android:facebook-android-sdk:4.0.1'
    

希望对您有所帮助

经过反复尝试,我找到了解决方案……

首先,AAR是指android归档库,不是JAR。 我搜索了一个名为 facebook-android-sdk-4.0.1.jar 的东西,但没有成功。

诀窍是下载 facebook 代码并将其添加为模块。这样做,效果很好,您可以将 gradle 1.2.3 与 ParseLoginUI 一起使用。

转到这里: https://developers.facebook.com/docs/android/downloads

下载: https://developers.facebook.com/resources/facebook-android-sdk-4.0.1.zip 解压。

转到您自己的项目。 -在您的 ParseLoginUI gradle 中删除对 Parse

的引用

按文件、新建、导入模块。

Select 一个名为 facebook 的文件夹,位于您解压的 zip 文件中。

调用那个模块facebook-android-sdk-4.0.1.

现在在您的 parseloginui 中添加对该模块的依赖,使用:

compile project(':facebook-android-sdk-4.0.1’)

您还必须从下载的 zip 文件中复制一个文件到新的模块文件夹,该文件是 gradle.properties。那个有:

ANDROID_BUILD_MIN_SDK_VERSION=9

ANDROID_BUILD_TARGET_SDK_VERSION=21

ANDROID_BUILD_TOOLS_VERSION=21.1.2

ANDROID_BUILD_SDK_VERSION=21

就这些了。

按 SYNCHRONIZE 并用手指交叉。

在 gradle 和 android 工作室玩了几个小时后,我开始处理我的案例。 如果你明白了,请告诉我。 如果您有引用问题(我遇到过),请使用 FILE、PROJECT STRUCTURE 将 jar 引用正确添加到您的模块。 (我手动写了它们,似乎是我的解析引用中的一个错误,可能是一个路径或符号,不知道。使用 android studio 的用户界面来解决这个问题)。 顺便说一句,你可以在 ParseLoginUI 中使用 parse 的一个版本,在你的项目中使用另一个更新的版本(我没有测试 facebook 版本)。

这是我的 ParseLoginUI gradle 文件中的内容:

compile 'com.parse.bolts:bolts-android:1.2.0'

compile 'com.android.support:support-v4:22.0.0'

compile project(':facebook-android-sdk-4.0.1')

compile files('libs/Parse-1.9.1.jar')

compile files('libs/ParseFacebookUtilsV4-1.9.1.jar')

这就是我的应用程序 gradle:

compile 'com.google.android.gms:play-services:7.5.0'

compile project(':facebook-android-sdk-4.0.1')

compile 'com.parse.bolts:bolts-android:1.2.0'

compile files('libs/Parse-1.9.2/Parse-1.9.2.jar')

compile files('libs/Parse-1.9.2/ParseFacebookUtilsV4-1.9.2.jar')

compile project(':ParseLoginUI’)

注意:我使用 Gradle 2.4 版和 android 1.2.3 版插件。在文件、项目结构、项目中选择它。

祝你好运。

您已经在 Gradle 中提到这是一个未解决的问题。 如果您使用 ParseLoginUI 作为库模块。 只需更改 ParseLoginUI 本身的 build.gradle 文件。

    provided 'com.facebook.android:facebook-android-sdk:4.0.1'
                              to
    compile 'com.facebook.android:facebook-android-sdk:4.0.1'

你可以试试这个语法:

已提供(名称:“”,分机:'aar')

确保您的主要 build.gradle 具有您想要提供的 aar 包的路径或 maven 仓库。

我在书法 (github.com/chrisjenx/Calligraphy) 和 gradle 2.3.3 方面遇到了这个问题。 我将存储库从 jcenter() 更改为 mavenCentral(),现在可以了!