編輯:關於Android編程
將gradle更好應用到你的應用開發上面
Gradle深入淺出
以下部分可以讓你將一個基於gradle建立的android程序跑起來,並將重點介紹gradle為安卓開發過程中帶來的一些特性。讓你仔細看看androidstudio裡面的gradle窗口工具,並解釋他是如何添加依賴的。
作為第一個完全致力於安卓開發的ide,同時作為有google後台的ide,androidstudio是一個足以令安卓開發者們激情澎湃的有前景的開發工具。但是,同時也意味著開發者們需要掌握一些新技術,就像gradle構建系統。
這篇文章可以讓你開始跑起來一個基於gradle的安卓程序,以一個更深視角看待一些重要的gradle文件,學會如何運行一個gradle任務。
你也可以仔細看看androidstudio裡的各種各類的gradle圖形工具,並學會如何給一個項目添加依賴,並不需要任何的gradle經驗。
第一步就是准確的理解什麼是gradle以及為什麼gradle被集成到androidstudio中是個好消息。
1、什麼是gradle?
Gradle是一個自動化構建工具,可以通過插件集成到很多不同的系統中。在androidstudio中,gradle通過android的gradle插件集成。
如果你從來沒有使用過gradle,那當你想開始使用androidstudio的時候可能會碰到一些讓你很沮喪的障礙。然而,gradle為開發者提供了很多幫助,所以本文是值得投入一些時間來學習的。下面你可以使用gradle來做的幾件事。
最小化新項目的配置項
在androidstudio中創建的每個項目gradle都自動應用了一系列的默認配置項。
如果你開發的項目有些與默認規則相悖的配置項,自定義gradle也是很簡單的。
聲明項目依賴
依賴可以是一個module,jar文件或者是庫,這些依賴可以是本地也可以是遠程的。
測試項目
gradle自動從你的測試資源生成一個測試目錄和一個測試apk,並且可以在構建過程中運行測試。
生成簽名apk
如果你添加了所有簽名必要信息,例如keyPassword和keyAlias在你的build.gradle文件中,那你就可以使用gradle來生成簽名apk包。
從單個Module中打包出多個不同的apk包
Gradle可以從單個module中使用不同的包配置和構建配置來生成多個不同的apk包。這個特性尤其方便,主要有一下幾個原因:
1、以此支持絕大部分設備
Android平台的開發通常都是盡可能多的適配更多的不同android設備和android系統版本。GooglePlayStore甚至有多apk支持,讓你能夠使用不同設備配置來對應生成不同版本的app,提供出了一個應用商店的列表。
這就是引入gradle的重要原因。你可以使用android新的構建系統來生成單module多apk包。給這些apk包同樣的包名然後你就可以將他們上傳到google應用商店的同一個應用列表下。
2、提供同一app的不同版本
有時候,你會想要在應用商店中展示應用的多個版本,例如,你提供了一個免費的版本和一個”增強收費”版本。同樣,你可以使用gradle來生成單module多apk包,給每個apk一個單獨的包名即可,然後你可以單獨上傳每個apk包到應用商店。
2、探索gradle文件
每當在androidstudio裡創建一個項目,構建系統會自動生成所有必要的gradle構建文件。
因為每次創建androidstudio項目都會碰到這一堆的gradle文件,所以我們來創建一個基礎的示例項目然後來仔細看看這些自動生成的文件。
第一步是創建示例項目:
1、啟動Androidstudio.
2、點擊創建一個新的項目
3、項目命名,輸入域名,然後選擇保存位置,點擊Next
4、選擇Phoneandtablet,使用默認的最低sdk設置,點擊Next
5、選擇BlankActivity點擊Next
6、使用默認設置,點擊Finish
Gradle的構建文件
Gradle構建文件使用的是DomainSpecificLanguage(DSL)來定義個性化構建邏輯以及來與android的gradle插件來交互。
Androidstudio項目包含了一個或多個module,每個module都可以單獨構建、測試和調試。每個module都有他自己的build文件,所以每個androidstudio項目包括兩種build文件。
lTop-Levelbuild文件:在這個文件裡面是項目內所有module裡面通用的一些設置項。
lModule-Levelbuild文件:每個module都有自己的Gradle構建文件,裡面是針對當前module的設置項。你將會發給大部分時間在編輯Module-Level的build文件,而不是項目的Top-Level的build文件。
我們來看一看這些build.gradle文件,打開Androidstudio的項目面板(選擇Project選項卡,android視圖)然後展開GradleScripts目錄。在我們的示例項目中,展開列表前兩個條目分別是你項目的Top-Level和Module-Level構建文件。
我們的示例項目只包含了一個單獨的Module-Level構建文件,但是下面這個截屏給出了另一種情況,一個項目包括多個modules時候的GradleScripts目錄的可能樣子。
Top-Level構建文件
每一個androidstudio項目都包含一個Top-Level構建文件。這個build.gradle是GradleScripts目錄下的第一個條目,並且被清晰的標記為Project。
大部分情況下,你都不需要對這個文件做任何更改,但是理解他的內容和他在項目中所扮演的角色都是非常有必要的。下面是一個帶注釋的經典Top-Level構建文件。
Module-Level構建文件
做為項目級別構建文件的補充,每個module都有他自己的構建文件。下面是一個帶注釋的基礎的Module-Level構建文件。(部分注釋無法顯示完全,但是不影響理解)
其他gradle文件
作為build.gradle文件的補充,你的GradleScripts目錄下包含一些其他的gradle文件。大部分時間你都不會需要手動去編輯這些文件,因為在你對項目做相關改動的時候會自動更新這些文件。然而,理解這些文件在項目中扮演的角色依舊十分有必要。
gradle-wrapper.properties(gradle的版本文件:在高版本的gradle下已經隱藏該文件在GradleScripts的顯示)
這個文件允許其他人來構建你的代碼,甚至可以在他們機器上沒有安裝gradle的時候也可以。這個文件可以檢查是否安裝了正確版本的gradle,如果沒有的話將會下載需要的版本。在我們的示例app中gradle-wrapper.properties包含以下內容:
settings.gradle
這個文件引用了項目的所有module。因為我們的項目中只有一個module,所以這個文件非常簡單(就只有以下一行內容)。
gradle.properties(根項目目錄下的)
這個文件包含整個項目的配置信息。默認下為空,但是你可以在這個文件中添加屬性來對整個項目范圍做更改。
Local.properties(sdk位置)
這個文件告訴android的gradle插件,在哪裡可以找到androidsdk。例如:
注意local.properties包含了androidsdk在本地的安裝目錄,這意味著你不應該把這個文件加入sourcecontrol(xcode下的版本管理)
3、androidstudio用戶界面
現在你已經對所有自動生成的gradle文件都熟悉過了,是時候進一步來和gradle構建系統做進一步交互了。比較不錯的是你可以直接通過androidstudio的用戶界面來使用gradle。
在androidstudio的垂直和水平邊緣是一些打開不同工具窗口的選項卡。在接下來的幾個部分,我將會向你介紹一些androidstudio的gradle窗口工具,並展示如何通過這些窗口工具與gradle構建系統交互。
Gradle任務窗口
你可以使用gradle任務窗口來浏覽和執行在編譯一個可執行項目中存在的各種各樣的任務。
打開任務窗口的步驟,點擊androidstudio右手邊的Gradle選項卡。如果你更改了你的androidstudio用戶界面而且找不到你的Gradle選項卡的話,你可以選擇View>ToolWindow>Gradle。
在Gradle任務選項卡下,雙擊你的項目,在你的module後面,你會看到一個與該module關聯的所有gradle任務的列表。
當你雙擊gradle任務窗口中的某個任務時候,這個任務將會被執行,並且任務的輸出將會出現在另一個gradle相關的窗口中,那就是GradleConsole。
GradleConsole
GradleConsole展示gradle任務執行中的輸出,任何錯誤和警告都會被展示出來。
打開GradleConsole的步驟,選擇IDE右下角的GradleConsole選項卡。如果你更改了你的androidstudio用戶界面而且找不到你的GradleConsole選項卡的話,你可以選擇View>ToolWindows>GradleConsole。
讓我們使用GradleConsole來完整做一遍練習。在Gradle任務窗口,找到assemble任務,並雙擊它(assemble任務可以構建一個你應用的發布版本)。在assemble任務執行的時候,任務的輸出會出現在GradleConsole。
無論你的項目是否構建成功了,GradleConsole都將會通知你,如果出錯了,將會顯示“buildfailed”並將為什麼你的構建失敗了也一並顯示出來。
Terminal
你也可以通過Androidstudio繼承的Terminal來運行Gradle任務。如果你准確的知道你想要執行的任務,Terminal一般都是比在GradleConsole列表中尋找任務更快捷方便的方式。
打開Terminal的方式,點擊androidstudio左下角的Terminal選項卡,或者選擇View>ToolWindows>GradleConsole。Terminal會已經默認選中了當前目錄。你可以通過在Terminal中輸入Gradle任務並按下Return或者Enter來執行這些任務。
4、添加依賴
在本部分,我們將會探索怎樣可以使用Gradle來管理項目的module依賴,本地二進制依賴,以及遠程二進制依賴。
當為項目添加依賴時,gradle提供了幾種選擇。
選擇1:把文件丟進項目的libs/目錄下
關聯的build.gradle文件將會自動更新
選擇2:手動修改build.gradle文件
打開你的build.gradle文件並且添加一個新的構建規則到dependencies閉包(closure:groovy中的閉包規則,具體語法可以先看看groovy)中。例如,如果你想要添加一個google應用商店的服務,你的項目dependencies部分可能會類似下圖:
選擇3:使用androidstudio用戶界面
在project面板下,Control+Click(windows下直接右鍵單擊)你想要添加依賴的module然後選擇OpenModuleSettings。
選中Dependencies選項卡,然後點擊左下角的“+”按鈕。你就可以從以下列表中選擇:
lLibraryDependency
lFileDependency
lModuleDependency
然後你就可以輸入更多你想要添加到你項目中的依賴信息。例如,如果你選擇了LibraryDependency,Androidstudio就會顯示一個庫列表給你選擇。
一旦你添加了依賴,檢查你的Module-Level的build.gradle文件,應該已經自動更新進了新的依賴。
結語:
本文已經向你介紹了所有Androidstudio項目下自動生成的gradle文件。尤其是Top-Level和Module-Level的gradle文件,你也已經學會如何通過androidstudio用戶界面直接與gradle構建系統交互。
正如我們知道的,android是不讓在子線程中更新ui的。在子線程中更新ui會直接拋出異常Only the original thread that created a
概述:EventBus是一款針對Android優化的發布/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity
一. 百度地圖城市定位和POI搜索知識 上一篇文章百度地圖開發(一)中講述了如何申請百度APIKey及解決顯示空白網格的問題.該篇文章主要講述如何定位城市位置、定位自己的
先放上一張效果圖:在這裡,我對自己的筆記本全屏截圖,然後當作自定義ImageView的src內容放在真機上運行。可以看到這裡的圖片是可以移動和縮放的。在這裡先說清一點,如