您只需点击几下,即可让 Android Studio 设置好要部署至 Android 模拟器或已连接设备的新项目。安装应用后,您可以使用 Apply Changes 部署特定代码和资源更改,而无需编译新的 APK。
要编译和运行您的应用,请按以下步骤操作:
- 在工具栏中,从运行配置下拉菜单中选择您的应用。
从目标设备下拉菜单中,选择要在其上运行应用的设备。
如果您未配置任何设备通过 USB 连接设备或创建 AVD,才能使用 Android 模拟器。
点击 Run 图标
。
更改运行/调试配置
当您首次运行应用时,Android Studio 使用默认运行配置。运行配置用于指定要通过 APK 还是 Android App Bundle 部署您的应用、要运行的模块、要部署的软件包、要启动的 Activity、目标设备、模拟器设置、logcat 选项,等等。
默认运行/调试配置会编译 APK,启动默认项目 Activity 并使用 Select Deployment Target 对话框选择目标设备。如果默认设置不适合您的项目或模块,您可以自定义运行/调试配置,也可以在项目、默认和模块级别创建新配置。要修改运行/调试配置,请依次选择 Run > Edit Configurations。如需了解详情,请参阅创建和修改运行/调试配置。
更改编译变体
默认情况下,在您点击 Run 后,Android Studio 会编译应用的调试版本,不过这仅供在开发期间使用。
要更改 Android Studio 使用的编译变体,请在菜单栏中依次选择 Build > Select Build Variant。
对于不含原生/C++ 代码的项目,Build Variants 面板有两列:Module 和 Active Build Variant。模块的 Active Build Variant 值决定 IDE 会将哪个编译变体部署到您连接的设备并显示在编辑器中。
图 1. 对于不含原生/C++ 代码的项目,Build Variants 面板有两列
要在变体之间切换,请点击模块的 Active Build Variant 单元格,然后从列表字段中选择所需的变体。
对于含有原生/C++ 代码的项目,Build Variants 面板有三列:Module、Active Build Variant 和 Active ABI。模块的 Active Build Variant 值决定 IDE 部署到您的设备并且在编辑器中可见的编译变体。对于原生模块,Active ABI 值决定编辑器使用的 ABI,但不会影响部署的内容。
图 2. Build Variants 面板为含有原生/C++ 代码的项目增加了 Active ABI 列
要更改编译变体或 ABI,请点击 Active Build Variant 或 Active ABI 列的单元格,然后从列表中选择所需的变体或 ABI。您更改选择后,IDE 会自动同步您的项目。更改应用或库模块的任一列都会将更改应用于所有相关行。
默认情况下,新项目使用以下两个编译变体进行设置:调试和发布变体。您需要编译发布变体,为应用公开发布做准备。
要编译应用的其他变体(每个变体具有不同功能或设备要求),您可以定义其他编译变体。
编译您的项目
Run 按钮可编译应用并将其部署到设备。但是,要编译应用以共享或上传到 Google Play,您需要使用 Build 菜单中的其中一个选项来编译项目的部分或全部代码。在选择表 1 中列出的任意编译选项之前,请务必先选择您要使用的编译变体。
表 1. Build 菜单中的编译选项。
菜单项 | 说明 |
---|---|
Make Module | 编译自上次编译以来已修改的所选模块中的所有源文件,以及所选模块以递归方式依赖的所有模块。编译包括依赖源文件和所有关联的编译任务。您可以通过在 Project 窗口中选择模块名称或其中一个文件来选择要编译的模块。此命令不会生成 APK。 |
Make Project | 生成所有模块。 |
Clean Project | 删除所有中间/缓存的编译文件。 |
Rebuild Project | 针对所选编译变体运行 Clean Project 并生成 APK。 |
Build Bundle(s)/APK(s) > Build APK(s) |
为所选的变体编译当前项目中所有模块的 APK。编译完成后,系统将显示确认通知,提供指向 APK 文件的链接以及用于在 APK 分析器中对其进行分析的链接。 如果您选择的编译变体是调试编译类型,则使用调试密钥为 APK 签名,然后就可以安装了。如果您选择了发布变体,则 APK 默认处于未签名状态,您必须手动为 APK 签名。或者,您也可以从菜单栏中依次选择 Build > Generate Signed Bundle/APK。
Android Studio 会将您编译的 APK 保存在 |
Build Bundle(s)/APK(s) > Build Bundle(s) |
为所选的变体编译当前项目中所有模块的 Android App Bundle。编译完成后,系统将显示确认通知,提供指向 app bundle 的链接以及用于在 APK 分析器中对其进行分析的链接。 如果您选择的编译变体是调试编译类型,则使用调试密钥为 app bundle 签名,然后您可以使用
Android Studio 将您编译的 APK 保存在 |
使用向导打开一个对话框以设置新的签名配置,并编译已签名的 app bundle 或 APK。您需要先使用发布密钥为应用签名,然后才能将其上传到 Play 管理中心。如需详细了解如何为您的应用签名,请参阅为应用签名。 |
注意:Run 按钮使用
testOnly="true"
编译 APK,这意味着 APK 只能通过 adb
(Android Studio 使用的 adb)安装。如果您想要无需 adb 即可安装的可调试 APK,请选择您的调试变体,然后依次点击 Build Bundle(s)/APK(s) > Build APK(s)。
如需详细了解 Gradle 针对每个命令执行的任务,请按照下一部分中的说明打开 Build 窗口。如需详细了解 Gradle 和编译过程,请参阅配置编译。
监控编译过程
您可以通过依次点击 View > Tool Windows > Build(或点击工具窗口栏中的 Build 图标 ),查看有关编译过程的详细信息。该窗口显示 Gradle 为编译应用而执行的任务,如图 3 所示。
图 3. Android Studio 中的“Build Output”窗口
- “Build”标签:以树状显示 Gradle 执行的任务,其中每个节点表示一个编译阶段或一组任务依赖项。如果您收到构建时错误或编译时错误,请检查该树并选择一个元素来查看错误输出,如图 4 所示。
图 4. 检查“Build Output”窗口是否有错误消息
- “Sync”标签:显示 Gradle 为与项目文件同步而执行的任务。与 Build 标签类似,如果您遇到同步错误,请在树中选择元素以查找有关错误的更多信息。
- Restart:通过为项目中的所有模块生成中间编译文件,执行与依次选择 Build > Make Project 相同的操作。
- Toggle view:在以图形树形式显示任务执行情况与显示 Gradle 中更详细的文本输出(即在 Android Studio 3.0 及更低版本上的 Gradle Console
窗口中显示的输出)之间切换。
如果您的编译变体使用产品变种,Gradle 也会调用任务来编译这些产品变种。要查看所有可用编译任务的列表,请依次点击 View > Tool Windows > Gradle(或者在工具窗口栏中点击 Gradle 图标 )。
如果在编译过程中出现错误,Gradle 可能会向您推荐一些命令行选项来帮助您解决问题,例如 --stacktrace
或 --debug
。要在编译过程中使用命令行选项,请执行以下操作:
- 打开 Settings 或 Preferences 对话框:
- 在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings。
- 在 Mac OSX 上,从菜单栏中依次选择 Android Studio > Preferences。
- 依次转到 Build, Execution, Deployment > Compiler。
- 在“Command-line Options”旁的文本字段中,输入您的命令行选项。
- 点击 OK 保存,然后退出。
Gradle 会在您下次尝试编译应用时应用这些命令行选项。
Apply Changes
在 Android Studio 3.5 及更高版本中,借助 Apply Changes 功能,您可以将代码和资源更改推送到正在运行的应用中,而无需重启应用(在某些情况下,您无需重启当前 Activity)。有了这种灵活性,您就可以控制在想部署和测试细微增量更改时重启应用的多大部分,同时保留设备的当前状态。Apply Changes 使用搭载 Android 8.0(API 级别 26)或更高版本的设备上支持的 Android JVMTI 实现中的功能。要详细了解 Apply Changes 的工作原理,请参阅 Android Studio Project Marble:Apply Changes。
要求
Apply Changes 操作仅在满足以下条件时可用:
- 您使用调试编译变体来编译应用的 APK。
- 您将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的目标设备或模拟器上。
使用 Apply Changes
如果要将更改部署到兼容设备,请使用以下选项:
- Apply Changes and Restart Activity
尝试通过重启 Activity 但不重启应用来应用资源和代码更改。通常,如果您修改了方法正文中的代码或修改了现有资源,则可以使用此选项。
您也可以按
Ctrl+Alt+F10
(或者,在 macOS 上,按Control+Shift+Command+R
)执行此操作。- Apply Code Changes
尝试仅应用代码更改而不重启任何内容。通常,如果您修改了方法正文中的代码,但没有修改任何资源,则可以使用此选项。如果您既修改了代码也就修改了资源,则应改为使用 Apply Changes and Restart Activity。
您也可以按
Ctrl+F10
(或者,在 macOS 上,按Control+Command+R
)执行此操作。- Run
部署所有更改并重启应用。如果使用任一 Apply Changes 选项都无法应用您所做的更改,请使用此选项。要详细了解需要重启应用的更改类型,请参阅 Apply Changes 的限制。
为 Apply Changes 启用 Run fallback
您点击 Apply Changes and Restart Activity 或 Apply Code Changes 后,Android Studio 会编译新 APK 并确定是否可以应用更改。如果更改无法应用并且将导致 Apply Changes 失败,则 Android Studio 会改为提示您重新 Run 应用。不过,如果您不想在每次发生这种情况时都收到提示,则可以将 Android Studio 配置为每当更改无法应用时便自动重新运行您的应用。
要启用此行为,请按以下步骤操作:
打开 Settings 或 Preferences 对话框:
- 在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings。
- 在 macOS 上,从菜单栏中依次选择 Android Studio > Preferences。
依次转到 Build, Execution, Deployment > Deployment。
选中复选框以针对任一 Apply Changes 操作启用自动 Run fallback。
点击 OK。
Apply Changes 的限制
Apply Changes 旨在加快应用部署流程。不过,它的使用时机存在一些限制。如果您在使用 Apply Changes 时遇到任何问题,请提交错误。
需要重启应用的代码更改
在重启应用之前,某些代码和资源更改无法应用,其中包括以下方面的更改:
- 添加或删除类、方法或字段
- 更改方法签名
- 更改方法或类的修饰符
- 重命名类
- 更改类继承行为
- 更改枚举中的值
- 添加或移除资源
- 更改应用清单
- 更改原生库(SO 文件)
库和插件
某些库和插件会自动更改您的应用的清单文件或清单中引用的资源。这些自动更新可以通过下列方式影响 Apply Changes:
- 如果库或插件更改您的应用的清单,您不能使用 Apply Code Changes 图标
或 Apply Changes and Restart Activity 图标
,而必须重启应用,才能看到相应更改。
- 如果库或插件更改您的应用的资源文件,您不能使用 Apply Code Changes 图标
,而必须使用 Apply Changes and Restart Activity 图标
来查看相应更改。
您可以通过为调试编译变体停用所有自动更新来避免这些限制。
例如,Crashlytics 在每次编译过程中使用唯一的编译 ID 更新应用资源,这会阻止您使用 Apply Code Changes 图标 ,并要求您重启应用的 Activity 才能查看相应更改。您可以停用此行为,以便能将 Apply Code Changes 与 Crashlytics 一起用于调试编译。
直接引用已安装 APK 中的内容的代码
如果您的代码直接引用已在设备上安装的应用 APK 中的内容,在您点击 Apply Code Changes 图标 后,该代码可能会导致崩溃或出现异常。发生此行为的原因是当您点击 Apply Code Changes 时,设备上的底层 APK 会在安装过程中被替换。在这些情况下,您可以改为点击 Apply Changes and Restart Activity 图标
或 Run 图标
。
已知问题
以下是目前已知的 Apply Changes 所出现的问题。
Android Runtime 中的问题抛出错误
如果您使用的是搭载 Android 8.0 或 8.1 的设备,您在尝试应用某些类型的更改时(特别是当您使用 Kotlin 时),可能会看到“VERIFICATION_ERROR”消息。此消息是 Android Runtime 问题引起的,在 Android 9.0 及更高版本中已解决此问题。虽然该问题会导致 Apply Changes 失败,但您仍可以重新 Run 您的应用来查看更改。但我们建议您将设备升级到 Android 9.0 或更高版本。
使用 android:sharedUserId 时无法应用更改
当您尝试更改尚未部署到正在运行的应用的类时,那么如果您的应用通过以下任一方式配置,Apply Changes 将失败:
- 您的应用使用共享的
android:sharedUserId
与另一个应用共享数据。 - 您的应用使用共享的
android:sharedUserId
和android:process
与另一个应用在同一进程中运行。
当 Apply Changes 因这一问题而失败时,Android Studio 会显示以下消息:
Changes were not applied. JVMTI error: UNKNOWN_JVMTI_ERROR
此问题 (#135172147) 已在 Android Studio 3.6 Canary 6 及更高版本中修复。要在 Android Studio 3.5 中解决此问题,请点击 Run 图标 以重新部署您的应用并查看相应更改。