Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Studio官方文檔之構建和運行你的APP

Android Studio官方文檔之構建和運行你的APP

編輯:關於Android編程

前言

默認情況下,Android Studio設置新的項目並且部署到模擬器或者真機設備上,只需要點擊幾下。使用即時運行,你並不需要構建一個新的APK即可將改變後的方法和現有的應用資源應用到一個正在運行的應用程序中,所以代碼的改變是即時可見的。

點擊Run這裡寫圖片描述來構建並運行你的APP。Android Studio通過Gradle構建你的App,選擇一個部署的設備(模擬器或連接的設備),然後把你的APP部署上去。你也可以自定義這些默認的設置,例如你可以通過 changing the run configuration 選擇自動部署到目標設備。

如果你希望使用模擬器(use the Android Emulator)來運行你的APP,你需要准備好一個Android虛擬設備(AVD)。如果你還沒有創建一個模擬器,點擊Run之後,在Select Deployment Target對話框中點擊Create New Emulator。按照虛擬設備配置向導來定義創建你需要的模擬器。更多詳細信息,請查看Create and edit virtual devices。

如果你正在使用Android真機,你需要在設備上開啟USB調試模式。更多詳細信息,請查看Using hardware devices。

Note:你也可以通過點擊Debug這裡寫圖片描述vc/CxOO/ydLU1NrE47XEtPrC69bQyejWw7bPteOjrNTa1MvQ0MqxvOyy6bHkwb+6zbHttO/KvbXE1rWjrLKi1MvQ0LX3ytS5pL7foaO4/Lbgz+rPuNDFz6KjrMfrsum/tDxhIGhyZWY9"https://developer.android.com/studio/debug/index.html">Debugging with Android Studio.

選擇和構建一個模塊(Select and build a different module)

如果你的項目中除了默認的應用模塊之外還有多個模塊,你可以按照下面的步驟來構建一個特定的模塊:

Project 面板中選擇模塊,然後點擊 Build > Make Module module-name

Android Studio通過Gradle構建模塊。一旦模塊構建完成,如果你為一個新的APP或者新的設備構建了一個模塊,你可以運行或者調試它,或者如果你構建了一個library或者Google Cloud 模塊,可以作為依賴來使用它。

運行APP的一個模塊:

點擊 Run>Run ,然後在運行對話框中選擇模塊。

改變 Run/debug 配置(Change the run/debug configuration)

run/debug配置指定了要運行的模塊,封裝部署,啟動頁面,目標設備,模擬器設置,logcat選項等等。默認的run/debug配置啟動項目默認的Activity並且使用Select Deployment Target對話框選擇部署目標。如果默認的設置不適合你的項目或者模塊,你可以自定義設置run.debug配置,或者你可以在項目級、默認級或者模塊級創建一個新的配置。編輯run/debug配置,選擇Run > Edit Configurations。更多詳細情況,參照Create and Edit Run/Debug Configurations。

更改構建版本(Change the build variant)

默認情況下,當你點擊Run的時候,Android Studio構建debug版本的APP,它只用於測試,你需要構建release版本來准備對外發布(prepare your app for public release)。

Android Studio更改構建版本,點擊Build > Select Build Variant,然後在下拉列表中選擇另一個選項。默認情況下,會生成一個debug和build版本。

根據product flavors,你可以為你的不同版本的APP創建額外的構建版本,每個版本都有不同的功能或者設備需求。關於build variants和 product flavors,詳見Configure your build.

監控構建過程(Monitor the build process)

點擊 Gradle Console 這裡寫圖片描述你可以查看構建進度詳情。控制面板顯示了構建你的APP時Gradle執行的每個任務,如下圖所示:
這裡寫圖片描述

如果你的構建版本使用了產品特色,它調用任務來構建這些產品特色。點擊IDE右側窗口的Gradle這裡寫圖片描述來查看所有可用的構建任務列表。

如果在構建進程中出現了一個錯誤,Messages窗口會顯示出來描述這個問題。Gradle可能會推薦幾個命令行選項來幫助你姐姐這個問題,例如 –stacktrace 或者 –debug。使用命令行選項幫助你構建過程。

1.打開 Settings 或者 Preferences 對話框:

在Windows或者Linux上,在菜單欄上選擇 File > Settings

在 Mac OSX 上,在菜單欄上選擇 Android Studio > Preferences

2.定位到 Build,Execution,Deployment > Compiler

3.在 Command-line Options 旁邊的文本輸入框內,輸入你的命令行選項。

4.點擊 OK 保存並退出。

Gradle 下次嘗試構建你的APP的時候將會嘗試這些命令。

生成APKs(Generate APKs)

當你點擊 Run 時,Android Studio 生成一個 debug 的 APK 並且部署到你的目標設備。在你生成一個 release 版本的 app 發布之前,然而,你首先必須學習如何簽名你的APP(sign your app)。然後你可以構建多個簽名後的 debug 或者 release 構建版本的APKs。找到生成的APK文件,點擊彈出的對話框中的鏈接,如下圖所示:
這裡寫圖片描述
點擊鏈接找到生成的APK文件。

關於 Instant Run(About Instant Run)

在 Android Studio 2.0版本中提到過,Instant Run 是 Run 這裡寫圖片描述Debug 這裡寫圖片描述命令的一種行為,顯著的減少更新你的應用的時間。盡管第一次構建可能需要更多的時間去完成,Instant Run 並不需要構建一個新的APK即可把隨後的更新推送的你的APP,所以展示的更快了。

Instant Run 支持只有你構建 debug 版本並且使用 Android Plugin Gradle2.0版本或者更高,並且在你的APP模塊級 build.gradle 文件中設置 minSdeVersion 為15或者更高。為了獲得更好的性能,設置 minSdeVersion 為21或者更高。

部署APP之後,一個非常小的、黃色的雷電圖標在 Run 這裡寫圖片描述按鈕(或者 Debug 這裡寫圖片描述按鈕)中顯示了,指示著當你下次點擊按鈕的時候 Instant Run 已經准備好推送更新。它只推送那些新的變化代替構建一個新的APK,在某種情況下,APP並不需要重新啟動但卻能即時的展示代碼更新後的結果。

Instant Run 通過運行 hot swap,warm swap,or cold swap 推送更新後的代碼和資源文件到連接著的設備或者模擬器,它會基於你所做的更改類型自動確定swap的類型。上面的視頻提供了一個有趣的細節,關於這一切是如何工作的。然而當你推送確定的代碼改變到一個目標設備,關於Instant Run表現的一個快速總結,見下表:

代碼變化 Instant Run 運行情況 改變現有方法的實現代碼 支持 hot swap :這是展示代碼變化最快的swap類型。你的應用保持著運行狀態,當下一次方法被調用的時候會執行新的方法。Hot swaps 在你運行著的APP中不初始化對象。也許你需要重啟當前Activity或者重啟App(restart the app),在你看到確定的更新之前。默認情況下,運行hot swap 之後 Android Studio 自動重啟當前 Activity。如果你不需要這樣的運行方式,你可以禁用自動重啟Activity(disable automatic activity restarts)。 更改或移除已經存在的資源文件 支持 warm swap :這種swap依舊非常快,但是Instant Run 推送變更後的資源到你的App,必須重啟當前的Activity,你的App仍然在運行狀態,但是當Activity重啟的時候屏幕會有一個微小的閃爍,這是正常的。 代碼結構改變,例如:添加、移除或者改變: 注釋;實例;靜態變量; 靜態方法簽名;實例方法簽名 更改當前class繼承的父類 更改繼承的接口列表 改變class的靜態初始化方法 使用動態資源ID重新布局 支持 cold swap (API 21或更高):這種swap有點慢,因為盡管並不需要一個新的Apk,當 Instant Run 推送的代碼結構改變時它必須重啟整個app。運行的目標設備API為20或更低時,Android Studio 會部署整個APK。 更改 App 的 manifest文件 更改涉及到manifest資源文件時 更改Android widget UI文件(需要clean並且重新運行 clean and Rerun 當更改app的manifest文件或者涉及到manifest的資源文件時,Android Studio自動 deploys a new build 來應用這些變化。這是因為當APK安裝到設備上時,某些涉及到app的信息例如app的名稱,app的圖標文件和intent filter等信息,都是在manifest文件確定的。如果你的構建過程自動更新APP manifest 的任何部分,例如自動迭代versionCode或者versionName,你將無法受益於Instant Run的充分展現。當你在debug構建版本時,使用Instant Run,你應該禁用自動更新manifest文件的任意部分。當更新Android widget UI元素時,你需要運行 Clean and Rerun 來查看變化。另外,因為執行清理重新構建當Instant Run時可能需要更長的時間,當你更新你的布局UI時可以禁用Instant Run(disable Instant Run)。

Note:當你的APP崩潰之後,你需要重啟,不要從你的目標設備啟動它。在你的目標設備重啟你的App的時候,不要應用任何代碼的改變自從上次cold swap 或者增量構建(incremental build)。保持最近的變化來啟動你的App,點擊Android Studio上的 Run 這裡寫圖片描述(或者 Debug 這裡寫圖片描述)。

使用Rerun(Use Rerun)

當我們推送更新的代碼影響特定的初始化的時候,例如onCreate()方法改變的時候,你需要重新啟動APP使改變生效,點擊Rerun這裡寫圖片描述進行增量構建並重啟APP。

如果你需要構建一個clean build,在菜單欄上點擊Run > Clean and Rerun這裡寫圖片描述,或者按住Shift鍵點擊Rerun這裡寫圖片描述。這樣即可停止正在運行的APP,執行一個完整的,clean之後的構建,然後將新APK部署到你的目標設備。

禁用Activity自動重啟(Disable automatic activity restart)

當執行hot swap時,你的app保持運行狀態但是Android Studio自動重啟當前的Activity,按照以下步驟禁用:

1.打開Settings或者Preference對話框:

在Windows或Linux上,在菜單欄選擇File > Settings

在Mac OSX上,在主菜單上選擇Android Studio > Preferences

2.展開Build,Execution,Deployment > Instant Run.

3.取消選中Restart activity on code changes

如果禁用了Activity自動重啟,你可以手動選擇菜單欄中的Run > Restart Activity重啟當前Activity。

為Instant Run配置優化你的項目(Configure and optimize your project for Instant Run)

Android Studio構建項目時使用Android Plugin Gradle2.0或者更高的時候默認啟用Instant Run。

將已經存在的項目插件更新到最新版本:

1.打開Settings或者Preference對話框:

2.展開Build,Execution,Deployment > Instant Run並且點擊Update Project,如下圖所示。如果這個選項沒有顯示出來,這個項目的Gradle插件已經更新到最新版本了。
update-project-dialog
為已經存在的項目更新Gradle插件。

同時你需要將構建版本改為debug版(change the build variant)才可以使用Instant Run。

更改DEX資源提高構建速度(Improve build times by configuring DEX resources)

當你部署一個Clean後的構建,Android Studio促使你的APP允許Instant Run將代碼和資源更新。雖然更新App更加迅速,第一次構建完成可能需要更長的時間。你可以通過配置一些DexOptions設置提高狗屎速度:

maxProcessCount

設置DEX允許同時運行的進程的最大數量,如果Gradle進程正在運行,你需要在初始化一個新的maximun進程數量之前停止正在運行的程序,你可以在終端窗口調用如下命令來終止Gradle進程:
在Windows上輸入     gradlew --stop
在Linux/Mac OSC上輸入       ./gradlew --stop

javaMaxHeapSize

設置DEX運行時內存最大值,當改變一個值時,你可以添加“k”表示字節,“m”表示兆字節,或者“g”表示千兆字節。

下面的示例在模塊級build.gradle文件中設置maxProcessCount為4並且設置javaMaxHeapSize為“2g”:

    ...
  dexOptions {
    maxProcessCount 4 // this is the default value
    javaMaxHeapSize "2g"
  }
}

你應該嘗試這些設置,遞增這些值並且注意觀察這些對構建時間的影響。如果你給DEX分配太多資源,可能會導致構建時間更長。

啟用dexing-in-process和java增量編譯(Enable dexing-in-process and incremental Java compilation)

Android Plugin for Gradle version 2.1.0或者更高版本提供了額外的構建進程改進,包含Java增量編譯和dexing-in-process,默認啟用了Java增量編譯,在開發期間只重新編譯資源改變的部分或者需要被編譯的部分提高了編譯效率。

Dexing-in-process執行dex構建過程中,而不是在一個單獨的外包VM進程。這不僅使得增量構建更加快速,而且全面構建也有明顯的加速。要啟用這個特性,需要設置Gradle守護進程maximun大小至少2048MB。你可以按照如下步驟更改你項目的gradle.properties文件:

org.gradle.jvmargs = -Xmx2048m

如果你在模塊級build.gradle文件中定義了javaMaxHeapSize一個值,你需要將守護進程的最大值設置為javaMaxHeapSize + 1024 MB。例如,如何你設置了javaMaxHeapSize 大小為“2g”,你需要在項目的gradle.properties文件中進行如下設置:

org.gradle.jvmargs = -Xmx3072m  

從Windows Defender移除你的項目(Exclude your project from Windows Defender)

在Windows系統中,Windows Defender可能導致使用Instant Run變慢。如果你在使用Windows Defender,你應該使Windows Defender不再掃描Android Studio項目文件夾exclude your Android Studio project folder from Windows Defender malware scans。

使用Crashlytics時提高構建速度(Improve build times when using Crashlytics)

如果你的Fabric Gradle插件版本低於1.21.6,Crashlytics可能導致構建時間變長。為了提高開發app的構建性能,你可以更新你的插件到最新版本(update the plugin to the latest version)或者在debug版本時禁用Crashlytics(disable Crashlytics for your debug build variant)。

Instant Run的局限性(Limitations of Instant Run)

在大多數情況下,Instant Run被開發的目的是加快構建和部署的速度。然而,在使用Instant Run時也有一些方面可能會影響其行為和與程序的兼容性。當你使用Instant Run時出現了任何問題,請提交這個bug(file a bug)。

部署到多個設備(Deploy to multiple devices)

Instant Run在不同的API級別的目標設備上使用不同的技術來執行熱、暖、冷交換。為此,在部署一個應用到多個設備的時候,Android Studio暫時關閉Instant Run。

APP的Multidex(Multidex your app)

當你的項目為Legacy Multidex進行了配置,換句話說,當build.gradle配置multidexenabled為true並且minSdkVersion為20或者更低,並將項目部署到的設備運行Android4.4(API level 20)或者更低的時候,Android Studio會禁用Instant Run。

如果minSdkVersion設置為21或更高,Instant Run自動配置你的程序的multidex,因為Instant Run只是在debug版本的時候工作,當部署release版本的時候你可以需要配置你程序的multidex(configure your app for multidex)。

運行檢測試驗和性能分析(Run instrumented tests and performance profilers)

檢測測試將debug APK和test APK在一個進程中部署到一個測試設備上,允許控制方法覆蓋正常的app生命周期和執行測試。但運行或者debug測試時,Android Studio不注入Instant Run所需的附加方法,並將該功能關閉。

在分析一個app的時候,你應該禁用Instant Run,當使用Instant Run時對性能有一些影響,當使用hot swap重寫方法時有略微大點的影響。這個性能的影響可能會干擾性能分析工具提供的信息。此外,此外,每一個hot swap產生的存根方法可以使堆棧跟蹤復雜化。

使用第三方插件(Use third-party plugins)

當使用Instant Run時Android Studio會暫時禁用Java Code Coverage Library (JaCoCo)和ProGuard,因為Instant Run只在調試版本中運行,這不會影響你的發布版本。

某些第三方插件執行字節碼增強可能導致運行你的應用程序Instant Run問題。如果你遇到這些問題,但仍希望使用Instant Run,你應該在debu版本的時候禁用這些插件。你也可以通過提交一個bug(filing a bug)來幫助改善兼容第三方插件的問題。

將變化推送到多進程app(Push changes to multi-process apps)

Instant Run只通過你的app的主進程為了執行hot swap 和warm swap,當推送改變到app其他的進程,例如更改方法的實現方式,或者現有的資源,Instant Run執行cold swap。

禁用Instant Run(Disable Instant Run)

禁用Instant Run:

1.打開Settings或者Preferences對話框。
2.展開Build,Execution,Deployment > Instant Run
3.取消選中Enable Instant Run選擇框

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved