intellij-idea - IntelliJ、Android 和 Gradle

标签 intellij-idea android-gradle-plugin

我正在尝试让我现有的 Android 项目与 gradle 和 IntelliJ 12 一起工作。
以前我让它与 maven 一起工作,但它似乎不像 gradle 那样灵活,而且我认为我知道我需要更少的子文件夹。

我的 Android 项目分为干净的 java 库 (:core) 和实际的应用程序 (:android)。这两个项目都在我的主项目文件夹中。

~-+MainProject
  |--+core
  |  L--build.gradle
  |--+android
  |  L--build.gradle
  |--build.gradle
  L--settings.gradle 

我认为让 gradle 工作的理想解决方案是将 (:core) 和 (:android) 项目视为嵌套项目,这意味着我可以简单地在 MainProject 源文件夹中使用我的 cmd 来启动 gradle 任务。

但是我想出了不同的问题:
  • Gradle 依赖只包含在核心项目中
  • 这意味着在 instrumentatetionTest 和主项目文件中都没有
    目录正确设置为源/测试目录
  • IntelliJ 不解析我在 gradle 中添加为依赖项的任何类(AndroidSDK、junit、mockito、来自 :core 项目的类)
  • 尝试使用插件“idea”,但要么我用错了它要么没有解决问题
  • 我在构建 APK 时遇到重复依赖错误
  • 肯定与我添加的 junit:4.11 和 mockito-core:1.9.5 有关系
  • 我试过的:
  • 删除依赖项 -> 构建失败导致某些类当然无法解析
  • 按照其他一些线程的建议更改为 junit:4.5+ -> 根本没有变化

  • 这是 *.gradle 配置

    主要项目:
    -- settings.gradle
    include ':core', ':android'
    

    -- build.gradle
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    
    subprojects {
        repositories {
            mavenLocal()
            maven { url "http://repo.maven.apache.org/maven2" }
        }
    }
    

    :核
    -- build.gradle
    apply plugin: 'java'
    
    dependencies {
        testCompile 'junit:junit:4.11'
        testCompile 'org.mockito:mockito-core:1.9.5'
    }
    

    :安卓
    apply plugin: 'android'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
         compile project(":core")
    
         compile 'com.google.android:android:4.1.1.4'
    
         instrumentTestCompile 'junit:junit:4.11'
         instrumentTestCompile 'org.mockito:mockito-core:1.9.5'
         instrumentTestCompile 'com.google.dexmaker:dexmaker:1.0'
         instrumentTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'
    
         instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6'
    } 
    
    /* ... androidSettings
    

    我希望有人可以帮助我

    MFG多纳塔尔

    最佳答案

    好的,所以您的想法是正确的,但是您仍然需要进行一些更改。

    您的根 build.gradle文件应如下所示:

    subprojects {
        repositories {
            mavenCentral()
        }
    }
    
  • 您只需要包含 mavenLocal()如果您使用的是本地安装的存储库。大多数人不这样做,并且您的项目中没有任何内容表明您需要一个。
  • mavenCentral()可用于替换您正在使用的 Maven URL。
  • 我们只需要修改android项目的buildscript,所以我们应该将其本地化为android项目的build.gradle .

  • 您的 settings.gradle和您的 build.gradle对于核心项目都不错。

    您的 build.gradle但是,对于 android 项目,需要进行一些更改:
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    
    apply plugin: 'android'
    
    dependencies {
        compile project(":core")
    
        instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6'
    }
    
  • 通过包含 android 插件,我们可以直接链接到已安装的 SDK。这意味着我们不再需要包含 android 依赖项:compile 'com.google.android:android:4.1.1.4' .
  • 我们不需要包含 junit .它由 SDK 提供,因此我们将使用它。需要注意的一件事是 SDK 仅包含 JUnit 3。
  • 我们不需要包含 mockitodexmaker除非我们实际将其用于 android 测试。如果它只用于java库上的测试,我们这里不需要它。

  • 回答您的问题:
  • 我不确定你在这里问什么。如果您的项目结构包括文件所在的目录等,这可能会有所帮助。
  • 你的预感是对的。 Hamcrest 为测试提供匹配器,在 1.1 和 1.3 版本之间对其 API 进行了重大更改。 JUnit 4.11 依赖于 Hamcrest 1.3。然而,Mockito 1.9.5 依赖于 Hamcrest 1.1。因此,当两者都包括在内时,1.3 会覆盖 1.1 并且 Mockito 不再有效。恢复到 JUnit 4.5 也是一个问题。 Junit 4.5 包含 Hamcrest 1.1 jar 作为文件而不是 POM 中的依赖项。因此,当我们有同一文件的 2 个版本时,这会导致问题。 JUnit 4.10 是您想要的方式。这依赖于 Hamcrest 1.1 并将其包含在 POM 中而不是作为文件。赢赢!我也遇到过这个问题,我想弄清楚它的最好方法是查看 Maven Central 上的 POM 文件,看看它们告诉我什么。

  • 最后一点。 Intellij 12 无法处理 Gradle 多项目构建。为此,您需要切换到 Android Studio 或 Intellij 13。

    关于intellij-idea - IntelliJ、Android 和 Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133414/

    相关文章:

    android - 通过gradle创建Android项目的zip及其依赖项

    java - 从 intellij 运行时,Spring 初始化不同

    intellij-idea - IntelliJ IDEA 10.5 如何处理 Tomcat

    gradle - 如何配置 Gradle google-java-format 插件以在构建步骤中运行 goJF?

    groovy - Gradle WAR 插件 : how to find destination for files to copy

    合并 dex 文件时出现 Android 错误

    java - android gradle构建错误?

    intellij-idea - 有没有办法在 Intellij 中列出项目中的所有类?

    android - 程序类型已经存在 : com. google.thirdparty.publicsuffix

    android - 构建 Android Studio 示例时出错