Gradle同步错误:找不到名称为“default”的配置

3
我想在我的应用程序中添加一个外部库GuillotineMenu-Android。我按照现有问题的最受欢迎的答案中给出的步骤进行操作How do I add a library project to the Android Studio?,但是当我尝试构建项目时遇到错误,即在第6步之后添加依赖项app/build.gradle,如compile project(":guillotinemenu")。我尝试了所有与此错误相关的stackoverflow链接,但它们都没有起作用。我在我的应用程序目录中创建了一个名为libs的文件夹,并将项目文件夹guillotine menu复制到其中。这是我的build.gradle(Module:app)文件。
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.sunshine.bbreaker.appet_i"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:recyclerview-v7:+'
    compile 'com.github.navasmdc:MaterialDesign:1.+@aar'
    compile 'com.android.support:appcompat-v7:22.0.+'

    // GuillotineMenu
    compile project(":guillotinemenu")
}

settings.gradle(项目设置)文件:

    include ':app', ':guillotinemenu'
project(':guillotinemenu').projectDir = new File('libs/guillotinemenu')

build.gradle(Project:guillotinemenu)文件:

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.2.3'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}} allprojects {
repositories {
    jcenter()
}}

settings.gradle(Project:guillotinemenu)文件:

include ':app', ':library'

build.gradle(guillotinemenu) 文件:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.yalantis.guillotine.sample"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile project(':library')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.jakewharton:butterknife:6.1.0'
}

如果您需要更多信息,请告诉我。提前致谢。


请发布您的guillotinemenu/build.gradle。 - Gabriele Mariotti
我已经发布了名为“build.gradle(Project:guillotinemenu)”的内容。 - gautamprajapati
请查看下面。您的'build.gradle(Project:guillotinemenu)'是顶级文件。您的库必须有一个内部的build.gradle。 - Gabriele Mariotti
好的,谢谢。我已经添加了guillotinemenu库的build.gradle文件。 - gautamprajapati
这个 build.gradle 文件是顶级文件。它不能作为库使用。请查看更新的答案。 - Gabriele Mariotti
1个回答

1
你应该有这样的结构:


projectRoot
  app
     build.gradle
  library
     build.gradle
  build.gradle
  settings.gradle

每个模块都有自己的build.gradle文件。同时,root/settings.gradle定义了项目中的所有模块。不要在您的模块内使用另一个settings.gradle。
settings.gradle中:
include ':app', ':library'

build.gradle 中。
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    allprojects {
        repositories {
            jcenter()
        }
    }

library/build.gradle 文件中。
apply plugin: 'com.android.library'

android {
    compileSdkVersion ...
    buildToolsVersion ...

    defaultConfig {
        ....
    }

}

dependencies {
   //....
}

app/build.gradle 文件中使用您的文件,但更改以下内容:
dependencies {
    //...
    // GuillotineMenu
    compile project(":library")
}

更新:

根据您下方的评论,我认为在您的情况下,库文件夹是另一个项目的根文件夹。 这意味着您应该引用此项目内的模块

    projectRoot
      app
         build.gradle
      libs
         guillotinemenu
           build.gradle //top level file of guillotinemenu project
    -->>   module       
              build.gradle  //build.gradle of the module

所以,修改您项目根目录下的 settings.gradle 文件。

 include ':app', ':guillotinemenu'
 project(':guillotinemenu').projectDir = new File('libs/guillotinemenu/module')

该模块(libs/guillotinemenu/module)应该有一个build.gradle,就像上面描述的library/build.gradle一样。

库guillotinemenu已经有它的build.gradle文件和settings.gradle文件。它内部使用了另一个只有build.gradle文件的库。所以,你想让我更改还是删除guillotinemenu项目的settings.gradle文件? - gautamprajapati
@brainbreaker,原问题不够清晰,抱歉。我已经更新了答案。如果guillotinemenu是另一个项目,你必须指向该项目内的模块。 - Gabriele Mariotti

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