【问题标题】:ANT Android project to Android StudioANT Android 项目到 Android Studio
【发布时间】:2014-03-18 19:33:10
【问题描述】:

我有一个基于 ANT 构建工具的完整的 Android 应用程序。它与 Eclipse 一起使用,但我也必须使其与 Android Studio 一起使用。我设法使用 ADT Gradle 导出工具 导出项目,并且应用程序本身运行良好。但是,我无法让测试项目工作。

这里是 Eclipse ADT 插件生成的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

我的项目结构

.
├── AndroidManifest.xml
├── ant.properties
├── build.gradle
├── build.xml
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── local.properties
├── MyApp.iml
├── proguard-project.txt
├── project.properties
├── README.md
├── res
│   ├── drawable-hdpi
│   │   └── ic_launcher.png
│   ├── drawable-ldpi
│   │   └── ic_launcher.png
│   ├── drawable-mdpi
│   │   └── ic_launcher.png
│   ├── drawable-xhdpi
│   │   └── ic_launcher.png
│   ├── layout
│   │   └── main.xml
│   └── values
│       └── strings.xml
├── src
│   └── com
│       └── example
│           └── myapp
│               └── MainActivity.java
└── tests
    ├── AndroidManifest.xml
    ├── ant.properties
    ├── build.xml
    ├── proguard-project.txt
    ├── project.properties
    └── src
        └── com
            └── example
                └── myapp
                    └── MainActivityTest.java

对我来说,Android Studio 似乎无法将tests/src/PACKAGE 检测为一个包。它被归类为临时目录。

我真的很感激任何提示。

编辑: 如果 tests/src 重命名为 tests/java 一切正常。但这不是解决方案,因为测试将停止使用 ANT 和/或 Eclipse

【问题讨论】:

  • 您的settings.gradle 应该有include ":",':tests' 请检查并告诉我。将构建变体从构建变体选项卡更改为左侧面板中的测试将在 IDE 中显示为包。
  • @pyus13 它添加了tests/tests.iml 但仅此而已,仍然无法识别测试项目。
  • 您是否尝试过将构建变体从“构建变体”选项卡更改为测试并运行?
  • Empty test suite,但我在那里进行了一项测试。

标签: android eclipse ant gradle android-studio


【解决方案1】:

在主模块的build.gradle文件中。

android {
    sourceSets {
        tests {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
}

你可以试试这个,让我知道如果不起作用,我会删除它。

【讨论】:

  • 不幸的是,这不起作用。我试过有没有你的settings.gradle 文件。请查看我的编辑问题。
  • 是的,我已经看到了,在 gradle 文件中也清楚地提到了你的测试应该在 tests/java 中。我只是在确认这是否有效。
  • 如果对你有帮助的话,请检查这里的结构tools.android.com/tech-docs/new-build-system/user-guide
  • 我在这部分卡了几个小时:-)
【解决方案2】:

在一位同事的帮助下,我设法解决了这个问题。问题中提到的导出项目的正确 build.gradle 文件应如下所示

// (...)

android {
    // (...)

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']

            instrumentTest {
                java.srcDirs = ['tests/src']
                res.srcDirs = ['tests/res']
                assets.srcDirs = ['tests/assets']
            }
        }

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

此外,可能需要更改默认测试包名称,因为默认情况下 Gradle 期望该包类似于 application-package.test 而 Ant 使用 application-package.tests 约定。然而,这可能是一些仅针对我的项目的问题,但我认为分享它可能对将来的某人有益。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多