天天看點

Andriod編譯原理

一、Andriod編譯過程

在項目檔案發生變化時,Android Studio無需訓示便會自動進行編譯。在整個編譯過程中,Android開發工具将資源檔案、代碼以及AndroidManifest.xml檔案(包含應用的中繼資料)編譯生成.apk檔案。.apk檔案要在模拟器上運作,還需以debug key簽名。(分發.apk應用給使用者時,應用必須以release key簽名。

更多有關編譯過程的資訊,可參考Android開發文檔網頁 developer.android.com/tools/publishing/preparing.html

那麼,應用的.xml布局檔案的内容該如何轉變為View對象呢?作為編譯過程的一部分,aapt(Android Asset Packaging Tool)将布局檔案資源編譯壓縮緊湊後,打包到.apk檔案中。然後,在**Activity類的onCreate(Bundle)方法調用setContentView(…)方法時,**Activity使用LayoutInflater類執行個體化布局檔案中定義的每一個View對象。

Andriod編譯原理

二、Andriod編譯工具

目前,我們看到的項目編譯都是在Android Studio裡執行的。編譯功能已整合到IDE中,IDE負責調用aapt等Android标準編譯工具,但編譯過程本身仍由Android Studio管理。有時,出于某種原因,可能需要脫離Android Studio編譯代碼。最簡單的方法是使用指令行編譯工具。現代Android編譯系統使用Gradle編譯工具。

要從指令行使用Gradle,請切換到項目目錄并執行以下指令:

$ ./gradlew tasks
           

如果是Windows系統,執行以下指令:

> gradlew.bat tasks
           

我在一個簡單Andriod項目目錄下執行上述指令之後,指令行出現以下資訊:

Andriod編譯原理
Andriod編譯原理
Andriod編譯原理

執行以上指令會顯示一系列可用任務。你需要的任務是installDebug,是以,再執行以下指令:

$ ./gradlew installDebug
           

如果是Windows系統,執行以下指令:

> gradlew.bat installDebug
           

指令行顯示以下結果:

Andriod編譯原理

以上指令将把應用安裝到目前連接配接的裝置上,但不會運作它。要運作應用,需要在裝置上手動啟動。

何為Gradle

gradle 是目前非常流行的一個項目建構工具。 它并不局限于一種平台,随着軟體工程的項目的日益複雜,對于軟體項目的編譯,打包就成為了一大重點。 以android項目為例,如果要手動配置那麼多依賴的第三方庫和jar包,自己需要一個一個去網上找資源,然後下載下傳,配置。如果依賴包的版本變更的話,又要重新找資源,下載下傳,配置。 想想都麻煩。 有時還需要把java源碼,res等資源編譯打包成apk。這也是一個巨大的工作量。 這個時候就需要一個工具幫我們完成這些工作了。在軟體項目中完成以上類似工作的工具,稱之為項目建構工具。當然gralde的功能遠遠不止這些,這需要我們不停的探索。

小結:

1、Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基于Groovy的特定領域語言來聲明項目設定,而不是傳統的XML。

目前其支援的語言限于Java、Groovy和Scala,計劃未來将支援更多的語言。

2、Gradle 是一個建構工具,也是一個開發架構,基于Groovy語言。 我們可以通過Groovy語言去寫自己的Gradle插件,也可以去編寫指定的腳本去改變建構規則。

3、android studio中gradle之是以能夠建構android工程,是因為有基于android的gradle插件。