迁移至 Android Studio

将项目迁移至 Android Studio 需要适应新的项目结构、编译系统和 IDE 功能。如果您要从 Eclipse 迁移 Android 项目,Android Studio 会提供导入工具,以便您可以将现有代码快速移至 Android Studio 项目和基于 Gradle 的编译文件。如需了解详情,请参阅从 Eclipse 迁移

如果您要从 IntelliJ 进行迁移,而且您的项目已经使用 Gradle,则可以直接从 Android Studio 打开现有项目。如果您正在使用 IntelliJ,但项目尚未使用 Gradle,则需要先执行一些手动准备工作才能将项目导入 Android Studio。如需了解详情,请参阅从 IntelliJ 迁移

Android Studio 基础知识

在准备迁移至 Android Studio 时,您需要了解以下关键区别。

项目和模块组织

Android Studio 基于 IntelliJ IDEA IDE 打造而成。要了解 IDE 基础知识(例如导航、代码填充和键盘快捷键),请参阅探索 Android Studio

Android Studio 不使用工作区,因此各个项目在单独的 Android Studio 窗口中打开。Android Studio 将代码组织到项目中,其中包含从应用源代码到编译配置和测试代码等定义 Android 应用的所有信息。每个项目包含一个或多个模块,您可以将项目分成独立的功能单元。模块可以单独编译、测试和调试。

如需详细了解 Android Studio 项目和模块,请参阅项目概览

基于 Gradle 的编译系统

Android Studio 的编译系统基于 Gradle,并使用以 Groovy 语法编写的编译配置文件,以便于扩展和自定义。

基于 Gradle 的项目提供适用于 Android 开发的重要功能,包括:

  • 支持二进制文件库 (AAR)。无需再将库源代码复制到您自己的项目中,您只需声明依赖项,即可自动下载库并将其合并到您的项目中。这包括在编译时自动合并到资源、清单条目、Proguard 排除规则和自定义 Lint 规则等。
  • 支持编译变体。例如,编译变体允许您从同一项目中编译应用的不同版本(如免费版和专业版)。
  • 简单的编译配置和自定义。例如,您可以从 Git 标记中提取版本名称和版本代码作为编译的一部分。
  • 可以从 IDE、命令行和 Jenkins 等持续集成服务器中使用 Gradle,随时随地提供相同的编译。

如需详细了解如何使用和配置 Gradle,请参阅配置编译

依赖项

Android Studio 中的库依赖项为具有 Maven 坐标的已知本地源代码和二进制文件库使用 Gradle 依赖项声明和 Maven 依赖项。如需了解详情,请参阅配置编译变体

测试代码

通过使用 Eclipse ADT,可以在不同的项目中编写插桩测试,并通过清单文件中的 <instrumentation> 元素进行集成。Android Studio 在项目的主源集中提供 androidTest/ 目录,因此您可以在同一项目视图中轻松添加和维护插桩测试代码。此外,Android Studio 还在项目的主源集中提供了 test/ 目录,用于本地 JVM 测试。

从 Eclipse 迁移

Android Studio 为使用 Eclipse 创建的现有 Android 项目提供自动导入工具。

迁移先决条件

在将您的应用从 Eclipse 迁移到 Android Studio 前,请查看以下步骤,确保您的项目已做好转换的准备,同时确认 Android Studio 中有您需要的工具配置:

在 Eclipse ADT 中:

  • 确保 Eclipse ADT 根目录包含 AndroidManifest.xml 文件。此外,根目录必须包含 Eclipse 中的 .project.classpath 文件或 res/src/ 目录。
  • 编译您的项目,以确保导入时保存并包含了最新的工作区和项目更新。
  • 在需要导入的 project.properties.classpath 文件中注释对 Eclipse ADT 工作区库文件的任何引用。您可以在导入后在 build.gradle 文件中添加这些引用。如需了解详情,请参阅配置编译
  • 记录工作区目录、路径变量和任何实际路径映射可能会有所帮助,这些内容可用于指定任何未解析的相对路径、路径变量和链接的资源引用。Android Studio 允许您在导入过程中手动指定任何未解析的路径。

在 Android Studio 中:

  • 如果您尚未安装,请下载 Android Studio。如果您已经安装了 Android Studio,请依次点击 Help > Check for Updates(在 Mac 上,依次点击 Android Studio > Check for Updates),验证其是否是最新的稳定版本。
  • 因为 Android Studio 无法迁移任何第三方 Eclipse ADT 插件,请记下您在 Eclipse 中使用的任何第三方插件。您可以查看 Android Studio 中的相同功能,或在 IntelliJ Android Studio 插件代码库中搜索兼容的插件。使用 File > Settings > Plugins 菜单选项管理 Android Studio 中的插件。
  • 如果您计划在防火墙后面运行 Android Studio,则必须为 Android Studio 和 SDK 管理器设置代理。Android Studio 需要互联网连接才能执行设置向导同步、第三方库访问、访问远程代码库、Gradle 初始化和同步以及 Android Studio 版本更新。如需了解详情,请参阅代理设置

将 Eclipse 项目导入 Android Studio

您应根据现有 Eclipse ADT 项目的结构确定其导入方式:

  • 如果您在 Eclipse ADT 中有多个关联的项目共享同一个工作区,请将第一个项目作为项目导入,然后将其他关联的项目作为该项目中的模块进行添加。
  • 如果您的 Eclipse ADT 项目在同一个工作区中共享依赖项,但并不关联,请将每个 Eclipse ADT 项目作为独立的项目逐个导入 Android Studio。在导入过程中 Android Studio 将在新创建的项目之间维持这些共享的依赖项。
  • 如果您的 Eclipse ADT 项目包含原生 (C/C++) 库,请参阅将 Gradle 关联到您的原生库,了解有关如何将原生库作为 Gradle 编译依赖项进行添加的说明。

作为项目导入:

  1. 启动 Android Studio,并关闭任何打开的 Android Studio 项目。
  2. 在 Android Studio 菜单中,依次点击 File > New > Import Project
    • 或在“Welcome”屏幕中点击 Import project (Eclipse ADT, Gradle, etc.)
  3. 选择包含 AndroidManifest.xml 文件的 Eclipse ADT 项目文件夹,然后点击 Ok

  4. 选择目标文件夹,然后点击 Next

  5. 选择导入选项,然后点击 Finish
  6. 导入过程中会提示您将任何库和项目依赖项迁移到 Android Studio,并将依赖项声明添加到 build.gradle 文件。如需详细了解此过程,请参阅创建 Android 库

    导入过程中还将使用 Maven 依赖项替换具有已知 Maven 坐标的任何已知源代码库、二进制文件库和 JAR 文件,因此您无需手动保留这些依赖项。导入选项还允许您输入工作区目录和任何实际路径映射,以处理任何未解析的相对路径、路径变量和链接的资源引用。

  7. Android Studio 导入应用并显示项目导入摘要。查看摘要,了解项目重构和导入过程的详细信息。

将项目从 Eclipse ADT 导入 Android Studio 后,Android Studio 中的每个应用模块文件夹都包含该模块的完整源集,包括 src/main/src/androidTest/ 目录、资源、编译文件以及 Android 清单。在开始应用开发前,您应该解决项目导入摘要中显示的所有问题,确保项目重构和导入过程成功完成。

作为模块导入:

  1. 启动 Android Studio,并打开想要添加模块的项目。
  2. 在 Android Studio 菜单中,依次点击 File > New > Import Module
  3. 选择包含 AndroidManifest.xml 文件的 Eclipse ADT 项目文件夹,然后点击 Ok
  4. 如果需要,可以修改模块名称,然后点击 Next
  5. 导入过程中会提示您将任何库和项目依赖项迁移到 Android Studio,并将依赖项声明添加到 build.gradle 文件。如需详细了解如何迁移库和项目依赖性,请参阅创建 Android 库。导入过程中还将使用 Maven 依赖项替换具有已知 Maven 坐标的任何已知源代码库、二进制文件库和 JAR 文件,因此您无需手动保留这些依赖项。导入选项还允许您输入工作区目录和任何实际路径映射,以处理任何未解析的相对路径、路径变量和链接的资源引用。
  6. 点击 Finish

验证导入的项目

完成导入过程后,使用 Android Studio 的 Build 和 Run 菜单选项编译您的项目,并验证输出。若项目未正确编译,请检查以下设置:

  • 打开 SDK 管理器(点击 Android Studio 中的“Android SDK Manager”按钮或依次点击 Tools > SDK Manager),验证您安装的工具版本是否与 Eclipse 项目的设置相匹配。Android Studio 从您导入的 Eclipse 项目继承 SDK 管理器和 JDK 设置。
  • 要验证其他 Android Studio 设置,请依次点击 File > Project Structure,并检查以下设置:

    • SDK Location 下,验证 Android Studio 是否可以访问正确的 SDK、NDK 和 JDK 位置和版本。

    注意:如果您使用的是默认设置,则 Eclipse ADT 会将 Android SDK 安装在 User\user-name\android-sdks\(针对 Windows)或 Users/user-name/Library/Android/sdk/(针对 Mac)中。

    • Project 下,验证 Gradle 版本、Android 插件版本和相关代码库。
    • Modules 下,验证应用和模块设置,例如签名配置和库依赖项。
  • 如果您的项目依赖另一个项目,则确保在应用模块文件夹的 build.gradle 文件中正确定义该依赖项。如需详细了解如何定义依赖项,请参阅配置编译变体

如果在检查这些设置后,在 Android Studio 中编译和运行项目时仍出现异常问题,请考虑修改 Eclipse ADT 项目并重新开始导入过程。

注意:将 Eclipse ADT 项目导入 Android Studio 将创建一个新的 Android Studio 项目,不会影响现有 Eclipse ADT 项目。

从 IntelliJ 迁移

如果您的 IntelliJ 项目使用 Gradle 编译系统,则可以将项目直接自动导入到 Android Studio 中。如果您的 IntelliJ 项目使用 Maven 或其他编译系统,则需要先将其设置为使用 Gradle,然后才能迁移至 Android Studio。

导入基于 Gradle 的 IntelliJ 项目

如果您已经将 Gradle 与 IntelliJ 项目配合使用,则可以按照以下步骤在 Android Studio 中将其打开:

  1. 依次点击 File > New > Import Project
  2. 选择 IntelliJ 项目目录,然后点击 OK。您的项目将在 Android Studio 中打开。

导入非 Gradle IntelliJ 项目

如果您的 IntelliJ 项目尚未使用 Gradle 编译系统,您可以选择两种方式将项目导入到 Android Studio 中:

通过新建空项目进行迁移

要通过新建空项目,然后将源文件复制到新目录,从而将项目迁移至 Android Studio,请继续执行以下操作:

  1. 打开 Android Studio,然后依次点击 File > New > New Project
  2. 为应用项目输入名称,指定应该创建项目的位置,然后点击 Next
  3. 选择将运行应用的设备类型,然后点击 Next
  4. 点击 Add No Activity,然后点击 Finish
  5. Project 工具窗口中,点击箭头以打开视图下拉列表,然后选择 Project 视图以查看并探索新 Android Studio 项目的结构。要详细了解如何更改视图以及 Android Studio 如何编译项目,请参阅项目文件
  6. 转到为新项目选择的位置,然后将代码、单元测试、插桩测试和资源从旧的项目目录移至新项目结构中的正确位置。
  7. 在 Android Studio 中,依次点击 File > Project Structure 以打开 Project Structure 对话框。确保已在左侧窗格中选定应用的模块。
  8. 在项目的 Properties 标签中进行必要的修改(例如,修改 minSdkVersiontargetSdkVersion)。
  9. 点击 Dependencies 并将项目依赖的任何库添加为 Gradle 依赖项。要添加新的依赖项,请点击 Add 图标 ,然后选择要添加的依赖项类型并按提示操作。
  10. 点击 OK 保存所做的修改。
  11. 依次点击 Build > Make Project 测试对项目的编译,并解决任何未解决的错误。

通过创建自定义 Gradle 编译文件进行迁移

要通过新建指向现有源文件的 Gradle 编译文件将项目迁移至 Android Studio,请继续执行以下操作:

  1. 在开始前,确保将项目文件备份到单独位置,因为迁移流程将修改已部署的项目的内容。
  2. 接下来,在项目目录中创建一个名为 build.gradle 的文件。build.gradle 文件将包含 Gradle 运行编译所需的所有信息。

    默认情况下,Android Studio 期望项目的结构如图 1 所示。

    图 1. Android 应用模块的默认项目结构。

    由于您的 IntelliJ 项目不使用相同结构,因此 build.gradle 文件需要将编译的源目录指向您的现有文件夹(例如,res/src/),而不是默认的新目录结构。以下示例 build.gradle 文件包括 Gradle 编译的基本设置以及 android{} 块内部的 sourceSets{} 块,用于定义正确的源目录并移动测试和编译类型以避免命名冲突。将下面的代码块复制到您的 build.gradle 文件,然后执行使用现有项目设置所需的任何更改。例如,您可能还有其他要包括的依赖项,请务必使用其他目标 SDK 版本,否则您需要为源目录指定其他位置。
        // This buildscript{} block configures the code driving the build
        buildscript {
           /**
            * The nested repositories{} block declares that this build uses the
            * jcenter repository.
            */
            repositories {
                jcenter()
            }
    
           /**
            * This block declares a dependency on the 3.5.0 version
            * of the Gradle plugin for the buildscript.
            */
            dependencies {
                classpath 'com.android.tools.build:gradle:3.5.0'
            }
        }
    
        /**
         * This line applies the com.android.application plugin. Note that you should
         * only apply the com.android.application plugin. Applying the Java plugin as
         * well will result in a build error.
         */
        apply plugin: 'com.android.application'
    
        /**
         * This dependencies block includes any dependencies for the project itself. The
         * following line includes all the JAR files in the libs directory.
         */
        dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            // Add other library dependencies here (see the next step)
        }
    
        /**
         * The android{} block configures all of the parameters for the Android build.
         * You must provide a value for at least the compilation target.
         */
        android {
            compileSdkVersion 28
    
            /**
            * This nested sourceSets block points the source code directories to the
            * existing folders in the project, instead of using the default new
            * organization.
            */
            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')
             }
        }
        
    如需详细了解如何设置和自定义 Gradle 编译文件,请参阅配置编译
  3. 接下来,确定您要使用的库项目。有了 Gradle,您不再需要添加这些库作为源代码项目,相反,您可以在编译文件的 dependencies{} 块中参考它们。然后,编译系统会为您处理这些库,包括下载库、合并到资源以及合并清单条目。以下示例将 Google Play 服务的声明语句和很多支持库添加到上面的示例编译文件中显示的 dependencies{} 块中。
        ...
        dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
    
            // Google Play Services
            compile 'com.google.android.gms:play-services:9.8.0'
    
            // Support Libraries
            compile 'com.android.support:appcompat-v7:28.0.0'
            compile 'com.android.support:cardview-v7:28.0.0'
            compile 'com.android.support:design:28.0.0'
            compile 'com.android.support:gridlayout-v7:28.0.0'
            compile 'com.android.support:leanback-v17:28.0.0'
            compile 'com.android.support:mediarouter-v7:28.0.0'
            compile 'com.android.support:palette-v7:28.0.0'
            compile 'com.android.support:recyclerview-v7:28.0.0'
            compile 'com.android.support:support-annotations:28.0.0'
            compile 'com.android.support:support-v13:28.0.0'
            compile 'com.android.support:support-v4:28.0.0'
    
            // Note: these libraries require the "Google Repository" and "Android Repository"
            //       to be installed via the SDK manager.
        }
        
    如需在确定库的正确声明语句方面获得帮助,Gradle, please 可以根据 Maven Central 为您提供正确的声明语句。
  4. 保存您的 build.gradle 文件,然后关闭 IntelliJ 中的项目。转到您的项目目录,然后删除 .idea 目录以及项目内的任何 .iml 文件。
  5. 启动 Android Studio,然后依次点击 File > New > Import Project
  6. 找到项目所在的目录,点击上面创建的 build.gradle 文件以将其选定,然后点击 OK 导入项目。
  7. 依次点击 Build > Make Project 以通过编译项目并解决找到的任何错误来测试编译文件。

后续步骤

将项目迁移至 Android Studio 后,请参阅编译和运行您的应用,详细了解如何使用 Gradle 进行编译以及在 Android Studio 中运行应用。

根据您的项目和工作流程,您可能还想要详细了解如何使用版本控制、管理依赖项、为应用签名、打包应用,或者如何配置和更新 Android Studio。要开始使用 Android Studio,请参阅探索 Android Studio

配置版本控制

Android Studio 支持多个版本控制系统,包括 Git、GitHub、CVS、Mercurial、Subversion 和 Google Cloud Source Repositories。

在将您的应用导入 Android Studio 后,您可以使用 Android Studio VCS 菜单选项启用对所需版本控制系统的 VCS 支持、创建代码库、导入新文件至版本控制以及执行其他版本控制操作:

  1. 在 Android Studio VCS 菜单中,点击 Enable Version Control Integration
  2. 从下拉菜单中选择要与项目根目录关联的版本控制系统,然后点击 OK。此时,VCS 菜单将根据您选择的系统显示多个版本控制选项。

注意:您还可以使用 File > Settings > Version Control 菜单选项设置和修改版本控制设置。

如需详细了解如何使用版本控制,请参阅 IntelliJ 版本控制参考

Android 支持代码库和 Google Play 服务代码库

虽然 Eclipse ADT 使用 Android 支持库和 Google Play 服务库,但在导入过程中 Android Studio 会使用 Android 支持代码库和 Google 代码库替换这些库,以便继续使用兼容的功能并支持新的 Android 功能。Android Studio 使用已知的 Maven 坐标将这些依赖项添加为 Maven 依赖项,因此不需要手动更新这些依赖项。

在 Eclipse 中,要使用支持库,您必须针对想要使用的每个支持库在开发环境中修改项目的类路径依赖项。在 Android Studio 中,无需将库源代码复制到您自己的项目中,您只需声明依赖项,即可自动下载库并将其合并到您的项目中。这包括在编译时自动合并到资源、清单条目、ProGuard 排除规则和自定义 Lint 规则。如需详细了解依赖项,请参阅配置编译变体

应用签名

如果您的应用在 Eclipse ADT 中使用调试证书,Android Studio 将继续引用该证书。或者,调试配置使用 Android Studio 生成的一个调试密钥库和一个默认密钥,二者密码均已知,调试密码库位于 $HOME/.android/debug.keystore 中。当您从 Android Studio 运行或调试您的项目时,调试编译类型将自动使用此调试配置。

在编译应用以进行发布时,Android Studio 会应用在 Eclipse ADT 中使用的发布证书。如果在导入过程中未找到发布证书,则将发布签名配置添加到 build.gradle 文件中,或使用 Build > Generate Signed APK 菜单选项打开 Generate Signed APK Wizard。如需详细了解如何为您的应用签名,请参阅为应用签名

调整 Android Studio 的最大堆内存

默认情况下,Android Studio 的最大堆大小为 1280MB。如果您要处理大型项目,或者您的系统有充足的 RAM,您可以通过增加最大堆大小来提升性能。

软件更新

Android Studio 与 Gradle 插件、编译工具和 SDK 工具分开更新。您可以指定想要与 Android Studio 配合使用的版本。

默认情况下,在有新稳定版本发布时 Android Studio 将自动更新,但您可以选择更频繁地进行更新,也可以接收预览版或测试版。

如需详细了解如何更新 Android Studio 以及使用预览版和测试版,请参阅保持更新