ANT Android 项目到 Android Studio [英] ANT Android project to Android Studio

查看:31
本文介绍了ANT Android 项目到 Android Studio的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

buildscript {存储库{MavenCentral()}依赖{类路径 'com.android.tools.build:gradle:0.8.+'}}应用插件:'android'依赖{编译文件树(目录:'libs',包括:'*.jar')}安卓 {compileSdkVersion 19构建工具版本19.0.1"源集{主要的 {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']}//将测试移动到 tests/java、tests/res 等...instrumentTest.setRoot('测试')//将构建类型移动到 build-types///比如 build-types/debug/java, build-types/debug/AndroidManifest.xml, ...//这会将它们移出 src//... 下的默认位置,这将//与主源集使用的 src/冲突.//添加新的构建类型或产品风格应该伴随//通过类似的定制.debug.setRoot('build-types/debug')release.setRoot('build-types/release')}}

我的项目结构

<预><代码>.├── AndroidManifest.xml├── ant.properties├── build.gradle├── build.xml├── gradle│ └── 包装纸│ ├── gradle-wrapper.jar│ └── gradle-wrapper.properties├── gradlew├── gradlew.bat├── 执照├── local.properties├── MyApp.iml├── proguard-project.txt├── project.properties├── README.md├──资源│ ├── drawable-hdpi│ │ └── ic_launcher.png│ ├── drawable-ldpi│ │ └── ic_launcher.png│ ├── drawable-mdpi│ │ └── ic_launcher.png│ ├── drawable-xhdpi│ │ └── ic_launcher.png│ ├──布局│ │ └── main.xml│ └── 价值观│ └── strings.xml├── src│ └── com│ └── 例子│ └── myapp│ └── MainActivity.java└── 测试├── AndroidManifest.xml├── ant.properties├── build.xml├── proguard-project.txt├── project.properties└── src└── com└── 例子└── 我的应用└── MainActivityTest.java

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

我真的很感激任何提示.

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

解决方案

在一位同事的帮助下,我设法解决了这个问题.问题中提到的导出项目的正确 build.gradle 文件应该看起来像

//(...)安卓 {//(...)源集{主要的 {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']仪器测试{java.srcDirs = ['tests/src']res.srcDirs = ['tests/res']assets.srcDirs = ['测试/资产']}}//将构建类型移动到 build-types///比如 build-types/debug/java, build-types/debug/AndroidManifest.xml, ...//这会将它们移出 src//... 下的默认位置,这将//与主源集使用的 src/冲突.//添加新的构建类型或产品风格应该伴随//通过类似的定制.debug.setRoot('build-types/debug')release.setRoot('build-types/release')}}

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

I have a fully working Android application based on ANT build tools. It is used with Eclipse but I have to make it work with Android Studio as well. I managed to export the project with ADT Gradle Export Tool and the application itself works great. However, I can't get the test project to work.

Here's build.gradle generated by Eclipse ADT plugin.

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

My project structure

.
├── 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

For me it seems that Android Studio is not able to detect tests/src/PACKAGE as a package. It is classified as casual directories instead.

I would really appreciate any hints.

EDIT: If tests/src is renamed into tests/java everything works. But this is not a solution since tests will stop working with ANT and/or Eclipse.

解决方案

With some help from a colleague I managed to resolve the issue. The proper build.gradle file for a project exported as mention in the question should look like

// (...)

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

Additionally, changing default test package name may be required since Gradle by default expects that package to be like application-package.test whereas Ant used application-package.tests convention. This may be however, some issue specific only to my project nevertheless I thought sharing it can be beneficial to someone in the future.

这篇关于ANT Android 项目到 Android Studio的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆