迁移至 Android Studio

将项目迁移至 Android Studio 需要适应新的项目结构、构建系统和 IDE 功能。如需从 Eclipse 迁移 Android 项目,Android Studio 会提供导入工具,以便您可以将现有代码快速移至 Android Studio 项目和基于 Gradle 的 build 文件。如需了解详情,请参阅从 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 将代码分成各个项目,其中包含从应用源代码到 build 配置和测试代码等定义 Android 应用的所有信息。每个项目包含一个或多个模块,您可以将项目分成独立的功能单元。模块可以单独构建、测试和调试。

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

基于 Gradle 的构建系统

Android Studio 的构建系统基于 Gradle 打造而成,使用以 Groovy 语法编写的 build 配置文件,以便进行扩展和自定义。

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

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

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

依赖项

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

测试代码

通过使用 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 等)。
  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/ 目录、资源、build 文件以及 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 文件中正确定义该依赖关系。如需详细了解如何定义依赖项,请参阅配置 build 变体

如果在检查这些设置后,在 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 build 文件进行迁移

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

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

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

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

    由于您的 IntelliJ 项目不使用相同结构,因此 build.gradle 文件需要将构建的源目录指向您的现有文件夹(例如,res/src/),而不是默认的新目录结构。 以下示例 build.gradle 文件包括 Gradle 构建的基本设置以及 android{} 块内部的 sourceSets{} 块,用于定义正确的源目录并移动测试和构建类型以避免命名冲突。将下面的代码块复制到您的 build.gradle 文件,然后执行使用现有项目设置所需的任何更改。例如,您可能还有其他要包含的依赖项,请务必使用其他目标 SDK 版本,否则您需要为源目录指定其他位置。

    Groovy

    // 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 7.0.0 version
        * of the Gradle plugin for the buildscript.
        */
        dependencies {
            classpath 'com.android.tools.build:gradle:7.0.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.
     */
    plugins {
      id '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')
         }
    }

    Kotlin

    // 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 7.0.0 version
        * of the Gradle plugin for the buildscript.
        */
        dependencies {
            classpath("com.android.tools.build:gradle:7.0.0")
        }
    }
    
    /**
     * This section 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.
     */
    plugins {
        id("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 {
        implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.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 {
            getByName("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...
            getByName("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.
            */
            getByName("debug").setRoot('build-types/debug')
            getByName("release").setRoot('build-types/release')
         }
    }

    警告:JCenter 代码库已于 2021 年 3 月 31 日变为只读代码库。 如需了解详情,请参阅 JCenter 服务更新

    如需详细了解如何设置和自定义 Gradle build 文件,请参阅配置 build
  3. 接下来,确定您需使用的库项目。有了 Gradle,您不再需要添加这些库作为源代码项目,而是可以在 build 文件的 dependencies{} 块中进行引用。然后,构建系统会为您处理这些库,包括下载库、合并到资源以及合并清单条目。以下示例将 Google Play 服务的声明语句和很多支持库添加到上面的示例 build 文件中显示的 dependencies{} 块中。

    Groovy

    ...
    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.
    }

    Kotlin

    ...
    dependencies {
        implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
    
        // Google Play Services
        implementation("com.google.android.gms:play-services:9.8.0")
    
        // Support Libraries
        implementation("com.android.support:appcompat-v7:28.0.0")
        implementation("com.android.support:cardview-v7:28.0.0")
        implementation("com.android.support:design:28.0.0")
        implementation("com.android.support:gridlayout-v7:28.0.0")
        implementation("com.android.support:leanback-v17:28.0.0")
        implementation("com.android.support:mediarouter-v7:28.0.0")
        implementation("com.android.support:palette-v7:28.0.0")
        implementation("com.android.support:recyclerview-v7:28.0.0")
        implementation("com.android.support:support-annotations:28.0.0")
        implementation("com.android.support:support-v13:28.0.0")
        implementation("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 中央代码库为您提供正确的声明语句。
  4. 保存您的 build.gradle 文件,然后关闭 IntelliJ 中的项目。导航至您的项目目录,然后删除 .idea 目录以及项目内的任何 .iml 文件。
  5. 启动 Android Studio,然后依次点击 File > New > Import Project
  6. 找到项目目录,点击上面创建的 build.gradle 文件以将其选定,然后点击 OK 导入项目。
  7. 依次点击 Build > Make Project 以通过构建项目并解决找到的任何错误以测试 build 文件。

后续步骤

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

根据具体项目和工作流程,您可能还想详细了解如何进行版本控制、管理依赖项、为应用签名、打包应用,或者如何配置和更新 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 规则。如需详细了解依赖项,请参阅配置 build 变体

应用签名

如果您的应用在 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 将自动更新,但您可以选择更频繁地进行更新,也可以试用预览版或 Beta 版。

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