Android Gradle未能与';找不到可选库';

Android Gradle未能与';找不到可选库';,android,android-studio,gradle,build.gradle,Android,Android Studio,Gradle,Build.gradle,我不得不重新安装我的系统,今天我在Android Studio中尝试与gradle同步时出现以下错误: Warning: Unable to find optional library: org.apache.http.legacy 我的gradle项目是: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.b

我不得不重新安装我的系统,今天我在Android Studio中尝试与gradle同步时出现以下错误:

Warning: Unable to find optional library: org.apache.http.legacy
我的gradle项目是:

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'
}
:

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

android {
    useLibrary 'org.apache.http.legacy'
}
我试过书中提到的建议,但都不管用。android studio 1.5和2预览版的结果相同

我怎样才能解决这个问题

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

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

  • compileSdkVersion
    targetSdkVersion
    更改为22。还有23.0.1、23.0.0、22.0.1版本的BuildTools


  • 顶级build.gradle-/build.gradle

    buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
    }
    
    android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    useLibrary 'org.apache.http.legacy'
    ...
    }
    
    特定于模块的build.gradle-/app/build.gradle

    buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
    }
    
    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目录,并同步您的项目

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

    classpath 'com.android.tools.build:gradle:1.3.1'
    
    还可以尝试添加codehause回购

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

    如果上述解决方案不起作用,请尝试这种方法

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


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

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


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

    在我的情况下,它不起作用,因为我在
    \platforms\android-23\optional\
    目录中缺少
    optional.json
    ,目录包含以下内容:

    [
      {
        "name": "org.apache.http.legacy",
        "jar": "org.apache.http.legacy.jar",
        "manifest": false
      }
    ]
    
    用上述内容创建一个新的JSON文件解决了我的问题

  • 将“sdk\platforms\android-23\optional\org.apache.http.legacy.jar”复制到您的app module libs目录,然后添加为库
  • 如果启用proguard,请编辑“proguard rules.pro”以保留相关类,否则将发生异常

  • 经过大量的工作,这个解决方案对我来说很有效 . **Studio\Android\sdk\Platform**在这里删除您的Android-23,并从sdk管理器中再次更新api 23。** .
    这将解决您的问题。

    为了节省时间,两种解决方案对我来说是最好的

    解决方案1:

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

    解决方案2:

    下载此文件,其中包含
    optional.json
    文件 提取optional.json并将其移动到:

    C:\Users\\AppData\Local\Android\sdk\platforms\Android-23\optional


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

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

    是的,然后它说要添加一个编译时依赖项,我在我的帖子中提到过。所以改用HttpUrlConnection,Apache HTTP客户端是死的,在libs中添加它并同步您的项目……这可能会起作用,我会接受,因为我唯一能使它起作用的方法就是包含jar。顺便说一句,我不得不删除这条令人不快的线。谢谢你,约翰!然后,如果您将jar添加到“lib”文件夹中,则无需将“useLibrary”添加到gradle脚本中。已经尝试过,但不起作用。我还尝试了最新版本,我相信它是
    1.5.0
    ,但仍然不起作用。
    buildToolsVersion'23.0.1'
    使用这个,用于测试case@IntelliJAmiya这个版本的
    buildToolsVersion
    也有同样的错误。唯一对我有效的解决方案是从这个线程中,我得到了相同的错误消息,并对
    org.apache.http.legacy
    库进行了双重/多重声明。我想知道这怎么不是公认的答案,它确实是正确的解决方案,我尝试了很多方法来解决这个问题,我使用了互联网上写的所有方法,这是唯一解决我同样问题的方法在我的例子中,我有一个包含所有内容的android-23文件夹,文件夹…\optional\有jar,但没有“optional.json”文件。正如@notsopopularguy所说的,我刚刚创建了它,并刷新了它。工作得很好。