文章來源:https://developer.android.com/studio/run/index.html
默認情況下刹淌,Android Studio 僅需點擊幾下即可設置要部署至模擬器或物理設備的新項目逝变。使用 Instant Run绕德,您無需構建新的 APK择膝,就可以將更改推送至方法噪珊,將現(xiàn)有應用資源推送至正在運行的應用撞秋,所以幾乎立刻就能看到代碼更改为障。
要構建和運行應用晦闰,請點擊?Run?
放祟。Android Studio 使用 Gradle 構建您的應用,會要求您選擇部署目標(模擬器或連接的設備)呻右,然后將您的應用部署至目標舞竿。您可以通過更改運行配置自定義一些這樣的默認行為,例如選擇自動部署目標窿冯。
如果想要使用 Android Emulator?運行您的應用骗奖,您需要準備好 Android Virtual Device (AVD)。如果您尚未創(chuàng)建模擬器醒串,點擊?Run?后执桌,在?Select Deployment Target?對話框中點擊?Create New Emulator。按照 Virtual Device Configuration 向?qū)Р僮魑叨模x您想要模擬的設備類型仰挣。如需了解詳細信息,請參閱創(chuàng)建和管理虛擬設備缠沈。
如果您正在使用物理 Android 設備膘壶,則需要在設備上啟用 USB 調(diào)試。如需了解詳細信息洲愤,請參閱在硬件設備上運行應用颓芭。
注:您也可以通過點擊?Debug?
,在調(diào)試模式下部署應用柬赐。在調(diào)試模式下運行應用讓您可以在代碼中設置斷點亡问、在運行時檢查變體和評估表達式,以及運行調(diào)試工具肛宋。如需了解詳細信息州藕,請參閱調(diào)試應用。
選擇和構建不同模塊
如果您的項目除默認應用模塊之外還有多個模塊酝陈,可以執(zhí)行以下操作來構建特定模塊:
在?Project?面板中選擇模塊床玻,然后點擊?Build > Make Module?module-name。
Android Studio 使用 Gradle 構建模塊沉帮。模塊構建后锈死,如果您已經(jīng)為新應用或新設備構建了模塊,可以運行和調(diào)試模塊遇西;或者如果您已構建了庫或 Google 云模塊馅精,可以將其用作依賴項。
要運行構建的應用模塊粱檀,請執(zhí)行以下操作:
點擊?Run > Run洲敢,然后從 Run 對話框中選擇模塊。
更改運行/調(diào)試配置
運行/調(diào)試配置指定要運行的模塊茄蚯、要部署的軟件包压彭、要啟動的行為睦优、目標設備、模擬器設置壮不、logcat 選項汗盘,等等。默認運行/調(diào)試配置會啟動默認項目行為并使用?Select Deployment Target?對話框選擇目標設備询一。如果默認設置不適合您的項目或模塊隐孽,您可以自定義運行/調(diào)試配置,也可以在項目健蕊、默認和模塊級別創(chuàng)建新配置菱阵。要編輯運行/調(diào)試配置,請選擇?Run?>?Edit Configurations缩功。如需了解詳細信息晴及,請參閱創(chuàng)建和編輯運行/調(diào)試配置。
更改構建變體
默認情況下嫡锌,在您點擊?Run?后虑稼,Android Studio 可以構建應用的調(diào)試版本,不過僅用于測試目的势木。您需要構建發(fā)布版本蛛倦,為應用公開發(fā)布做準備。
要更改 Android Studio 使用的構建變體跟压,請轉(zhuǎn)到?Build?>?Select Build Variant胰蝠,然后從下拉菜單中選擇不同的變體。默認情況下震蒋,新項目使用調(diào)試和發(fā)布構建變體進行設置。
使用產(chǎn)品定制躲庄,您可以為不同版本的應用(每個版本的應用均具有不同功能或設備要求)創(chuàng)建其他的構建變體查剖。要了解有關構建變體和產(chǎn)品定制的詳細信息,請參閱配置構建噪窘。
監(jiān)控構建流程
您可以通過點擊?Gradle Console?
?來查看與構建流程相關的詳細信息笋庄。控制臺會顯示為構建應用 Gradle 執(zhí)行的每個任務倔监,如圖 1 所示直砂。
圖 1.Android Studio 中的 Gradle 控制臺。
如果您的構建變體使用產(chǎn)品定制浩习,Gradle 也會調(diào)用任務來構建這些產(chǎn)品定制静暂。要查看所有可用構建任務的列表,請點擊 IDE 窗口右側(cè)的?Gradle?
谱秽。
如果構建過程中出現(xiàn)錯誤洽蛀,會出現(xiàn)?Messages?窗口摹迷,對問題進行具體描述。Gradle 會建議一些命令行選項來幫助您解決問題郊供,例如?--stacktrace?或?--debug峡碉。要在構建流程中使用命令行選項,請執(zhí)行以下操作:
打開?Settings?或?Preferences?對話框:?
在 Windows 或 Linux 上驮审,從主菜單中選擇?File?>?Settings鲫寄。
在 Mac OSX 上,從主菜單中選擇?Android Studio?>?Preferences疯淫。
導航至?Build, Execution, Deployment?>?Compiler地来。
在?Command-line Options?旁的文本字段中,輸入您的命令行選項峡竣。
點擊?OK?保存靠抑,然后退出。
Gradle 會在下次您嘗試構建應用時應用這些命令行選項适掰。
生成 APK
點擊?Run?時颂碧,Android Studio 會生成調(diào)試 APK 并將其部署至您的目標設備。在您生成用于公開分發(fā)的應用發(fā)布版本前类浪,必須首先學習如何簽署應用载城。然后,您可以生成多個調(diào)試或發(fā)布構建變體的簽署 APK费就。要定位生成的 APK 文件诉瓦,請點擊彈出對話框中的鏈接,如圖 2 所示力细。
圖 2.點擊鏈接定位已生成的 APK 文件睬澡。
關于 Instant Run
Android Studio 2.0 中引入的 Instant Run 是?Run?
?和?Debug?
?命令的行為,可以大幅縮短應用更新的時間眠蚂。盡管首次構建可能需要花費較長的時間煞聪,Instant Run 在向應用推送后續(xù)更新時則無需構建新的 APK,因此逝慧,這樣可以更快地看到更改昔脯。
僅在您部署調(diào)試構建變體、使用 Android Plugin for Gradle 版本 2.0.0 或更高版本笛臣,以及在應用的模塊級別?build.gradle?文件中將?minSdkVersion?設置為 15 或以上時云稚,Instant Run 才受支持。為獲得最佳性能沈堡,可以將?minSdkVersion?設置為 21 或更高静陈。
部署應用后,Run?
?按鈕(或?Debug?
?按鈕)中會出現(xiàn)黃色的小閃電圖標踱蛀,表明 Instant Run 已經(jīng)準備好在您下次點擊按鈕時推送更新窿给。無需構建新的 APK 即可推送新的更改贵白,一些情況下,應用甚至無需重啟就可以立即顯示代碼更改的效果崩泡。
Instant Run 通過執(zhí)行熱交換禁荒、溫和交換或冷交換向連接的設備或模擬器推送更新的代碼和資源。它會根據(jù)所做更改的類型自動確定要執(zhí)行的交換類型角撞。上面的視頻提供了有關所有這些如何在后臺運行的十分有趣的詳細信息呛伴。要獲得您將特定代碼更改推送至目標設備時 Instant Run 如何工作的快速摘要,請參見下表谒所。
代碼更改Instant Run 行為
更改現(xiàn)有方法的實現(xiàn)代碼通過熱交換支持:這是最快的交換類型热康,使更改能夠更快地顯示。您的應用保持運行劣领,下次調(diào)用存根方法時會使用具有新實現(xiàn)的存根方法姐军。
熱交換不會重新初始化您正在運行的應用中的對象。您需要重新啟動當前的行為尖淘,或者重新啟動應用才能看到特定更新奕锌。默認情況下,Android Studio 在執(zhí)行熱交換后會自動重新啟動當前的行為村生。如果您不想重新啟動惊暴,可以停用自動行為重新啟動。
更改或移除現(xiàn)有資源通過溫和交換支持:這種交換速度也非吵锰遥快辽话,但 Instant Run 在將更改的資源推送至您的應用時必須重新啟動當前的行為。您的應用保持運行卫病,行為重新啟動時屏幕上會出現(xiàn)小閃爍 - 這是正常情況油啤。
結(jié)構性的代碼更改,例如:?
添加蟀苛、移除或更改:?
注釋
實例字段
靜態(tài)字段
靜態(tài)方法簽名
實例方法簽名
更改當前類從其繼承的父類
更改實現(xiàn)的界面列表
更改類的靜態(tài)初始值設定項
對使用動態(tài)資源 ID 的布局元素重新排序
通過冷交換支持(API 級別 21 或更高):這種交換速度有點慢村砂,因為盡管不需要新的 APK,Instant Run 在推送結(jié)構性的代碼更改時必須重新啟動整個應用屹逛。
對于運行 API 級別 20 或更低的目標設備,Android Studio 會部署完整的 APK汛骂。
更改應用清單
更改應用清單引用的資源
更改 Android 小部件 UI 元素(需要清除并重新運行)
對應用的清單或清單引用的資源進行更改時罕模,Android Studio 會自動部署新構建以應用這些更改。這是因為設備上安裝了 APK 時應用相關的特定信息(如它的名稱帘瞭、應用圖標資源和 Intent 過濾器)均通過清單確定淑掌。
如果您的構建流程自動更新應用清單的任何部分,如自動循環(huán)訪問?versionCode?或?versionName蝶念,您將無法體驗到 Instant Run 的全部性能優(yōu)勢抛腕。使用 Instant Run 時芋绸,您應該在調(diào)試構建變體中停用對應用清單的任何部分進行自動更新。
更新 Android 小部件 UI 元素時担敌,您需要執(zhí)行清除并重新運行以查看更改摔敛。或者全封,因為使用 Instant Run 時執(zhí)行整潔的構建可能需要花費較長時間马昙,您也可以在對小部件 UI 進行更新時暫時停用 Instant Run。
注:如果您需要在崩潰后重新啟動應用刹悴,請不要從目標設備啟動應用行楞。從目標設備重啟應用將不會應用自上次冷交換或增量構建之后的任何代碼更改。要啟動應用并應用所有最近的更改土匀,請在 Android Studio 中點擊?Run?
(或?Debug?
)子房。
使用重新運行
推送影響特定初始值設定項的代碼更改(例如對應用的?onCreate()?方法的更改)時,您需要重新啟動應用就轧,以便使更改生效证杭。要執(zhí)行增量構建并重新啟動應用,請點擊?Rerun?
钓丰。
如果您需要部署整潔的構建躯砰,請從主菜單中選擇?Run?>?Clean and Rerun?
,也可以在點擊?Rerun?
?時按住?Shift?鍵携丁。此操作會停止運行的應用琢歇,執(zhí)行完整、整潔的構建梦鉴,然后將新的 APK 部署至您的目標設備李茫。
停用行為自動重新啟動
執(zhí)行熱交換時,您的應用會保持運行肥橙,但 Android Studio 會自動重新啟動當前的行為魄宏。要停用此默認設置,請執(zhí)行以下操作:
打開?Settings?或?Preferences?對話框:?
在 Windows 或 Linux 上存筏,從主菜單中選擇?File?>?Settings宠互。
在 Mac OSX 上,從主菜單中選擇?Android Studio?>?Preferences椭坚。
導航至?Build, Execution, Deployment?>?Instant Run予跌。
取消選中?Restart activity on code changes?旁邊的方框。
如果停用活動自動重新啟動善茎,您可以選擇?Run?>?Restart Activity券册,從菜單欄中手動重新啟動當前的活動。
針對 Instant Run 配置和優(yōu)化您的項目
默認情況下,Android Studio 會為使用 Android Plugin for Gradle 2.0.0 及更高版本構建的項目啟用 Instant Run烁焙。
要使用最新版本的插件更新現(xiàn)有項目航邢,請執(zhí)行以下操作:
打開?Settings?或者?Preferences?對話框。
導航至?Build, Execution, Deployment?>?Instant Run骄蝇,然后點擊?Update Project膳殷,如圖 3 所示。
如果用于更新項目的選項未顯示乞榨,則說明項目已經(jīng)帶有最新版本的 Android Plugin for Gradle秽之,處于最新狀態(tài)。
圖 3.更新現(xiàn)有項目的 Android Plugin for Gradle吃既。
您還需要更改構建變體才能開始使用 Instant Run考榨,將變體改為應用的調(diào)試版本。
通過配置 DEX 資源縮短構建時間
部署整潔的構建時鹦倚,Android Studio 會將您的應用設置為允許 Instant Run 推送代碼和資源更新河质。盡管更新正在運行的應用要快得多,第一次構建卻可能需要較長的時間才能完成震叙。您可以通過配置多個?DexOptions?設置來加快構建流程:
設置可以并行啟動的 DEX 進程的最大數(shù)量掀鹅。如果 Gradle 后臺進程已在運行,您需要先停止此進程媒楼,然后使用新的最大進程數(shù)進行初始化乐尊。您可以從?Terminal?窗口中調(diào)用下面的一種函數(shù)來終止 Gradle 后臺進程:?
在 Windows 上,請調(diào)用?gradlew --stop
在 Linux/Mac OSX 上划址,請調(diào)用?./gradlew --stop
設置 dex 操作的最大內(nèi)存分配池大小扔嵌。傳遞值時,您可以附加字母“k”來表示千字節(jié)夺颤,附加“m”表示兆字節(jié)痢缎,或者附加“g”表示千兆字節(jié)。
下面的示例會在模塊級別的?build.gradle?文件中將?maxProcessCount?設為 4世澜,以及將?javaMaxHeapSize?設為“2g”:
android {...
dexOptions
{
maxProcessCount
4 // this is the default value
javaMaxHeapSize
"2g"}}
您應增大設置的值并觀察對構建時間產(chǎn)生的影響独旷,對這些設置進行測試。如果您向 dexing 進程分配過多的資源寥裂,則可能導致性能下降嵌洼。
啟用 dexing-in-process 和增量 Java 編譯
Android Plugin for Gradle 版本 2.1.0?及更高版本還引入了其他的構建流程改進,包括增量 Java 編譯和 dexing-in-process封恰。增量 Java 編譯默認情況下處于啟用狀態(tài)咱台,這種編譯方式僅對發(fā)生變化或需要重新編譯的源代碼部分進行重新編譯,可以縮短開發(fā)過程中的編譯時間俭驮。
dexing-in-process 在構建流程而不是單獨的外部 VM 流程中執(zhí)行 dexing。這樣不僅可以讓增量構建更快,也可以顯著提高完整構建的速度混萝。要啟用此功能遗遵,您需要將 Gradle 后臺進程的最大堆大小設置為至少 2048 MB。要進行設置逸嘀,您可以將以下代碼包含到項目的?gradle.properties?文件中:?
org.gradle.jvmargs = -Xmx2048m
如果您已經(jīng)在模塊級別的?build.gradle?文件中為?javaMaxHeapSize?定義值车要,則需要將后臺進程的最大堆大小設置為?javaMaxHeapSize?的值 + 1024 MB。例如崭倘,如果您已將?javaMaxHeapSize?設為“2g”翼岁,則需要將以下代碼添加到項目的?gradle.properties?文件中:?
org.gradle.jvmargs = -Xmx3072m
從 Windows Defender 中排除您的項目
在 Windows 系統(tǒng)上,Windows Defender 可能導致 Instant Run 的運行速度變慢司光。如果您正在使用 Windows Defender琅坡,應當從 Windows Defender 惡意軟件掃描中排除您的 Android Studio 項目文件夾。
縮短使用 Crashlytics 時的構建時間
如果您的 Fabric Gradle 插件版本低于 1.21.6残家,Crashlytics 可能會導致構建時間變長榆俺。要提升應用開發(fā)期間的構建性能,您可以將插件升級到最新版本或者為您的調(diào)試構建變體停用 Crashlytics坞淮。
Instant Run 的限制
大多數(shù)情況下茴晋,Instant Run 可以加快構建和部署流程的速度。不過回窘,使用 Instant Run 時有一些限制因素可能影響其行為以及與您應用的兼容性诺擅。如果您在使用 Instant Run 時遇到其他問題,請提交錯誤啡直。
部署到多種設備
Instant Run 使用多種不同的技術執(zhí)行特定于目標設備 API 級別的熱交換烁涌、溫和交換和冷交換。因此付枫,同時將應用部署到多種設備時烹玉,Android Studio 會暫時關閉 Instant Run。
應用的 Dalvik 可執(zhí)行文件分包
如果您的項目面向舊版 Dalvik 可執(zhí)行文件分包(即阐滩,使用?multiDexEnabled true?和?minSdkVersion 20?或更低版本配置?build.gradle)配置并且您將其部署到運行 Android 4.4(API 級別 20)或更低版本系統(tǒng)的目標設備上二打,Android Studio 會停用 Instant Run。
如果將?minSdkVersion?設為 21 或更高掂榔,Instant Run 會自動將應用配置為進行 Dalvik 可執(zhí)行文件分包继效。由于 Instant Run 僅適用于調(diào)試版本的應用,在部署發(fā)布構建變體時装获,您需要配置應用進行 Dalvik 可執(zhí)行文件分包瑞信。
運行儀器測試和性能分析器
儀器測試會將調(diào)試 APK 和測試 APK 同時加載到測試設備上的相同進程中,這樣穴豫,控制方法可以替換應用的正常生命周期并執(zhí)行測試凡简。在運行或調(diào)試儀器測試時逼友,Android Studio 不會注入 Instant Run 需要的其他方法并將此功能關閉。
分析應用時秤涩,您應停用 Instant Run帜乞。使用 Instant Run 會輕微影響性能,而替換具有熱交換的方法則會產(chǎn)生稍大的影響筐眷。這種性能影響會干擾性能分析工具提供的信息黎烈。此外,每次熱交換生成的存根方法都會使堆疊追蹤變得復雜匀谣。
使用第三方插件
使用 Instant Run 時照棋,Android Studio 會暫時停用 Java Code Coverage Library (JaCoCo) 和 ProGuard。由于 Instant Run 僅適用于調(diào)試版本武翎,停用不會影響您的發(fā)布版本烈炭。
某些執(zhí)行字節(jié)碼增強的第三方插件可能會對 Instant Run 設置應用的方式造成影響。如果您遇到這些問題后频,但是想要繼續(xù)使用 Instant Run梳庆,那么應針對您的調(diào)試構建變體停用這些插件。您還可以通過提交錯誤的方式幫助提升與第三方插件的兼容性卑惜。
將更改推送至多進程應用
為了執(zhí)行熱交換和溫和交換膏执,Instant Run 僅設置應用的主進程。將代碼更改(例如對方法實現(xiàn)或現(xiàn)有資源的更改)推送至其他應用進程時露久,Instant Run 會執(zhí)行冷交換更米。
停用 Instant Run
要停用 Instant Run,請執(zhí)行以下操作:
打開?Settings?或者?Preferences?對話框毫痕。
導航至?Build, Execution, Deployment?>?Instant Run征峦。
取消選中?Enable Instant Run?旁邊的方框。