編輯:關於Android編程
Gradle 是個啥,一開始我也沒弄清,官方解釋是:
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具
那麼Apache Ant和Apache Maven又是個啥?這個先忽略,那自動化建構工具呢?
我個人狹義的理解就是軟件環境部署和打包的工具,那麼.net 也有CruiseControl.Net持續集成 WIX生成安裝包,這是類似的東西,只是Gradle這個工具是google的親兒子,微軟在這方面就不怎麼給力了,功能強大一點的都是第三方工具。但是微軟有一個依賴管理工具不錯,就是NuGet,這個跟Gradle的依賴管理可以媲美。
在知乎上,我找到一個解釋的特別好的文章,這裡貼出來,以防以後鏈接失效原鏈接
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。當前其支持的語言限於Java、Groovy和Scala,計劃未來將支持更多的語言。上面是維基上對Gradle的解釋,相信一個沒有接觸過構建的人是不大能看明白的,當初我也是.下面是我對Gradle通俗的理解: 軟件開發講究代碼復用,通過復用可以使工程更易維護,代碼量更少….. 開發者可以通過繼承,組合,函數模塊等實現不同程度上的代碼復用.但不知你有沒有想過,軟件開發也是一種工程作業,絕不僅僅是寫代碼,還涉及到工程的各種管理(依賴,打包,部署,發布,各種渠道的差異管理…..),你每天都在build,clean,簽名,打包,發布,有沒有想過這種過程,也可以像代碼一樣被描述出來, 也可以被復用.舉個例子我是做Android開發的,你可知道國內有n個Android市場,n個手機品牌,n個手機尺寸……,一般公司都會針對不同的市場單獨發包用來統計不同渠道的下載量等情況,可能需要針對不同(品牌,尺寸等各種硬件信息)的手機做一些特殊的處理,這個時候你可以針對不同的情況單獨建一個工程,或者更好一點你可以通過一些變量來控制,像這樣:if(isMoto){do something}
else if(isHuawei){do something}
…
差異管理但這兩種解決方法都有自己的缺點,特別是前一種有極大的代碼重復.後一種稍微好一點,但這種方式的差異是運行時的,不是靜態的,對於moto手機上的處理邏輯對華為手機來說一點作用也沒有,但這一段針對moto手機的處理邏輯也被裝到了華為手機上了,通過gradle的productFlavor與buildtype可以實現靜態級的差異控制可以參考如何通過Gradle實現一套代碼開發不同特性的APK · ByGhui 說到前面的多渠道問題,不同的渠道一般會對應不同的渠道號,你當然可以通過修改一次打一個包這種純手工的方式來生成你的多渠道包,但據聽說國內某團購網站的Android App有100多個渠道.這裡出現了什麼?重復,反復的去打包而且這些包之前的差異很小(只是渠道號不同),和寫代碼一樣我們應該復用,通過Gradle可以實現一個命令打出所有的渠道包,一個命令打出指定的渠道包.再復雜一點,你可能需要不同的渠道對應不同的簽名文件,不同的icon,不同的服務器地址…這些都可以通過Gradle來方便的實現.依賴管理:做軟件開發你可能需要依賴各種不同的jar,library.你當然可以通過將.jar/library工程下載到本地再copy到你的工程中,但不知你是否聽說過國外有個叫中央倉庫的東西,在這個倉庫裡你可以找到所有你能想到以及你從來沒聽說過的jar,aar…The Central Repository Search Engine 這裡可以找到所有你需要的依賴,而你需要的只是指定一個坐標,如下:剩下的依賴的尋找,下載,添加到classpath等你都不需要去關心,通過這種方式來維護依賴的好處有以下幾點:剩下的依賴的尋找,下載,添加到classpath等你都不需要去關心,通過這種方式來維護依賴的好處有以下幾點:依賴不會進入到你的版本控制倉庫中(默認會緩存到~/.gradle/下)方便卸載裝載依賴(只是一條坐標依賴,不需要刪除即可)方便的版本管理,如上圖中的2.3.3既是picasso的版本號,若改為+就表示從中央倉庫中下載最新的版本不同工程的相同依賴不會存在重復副本(只在~/.gradle下存在一份)項目部署這方面我沒怎麼接觸過,但據我所知通過一些插件,可以實現自動將你的輸出(.jar,.apk,.war…)上傳到指定倉庫,自動部署…羅哩羅嗦說了這麼多,不知大家有沒有理解總結一下:Gradle是一種構建工具,它可以幫你管理項目中的差異,依賴,編譯,打包,部署……,你可以定義滿足自己需要的構建邏輯,寫入到build.gradle中供日後復用.Gradle不是一種編程語言,它不能幫你實現軟件中的任何實際功能通俗的解釋肯定是不嚴謹的解釋,不妥之處歡迎討論.###贊同過百,放出之前相關分享的幻燈片###截止到現在(1432311622353)共收到342個贊同與感謝,再次感謝大家的支持!如果你覺得我的分享對你有幫助,請關注我! 以後我會分享更多更優質的內容給大家.說好的幻燈片在這裡(是之前在letv時一次內部分享的幻燈片,內容有刪減(涉及到公司具體項目的部分),此幻燈片參考了很多其它的資料,內部的鏈接很值得大家打開看看)
AS其實就是Intellij IDEA的安卓開發環境特供版(谷歌定制版),Intellij IDEA是有收費版本的IDE。Ant和Maven都是基於XML的構建工具,Gradle是用Groovy編寫的構建工具,Groovy是JVM衍生的與JAVA語法高度兼容的動態強類型語言。Gradle通過編寫一個名為build.g…
AS其實就是Intellij IDEA的安卓開發環境特供版(谷歌定制版),Intellij IDEA是有收費版本的IDE。Ant和Maven都是基於XML的構建工具,Gradle是用Groovy編寫的構建工具,Groovy是JVM衍生的與JAVA語法高度兼容的動態強類型語言。Gradle通過編寫一個名為build.gradle的腳本文件對項目進行設置,再根據這個腳本對項目進行構建(復雜的項目也有其他文件)Gradle 腳本本質上就是Groovy腳本,只不過高度利用了groovy的語法糖,例如省略方法參數括號和省略句尾分號等,讓代碼看起來像DSL。所以幾乎所有java和groovy支持的語法,它的腳本都支持。(使用JAVA和GROOVY的SDK應該也是沒問題的)Gradle支持基於慣例的構建,並有豐富的適合不同情景下的插件庫,光有官方用戶手冊支持的就有20多種,方便構建。Gradle裡有兩個基本概念:項目(projects)和任務(tasks)。項目由多個任務組成,一個項目可以理解為提供給不同設備的構建版本,如桌面版、網頁版、安卓版、iOS版等等,也可以理解為一種行為,例如部署應用到生產環境。任務相當於Ant的target,可以理解成一個構建中原子性的工作,例如編譯、打包、執行等。需要注意的是,Ant中他自己的命令例如javac、copy等也叫做task,但Ant的task遠沒有Gradle的task那麼自由。Gradle的構建分兩個階段,第一階段是設置階段(configuration phase),分析構建腳本,處理依賴關系和執行順序等,腳本本身也需要依賴來完成自身的分析。第二階段是執行階段(execution phase),此階段真正構建項目並執行項目下的各個任務。Ant與Maven對於Gradle,前者編寫容易,但功能有限,需要人工操作的過程也多;後者依托於龐大的依賴倉庫,因此有著強大的外部依賴管理,但添加本地依賴並不方便,且項目不能靈活修改。而Gradle能很好地結合Ant與Maven各自的優點,可以隨意的編寫任務並組合成項目,直接利用Maven倉庫,並且能很好的支持傳遞依賴和內部依賴。(本部分為個人主觀意見,可能與大多數人的意見並不相同)(其實也都是別人的個人主觀意見,來源於我當初搜索的Gradle相關文章內容)通俗一點類比成吃飯的話,大致就是:Ant是自己買菜洗菜燒水做飯,Maven是去飯店點餐,Gradle是3D打印食物。
你都說了要通俗的理解,那就用不著學習什麼理論了,通俗著來就是了。通俗的說:gradle是打包用的。你覺得解決你的問題了嗎?如果沒解決,那是你的問題提得不夠好。比如我猜你應該提:為什麼要打包發布,打包發布有幾種常見方法,為什麼這些常見方法中要選gr…
你都說了要通俗的理解,那就用不著學習什麼理論了,通俗著來就是了。通俗的說:gradle是打包用的。你覺得解決你的問題了嗎?如果沒解決,那是你的問題提得不夠好。比如我猜你應該提:為什麼要打包發布,打包發布有幾種常見方法,為什麼這些常見方法中要選gradle,等等。針對我猜的這些內容,通俗的講是這樣的:以在eclipse裡面寫java程序為例為什麼需要打包:最初寫完了,直接右鍵run就可以了。但是程序寫完了畢竟是要發布到服務器上或者給別人用的,你第一不可能讓所有要運行的人都裝個eclipse,第二不可能把源代碼公布給所有人。所以你需要把你的代碼發布成二進制形式,讓其它環境方便運行,這就是打包。為什麼用ant打包的時候要做很多事,比如說配置文件中的用戶名和密碼,你本地開發和程序實際運行時的內容肯定不一致,所以需要有兩個文件,開發的時候用一個,實際運行的時候用一個。這樣每次打包的時候都要重復的做這些事,ant可以讓你用xml的形式把這些事情寫成腳本,然後自動運行。為什麼用maven你的項目要用很多jar包,比如你寫日志要用個log4j吧,連數據庫要用個connector吧。這年頭寫程序不用個spring都不好意思出門,下載下來的spring包打開一看,密密麻麻的好幾十個jar,不知道用哪個不用哪個。而且,即便是你一狠心把這些jar包都放進來,很大可能性還是不能運行,因為還要依賴其它的jar包。哪天想升級個spring小版本,所有jar包都要重來一遍,你也不記得哪些是由於spring引進來的jar包了。所以有了maven,你只要配置一下說我要用spring 3,所有jar包都給你下載好了,你直接運行就行了。趕明兒想升級版本,直接把3改成4,新的jar包也給你下載好了。然後?用了maven,jar包是方便了,但我打包的時候還是有好多事要做啊,然後你會發現maven實在是不知道怎麼做這些事,於是開始懷念ant。gradle就是又能干maven的活,又能干ant的活,用groove語言寫腳本,表達能力還更強。就這意思。===我也是這兩天才看了兩眼gradle,了解不深。簡化版如下:ant可以自動化打包邏輯。maven也可以自動化打包,相比於ant,它多做的事是幫你下載jar包。但是maven的打包邏輯太死板,定制起來太麻煩,不如ant好用。gradle就是又能自動下jar包,又能自己寫腳本,並且腳本寫起來還比ant好用的這麼個東西。
gradle是一個工程構建工具,java代碼,和資源文件需要經過sdk裡的一些程序如aapt等處理,才能形成apk包。gradle就是把那些步驟變得簡單化。相當於eclipse中的ant吧!
gradle是一個工程構建工具,java代碼,和資源文件需要經過sdk裡的一些程序如aapt等處理,才能形成apk包。gradle就是把那些步驟變得簡單化。相當於eclipse中的ant吧!
一句話概括就是:依賴管理和任務執行。像Ruby裡面的bundler+rake,像iOS中的cocoapods,像node中的npm+grunt.通俗的講就是:你的項目需要哪些第三方庫,它幫你把它們都下載下來,並且編譯好放到指定的位置,你就直接可以import後用了。它本身是基於Apache的an…
一句話概括就是:依賴管理和任務執行。像Ruby裡面的bundler+rake,像iOS中的cocoapods,像node中的npm+grunt.通俗的講就是:你的項目需要哪些第三方庫,它幫你把它們都下載下來,並且編譯好放到指定的位置,你就直接可以import後用了。它本身是基於Apache的ant和maven的,但都不是特別好用,要引入一個庫,還得寫好多行的XML,麻煩死了。而且他們在任務執行上都比較弱,所以gradle就逐漸發展壯大了並被Google所推崇了。
突然發現好久沒有寫博客了,一直放到筆記裡面,今天update一下。最近做的一個項目中,是盒子+電視,用戶通過遙控器來操作。這裡只是說下GridView在當前業務下的簡單使
本文將介紹Android中Resource Types的drawable、menu、layout。如需訪問官方原文,您可以點擊這些鏈接:《Drawable Resourc
Android HorizontalScrollView 水平滑動 listview 上動態添加圖片 最近遇到了個 在listview展示廣告
在android中一共有 多種事件,每種事件都有自己相對應的處理機制 如以下幾種 1 單擊事件 View.OnClickListener pub