【问题标题】:Android Project Structure is incorrect; only one build.gradleAndroid 项目结构不正确;只有一个 build.gradle
【发布时间】:2016-07-31 20:49:15
【问题描述】:

我的项目结构不正确。我需要一个顶级 build-gradle,以及一个包含自己的 build.gradle 的同一级别的模块。

查看现在组织方式的图片。你看到的几乎是两个不同的层级合并到了 on.e 这里的build.gradle 是项目中唯一的一个。你看到的那个有注释,它是顶级版本。

解决这个问题的正确方法是什么?我需要重新导入还是可以重新组织它?

其他信息,我已经安装了 Gradle 2.10。

编辑:更多信息

我的顶级 Gradle 文件通常包含以下内容:

// Top-level build file where you can add configuration options common to all sub-projects/modules.


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

但是在上面的设置中,没有第二个 Gradle 文件,我应该把其他信息放在哪里 ...例如:

apply plugin: 'com.android.application'


repositories {
    mavenCentral()
    maven {
        url "https://jitpack.io"
    }
}



android {

   defaultConfig {
       // edited
   }

    dependencies {
       // edited
    }


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

}

apply plugin: 'com.google.gms.google-services'

当我运行程序时,我得到这个错误:

Error:A problem was found with the configuration of task ':checkDebugManifest'.
> File 'C:\--\src\main\AndroidManifest.xml' specified for property 'manifest' does not exist.

这有关系吗?

【问题讨论】:

  • 你导入了eclipse项目吗?
  • @Nikhil 我相信这就是最初的样子。我已经在当前状态下使用它一段时间并发布更新。但我试图改变一些东西,并在处理 gradle 文件时发现了一些问题。
  • 这绝对是可以修复的,但我没有抓住重点,所以我不知道你想往哪个方向发展。你为什么不喜欢它的样子?我认为像 AS 向导那样拥有一个额外的 gradle 文件是人为的。您是否尝试过创建一个新项目并模仿其结构?
  • 你为什么还有gen文件夹?
  • @EpicPandaForce 看起来像 eclipse 继承

标签: android android-studio android-gradle-plugin


【解决方案1】:

这种方式仍然假设没有 OP 要求的额外模块的扁平层次结构,但由于它基于我自己的 Eclipse 到 AS 迁移,我知道它对我有用。

要在不移动文件的情况下识别 eclipse 默认值,您需要这样做:

android {
  defaultConfig {

     sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            res.srcDirs = ['res']
        }
        test.java.srcDirs = ['src/test/java', 'build/generated/source/debug']
    }

这很可能允许您同时使用具有相同文件夹的 eclipse 和 Android Studio。

第二种方法是不更改 gradle 而是移动文件夹,以便 gradle 找到它期望的东西。

  1. 移动AndroidManifest.xml,它必须进入src/main
  2. res 移动到src/main/res
  3. src/com 移动到src/main/java/com(您能确认您的com 文件夹当前在哪里吗?

您可以移动文件或将 gradle 直接移动到它们所在的位置,这是您的选择 - 但不要同时进行。我不记得的唯一步骤是用于测试的build/generated/source/debug,我不记得我是否使用过它,因为我使用的是 groovy 或者它是否是另一个 eclipse maven/AS gradle 不匹配。

【讨论】:

  • @KickinLettuce 为了更清楚一点,这个解决方案只涉及整个项目中的 1 个 gradle 文件。即使你想拥有 2 我宁愿以这种方式开始并将第二个 gradle 文件作为第二步。如果您可以成功编译所有内容,我可以稍后更新答案。
  • 好的,谢谢。如果 1 个 gradle 文件是一种合法的方式,那我很好。我想我误解了我收到的错误信息。我会将此标记为正确,因为它现在可以编译。再次感谢! (另外,我想我曾经在项目中有过该代码,因为该项目过去确实编译正确。我可能在清理时取出了)
  • 如果您仍然想要,让我们在接下来的步骤中将其转换为 2 个 gradle 文件和一个模块。如果您确认它正在执行所有编译/导入,我也会稍微清理一下答案
  • 不,一切都很好。该应用程序编译,我现在开始做其他事情。谢谢!
  • @KickingLettuce 请给答题者 150 个代表
【解决方案2】:

这是因为 Gradle 在默认位置查找 AndroidManifest --> App/src/main/AndroidManifest.xml

您可以定义 Gradle 可以在哪里搜索您的 AndroidManifestHow to tell Gradle to use a different AndroidManifest from the command line?

【讨论】:

    【解决方案3】:

    从下拉菜单中选择“android”而不是“project”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多