Gradle 无法与“无法找到可选库”同步

Posted

技术标签:

【中文标题】Gradle 无法与“无法找到可选库”同步【英文标题】:Gradle failed to sync with 'unable to find optional library' 【发布时间】:2015-11-25 10:52:20 【问题描述】:

我不得不重新安装我的系统,今天当我尝试与 gradle 同步时,我在 android Studio 中遇到了这个错误:

Warning: Unable to find optional library: org.apache.http.legacy

我的项目等级是:

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:1.3.0'
    


allprojects 
    repositories 
        mavenCentral()
    

还有我的模块 gradle:

apply plugin: 'android'

android 
    useLibrary  'org.apache.http.legacy'

    compileSdkVersion 23
    buildToolsVersion '23.0.2'
    defaultConfig 
        minSdkVersion 16
        targetSdkVersion 23
    
    buildTypes 
        release 
        
    
    productFlavors 
    


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'

From the google docs:

要继续使用 Apache HTTP API,您必须首先声明 build.gradle 文件中的以下编译时依赖项:

android 
    useLibrary 'org.apache.http.legacy'

我尝试了this thread 中提到的建议,但它们不起作用。与 android studio 1.5 和 2 预览版结果相同。

我该如何解决这个问题?

编辑:到目前为止我尝试过的事情:

    将 gradle 类路径版本更改为 1.3.0、1.3.1、1.5.0。

    compileSdkVersiontargetSdkVersion 更改为 22。还有 23.0.1、23.0.0、22.0.1 的 buildToolsVersion。

【问题讨论】:

buildToolsVersion '23.0.1' 使用这个,用于测试用例 @IntelliJAmiya 与该版本的buildToolsVersion 相同的错误。 唯一对我有用的解决方案来自这个线程Why Warning:Unable to find optional library: org.apache.http.legacy occurs 我收到了与org.apache.http.legacy library 的双重/多重声明相同的错误消息。 【参考方案1】:

*** build.gradle - /build.gradle

buildscript 
...
dependencies 
    classpath 'com.android.tools.build:gradle:1.3.1'


模块特定的 build.gradle - /app/build.gradle

android 
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.apache.http.legacy'
...

Android/Sdk/platforms/android-23/optional 文件夹中的 org.apache.http.legacy.jar 添加到 app/libs 目录并同步您的项目

【讨论】:

是的,然后它说要添加我在帖子中提到的编译时依赖项。 所以改用 HttpUrlConnection,Apache HTTP 客户端死了 将其添加到库中并同步您的项目...这可能会起作用 我会接受这一点,因为我设法使它工作的唯一方法是包含罐子。顺便说一句,我不得不删除违规行。谢谢约翰! 那么如果你将jar添加到“lib”文件夹,那么就不需要将“useLibrary”添加到gradle脚本中。【参考方案2】:

经过大量工作后,此解决方案对我有用 . ** Studio\Android\sdk\platforms** 在此处删除您的 android-23 并再次从 sdk manager 更新 api 23。** . 它会解决你的问题。

【讨论】:

我想知道这不是公认的答案,它确实是正确的解决方案,我尝试了很多来找到解决这个问题的方法,我使用了互联网上写的所有方法,这是唯一的解决方案解决了我同样的问题【参考方案3】:

就我而言,它不起作用,因为我在<sdk-path>\platforms\android-23\optional\ 中缺少optional.json,目录具有以下内容:

[
  
    "name": "org.apache.http.legacy",
    "jar": "org.apache.http.legacy.jar",
    "manifest": false
  
]

创建具有上述内容的新 JSON 文件解决了我的问题。

【讨论】:

就我而言,我有包含所有内容的文件夹 android-23,文件夹 ...\optional\ 有 jar,但没有文件 'optional.json' 。正如@notsopopularguy 所说,我刚刚创建了它,并刷新了AS。工作完美。【参考方案4】:

您需要在 Android Stuido 项目的 app/libs 文件夹中添加 org.apache.http.legacy.jar jar 文件。

  Jar Location - `<SDK LOCATION>\android-sdk\platforms\android-23\optional`  

为此,只需右键单击您的项目并选择 Show in Explorer 然后转到 ...\app\libs 并粘贴到 jar 文件上方并 将您的项目与 Gradle 文件同步

Module:app

android 
compileSdkVersion 'Google Inc.:Google APIs:23'
buildToolsVersion "24.0.0"
defaultConfig 
    applicationId "<ur_app_id>"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    


【讨论】:

【参考方案5】:

更新您的项目 gradle 文件以使用 gradle 版本 1.3.1。

classpath 'com.android.tools.build:gradle:1.3.1'

还可以尝试添加 codehuse 存储库。

repositories 
        mavenCentral()
        maven
            url 'http://repository.codehaus.org'
        
    

【讨论】:

已经试过了,不行。我还尝试了最新版本 1.5.0 我相信它仍然无法正常工作。【参考方案6】:

在我的情况下,问题实际上发生了,因为我没有在该计算机上安装正确的 SDK。导航到.../Android/Sdk/platforms/android-23 我可以看到该文件夹​​是空的。通过 SDK 管理器添加 SDK 23 解决了问题并允许我进行编译。

您应该手动检查您安装的 SDK 版本是否与 build.gradle 文件中 compileSdkVersion 下指定的版本相同。

【讨论】:

【参考方案7】:

为了节省时间,2 个解决方案对我来说是最好的和最有效的。

解决方案 1:

打开您的 android sdk 管理器并重新安装 API 23(删除并重新安装)。

解决方案 2:

下载这个包含optional.json文件的文件 提取 optional.json 并将其移动到:

C:\Users\\AppData\Local\Android\sdk\platforms\android-23\可选

【讨论】:

【参考方案8】:

如果上面的解决方案不起作用,那么试试这个方法

我最近遇到了这个问题,它是由路径长度限制引起的,我认为它最多 256 个字符。

重新定位您的项目,构建将成功。

【讨论】:

【参考方案9】:
    将“sdk\platforms\android-23\optional\org.apache.http.legacy.jar”复制到您的应用模块库目录,然后添加为库; 如果启用proguard,请编辑“proguard-rules.pro”保留相关类,否则会出现异常。

【讨论】:

以上是关于Gradle 无法与“无法找到可选库”同步的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 项目无法与 Gradle 文件同步

IDEA引入Gradle工程小记

Android studio gradle 与 firebase 同步错误:响应 204:No Content 没有内容

Gradle 同步失败:无法解析所有工件以进行配置

在 gradle 项目中添加 graphql 依赖项时出错

Gradle 无法同步 Spring Boot 项目