如何從eclipse轉入android studio,感覺Gradle什麼的很難理解的。有什麼教程嗎?


只收藏不點贊的人都什麼心態,麻煩收藏的時候,順便點個贊,多謝了。

stormzhang博客精華 有一個Gradle 的教程,足夠你入門啦。

  • Android Studio系列教程一--下載與安裝

  • Android Studio系列教程二--基本設置與運行

  • Android Studio系列教程三--快捷鍵

  • Android Studio系列教程四--Gradle基礎

  • Android Studio系列教程五--Gradle命令詳解與導入第三方包

  • Android Studio系列教程六--Gradle多渠道打包

當然英文好的話,有更多好的資源

  • Configuring Gradle Builds

  • Getting Started · Building Android Projects with Gradle

  • Android | Gradleware

  • Announcing .. Gradle Tutorial Series

最後兩篇美團Android 團隊的文章奉上

  • http://tech.meituan.com/mt-apk-packaging.html

  • http://tech.meituan.com/mt-apk-adaptation.html


如果問把項目從Eclipse轉到Android Studio難嗎?可以說不難,網上找找都有解決方法。這是官網的方案:《Migrating From Eclipse Projects》。從Eclipse一鍵導出就好。

Gradle難嗎?我想說它真得很讓我抓狂。好在組裡有很多大牛,配置Gradle的事情都由他們完成了,我只要會使用基本的指令就可以了。不過我還是稍微學習了一些關於Gradle的知識,可以分享一下。但是對於為什麼為什麼Google會選擇Gradle作為Android Studio的自動編譯,我們組裡也是抱怨良多。

我個人學習Gradle是這樣的:

首先要了解Groovy,這是Gradle實現的語言。Groovy雖然是JVM語言,但是這語言基本就像還在試驗中的。可以在官網Groovy - Documentation了解基本內容,但是上邊的文檔也是相當讓人抓狂的。網頁上有廣告不說(W3Schools 也有廣告,但是別人不是官網),內容有些還有「未完待續」的。

不過因為是Java的超集,所以應該還是可以很快了解語法和結構的。

了解Groovy最重要的應該看看它的Closure,那神奇的用花括弧對{}表示閉包的方式,是其發展Domain-specific language的關鍵。而Gradle就是其中一種DSL。然後看一下Dynamic Groovy,了解一下Groovy的XmlProcess,大致一概有個數來進入下一步:了解Gradle。

接著是了解Gradle,翻看其Gradle官方PDF文檔,頭髮已經要抓下來了,竟然有60多個章節。我是沒有看完,只是了解了一下什麼Project,task,flavor,什麼plugin,還有怎麼build簡單的Java程序。但知道我每天在使用的指令都是用來幹什麼的了。

這還沒有完,Gradle是給Java還有其他一些JVM語言的。要編譯Android,還需要Google開發給Android用的Gradle Plugin。已經開始抓破頭皮了。

好了現在可能差不多了,但是為什麼我還是不會自己寫Gradle。無所謂了,反正開發常有而配置不常有。


大部分人對Gradle表示一臉懵逼,每當遇到一個問題的時候都需要從網上去查,這是一個誤區。

Gradle不單單是一個配置腳本,它的背後是幾門語言,如果硬讓我說,我認為是三門語言。

  • Groovy Language
  • Gradle DSL
  • Android DSL

DSL的全稱是Domain Specific Language,即領域特定語言,或者直接翻譯成「特定領域的語言」,算了,再直接點,其實就是這個語言不通用,只能用於特定的某個領域,俗稱「小語言」。因此DSL也算是語言。

在你不懂這三門語言的情況下,你很難達到精通Gradle的程度。這個時候從網上搜索,或者自己記憶的一些配置,其實對你來說是很大的負擔。但是把它們當做語言來學習,則不需要記憶這些配置,因為語言都是有文檔的,我們只需要學語法然後查文檔即可,沒錯,這就是學習方法,這就是正道。

我會持續地發文章來講解上述三門語言,如下是第一篇:Gradle從入門到實戰 - Groovy基礎


Android Studio jar、so、library項目依賴, Gradle的沒介紹,自學。。


優達學城(Udacity)上有一套Gradle作者講解的Gradle免費視頻課程

《用 Gradle 構建 Android 和 Java》

地址:用 Gradle 構建 Android 和 Java(中/英)

課程是英文的,但是有中文字幕,結合AndroidStudio講解Gradle,個人覺得挺基礎也挺詳細的的,建議一邊看視頻一邊跟著敲代碼。


難的不是Gradle,而是你的學習習慣不對。

靜下心來,別浮躁,打開官網看文檔,網上搜下別人的學習筆記,不出1小時你就能用Gradle,不出3小時你就會用Gradle,用一段時間(根據你使用Gradle的頻率)你就覺得Gradle真簡單真好用,去學吧!


  • 官方文檔https://gradle.org/documentation/

  • Gradle實戰中文版關於本書 | Gradle 實戰


才發現, 我的回答放錯位置了

如果你需要 presentation 的話, 我給公司的同事培訓過很多次 Android Gradle

最新的課程是 "Android Gradle 從入門到GG" 課

該系列課程涵蓋Android Gradle基本使用與自定義, 使用Gradle驅動各種各樣的Android需求, Gradle插件開發, Gradle CI集成, 以及Google Android Gradle插件

作者:君牢

鏈接:求比較好的gradle的入門指引? - 君牢的回答

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

求比較好的gradle的入門指引? - 君牢的回答


善用google


項目結構的變化的不適應會給人造成一些困擾,實際上我從eclipse轉入android studio後,就完全拋棄了eclipse,幾個方面的比較:

1.android studio 無所不在的源碼查看,幾乎所有導入的jar包,只要你想看源碼,點擊一下,android studiod就會自動反編譯出來。而不需要導入source

2.gradle腳本編譯完全優於傳統的ant編譯,我們可以不care編譯用到的包的依賴關係,是真正的申明式使用。

3.android studio的instant run 如果配置得當,啟動速度飛快。

gradle腳本初次接觸確實比較頭疼,好像一直有個上帝之手在後面做著工作,如果理解了它的運行原理,就能夠坦然面對和使用了。可以參考:

gradle實踐系列:入門概覽

gradle實踐系列:插件與依賴

gradle實踐系列:android gradle插件(1)

gradle實踐系列:android gradle插件(2)

gradle實踐系列:android gradle插件(3)

gradle實踐系列:android gradle插件(4)

gradle實踐系列:一個常見gradle腳本例子

android studio初次啟動慢卡有效解決辦法


Android Studio 中文社區:Android Studio 中文社區:安卓開發環境搭建-AndroidStudio-SDK-Gradle-下載/安裝/升級/使用/漢化/學習/培訓;

Studio教程:Studio教程 - AndroidStudio專家問答社區;

Gradle教程:Gradle教程 - AndroidStudio專家問答社區。


gradle基本知識

Gradle task - freeCode


如果你JAVA項目的基礎比較弱,還是了解一下 Ant 和 Maven,然後Gradle就能踏實的入門了。

第一代Java Build Tool: Ant, 特色是用XML作為配置腳本,類似於makefile。但是需要的第三方庫,要自己當下來放到本地。

第二代Java Build Tool: Maven,特色也是用XML作為配置腳本,第三方庫不用下載,只要配置好版本,自動幫你下載。

第三代Java Build Tool: Gradle 橫空出世啦。 用XML寫配置腳本,太他媽的繁瑣了,我們用Groovy語言,很簡潔;XML不能寫邏輯,但是Groovy可以,巨大的靈活性。第三方庫可以直接用Maven的。

Gradle的參考書:

《Building and Testing with Gradle》

《Gradle: Beyond the Basics》

《Gradle Recipes for Android》

三本書都很薄,請順序學習。好啦,你入門啦。

Gradle在國內招人恨的一個原因,是因為防火牆,從國外的庫裡面下東西太慢。


其實作為android 的初學者,並不知道你們在說些什麼~


先按教程把AS的hello world項目給搭建起來...

然後題主就可以「胡作非為」了

PS:什麼,你連hello world都沒搭好...gradle你能理解容易嗎?


《Android Gradle 權威指南》,這本書里包含了很多實用技巧、實戰經驗以及原理分析,今天這篇文章主要介紹下如何隱藏我們打包的簽名密鑰,因為這個不能讓每個開發者都,會有安全隱患,但是我們又可以讓每個開發者打包,在講之前,我們先看下什麼是Gradle,什麼是Android Gradle。

## 什麼是Gradle

Gradle是一款非常優秀的構建系統工具,它使用可以配置的DSL語言描述構建流程,同時允許我們使用原生的Java和Groovy編碼的方式進行構建,所以相比Ant、Maven這些非常靈活。

在Gradle中,大部分的構建都是通過Gradle的插件來完成的,插件是Gradle非常好的一個設計,Gradle提供了一個核心可以擴展的平台,然後通過插件來擴展Gradle的能力,靈活方便。

Gradle本身提供了非常多的插件,比如java,war,scala等,可以滿足我們的絕大多數需求。如果內置的插件不能滿足需求,可以使用第三方開發的插件,甚至自己開發可以滿足自己需求的插件。

Gradle官網:[Gradle Build Tool](Gradle Build Tool)

Gradle文檔:[Gradle | Documentation](Gradle | Documentation)

Gradle插件:[Gradle - Plugins](Gradle - Plugins)

如果沒有梯子,下載不了Gradle,我這裡有個自己搭建的鏡像可以使用 [常用工具的CDN鏡像 Chrome Android Studio Gradle VSCode NodeJS](常用工具的CDN鏡像 Chrome Android Studio Gradle VSCode NodeJS)

## 什麼是Android Gradle

剛開始我們做Android開發的時候,採用的是Eclipse+Ant的構建方式,後來Android團隊打算採用基於IDEA的Android Studio的時候,採用了Gradle進行構建,為了能和Android Studio進行無縫整合,Android團隊開發了Android Gradle這個Gradle的第三方插件,用於Android的開發構建。使用Android Gradle,我們可以更好的:

1. 代碼和資源的復用

2. 很方便的創建App的衍生版本

3. 可以滿足自定義、擴展,而且非常容易

4. 當然不能少的,可以和Android Studio無縫整合

Android團隊開發了三個Android Gradle插件,但是他們都屬於一套代碼庫。這三個插件名字分別為:

1. com.android.application

2. com.android.library

3. com.android.library

從名字上看,其實他們分別對應我們Android的 Android App開發,Android Lib庫開發以及Android Test測試工程的開發。

使用這三個插件也非常容易,和Gradle使用其它插件的方式一樣,因為這是一個非內置自帶的,第三方插件,所以我們首先得聲明classpath的依賴,才可以使用,和jdk的classpath很像。

```groovy

buildscript {

repositories {

jcenter()

}

dependencies {

classpath "com.android.tools.build:gradle:2.2.3"

}

}

```

我們配置里倉庫為jcenter,這樣當我們配置依賴的時候,gradle就會去這個倉庫里尋找我們的依賴。

然後我們在dependencies{}配置里我們需要的是Android Gradle2.2.3版本的插件。

buildscript{}這部分配置可以寫到根工程的build.gradle腳本文件中,這樣所有的子工程就不用重複配置了。

以上配置好之後,我們就可以應用我們的Android Gradle插件了。

```groovy

apply plugin: "com.android.application"

android {

compileSdkVersion 23

buildToolsVersion "23.0.1"

}

```

android{}是Android插件提供的一個擴展類型,可以讓我們自定義Android Gradle工程。compileSdkVersion是編譯所依賴的Android SDK的版本,這裡是API Level;buildToolsVersion是構建該Android工程所以的構建工具的版本。

以上應用的是一個App工程插件,應用Android Library插件和Android Test插件也類似的,只需要換成相應的id即可。

## 隱藏Android簽名文件和密鑰信息

很多團隊一開始的成立的時候,十來個人,三五條槍,就開始創業了,每個組基本上就一個人,扛起所有。開始的時候,大家都不知道這款產品是否可以成功,所以也都沒想那麼多,只能小步快跑,快速迭代,佔領市場,搶佔用戶,這才是最重要的。

隨著產品越做越好,團隊越來越大,組內成員越來越多,就開始注重團隊協作,編碼規範,性能安全,團隊建設等等,因為只有做到這些,整個團隊的工作效率和產出才能更高,才能有團隊的威力,越到最後靠的是團隊,而不是一個人。

說著說著快跑題了,扯到團隊建設和管理上了O(∩_∩)O~,這個以後有時間再交流,大家有想法也可以加微信公公眾號`flysnow_org`一起交流。說以上那麼多,就是現在團隊大了,人多了,要正規了。

以前我們都是把App的簽名證書和相關密鑰放在項目中,託管在git上,這樣做非常方便,可以直接訪問打包,並且藉助git這個代碼管理平台維護管理。但是簽名信息這個是我們應用非常重要的信息,屬於公司重要的資源,所以我們要做到分級管理,保證安全,這也是公司保密措施的一部分,所以基於此,簽名信息需要隱藏,但是又可以讓大家都可以使用這個簽名打包。

簽名信息既然不能放在項目中,那麼就需要有個地方存放他們,既然不能在每個開發者的電腦上,那就只能放到構建的伺服器上,所以要實現這個,你還得有自己的專門用於打包發版的伺服器,我們把簽名文件和密鑰信息放到伺服器上,在打包的時候去讀取即可,下面我們以使用環境變數的方式為例,當然還有更多方式,比如配置文件等等。

```groovy

android {

compileSdkVersion 23

buildToolsVersion "23.0.1"

signingConfigs {

def appStoreFile = System.getenv("STORE_FILE")

def appStorePassword = System.getenv("STORE_PASSWORD")

def appKeyAlias = System.getenv("KEY_ALIAS")

def appKeyPassword = System.getenv("KEY_PASSWORD")

release {

storeFile file(appStoreFile)

storePassword appStorePassword

keyAlias appKeyAlias

keyPassword appKeyPassword

}

}

buildTypes {

release {

signingConfig signingConfigs.release

zipAlignEnabled true

}

}

}

```

然後我們在打包的機器上配置以上環境變數即可,window和linux的方式不一樣,關於配置環境變數這一塊的知識,大家可以自行google一下。

如果你是使用Jenkins這類CI打包,以Jenkins,它的配置里就可以指定Jenkins使用的環境變數,這樣我們就不用區分linux和window了,只需要在Jenkins里配置即可。

以上配置好之後,我們就可以進行打包使用了,簽名信息也做了隱藏,看到這裡,相信大家也意識到了一個問題,那就是每個開發者電腦上並沒有如上的環境變數配置,因為簽名信息對他們是隱藏的,那麼他們如何進行打包測試呢?這就需要我們兩個一個debug簽名上場了,我們直接使用android自己提供的debug簽名即可,因為我們需要的是簽名,保證可以生成App測試(非debug調試)即可,比如給測試。

首先我們要從我們自己的電腦目錄上提取出來Android自帶的debug簽名,一般在你的${HOME}/.android/目錄下,找到後拷貝到我們的工程目錄下,其次找到他們的簽名信息,比如密碼,key等,這是公開的,我們可以參考Android文檔。

```groovy

android {

compileSdkVersion 23

buildToolsVersion "23.0.1"

signingConfigs {

def appStoreFile = System.getenv("STORE_FILE")

def appStorePassword = System.getenv("STORE_PASSWORD")

def appKeyAlias = System.getenv("KEY_ALIAS")

def appKeyPassword = System.getenv("KEY_PASSWORD")

//當不能從環境變數里獲取到簽名信息的時候,就使用項目中帶的debug簽名

if(!appStoreFile||!appStorePassword||!appKeyAlias||!appKeyPassword){

appStoreFile = "debug.keystore"

appStorePassword = "android"

appKeyAlias = "androiddebugkey"

appKeyPassword = "android"

}

release {

storeFile file(appStoreFile)

storePassword appStorePassword

keyAlias appKeyAlias

keyPassword appKeyPassword

}

}

}

```

關鍵的邏輯就是在signingConfigs中加了判斷代碼,如果簽名信息四要素中的任何一個沒有獲取到,就使用默認的簽名信息,這樣當我們在打包伺服器進行打包的時候就會使用正式發布的簽名,因為我們已經在伺服器上配置了簽名信息的環境變數;當每個開發者自己生成Release包的時候,因為本機沒有配置,就使用默認的簽名。

假如有的開發者有時候也需要使用正式發布的簽名打正式的包,用於升級測試等目的,也是可以做到的,比如Jenkins,給每個開發者開放一個賬號,他們自己新建個Job就可以打正式的包了,打了之後可以在生成的構建里下載。

這裡要隱藏我們的簽名信息,既能保證簽名信息的安全性,又可以進行正式的打包,其中的關鍵點是一個專有的打包伺服器,如果你們公司還沒有的話,趕緊試試吧,好處多多,從這個小技巧也可以看到Gradle的靈活性,我們和編寫Java代碼一樣編寫我們的構建打包流程。

## 小結

《Android Gradle權威指南》已經出版上市,大家可以前往京東、亞馬遜、噹噹等各大商城購買,學習更多的Android Gradle知識,購買鏈接如下,也可以掃描下面的二維碼和作者互動交流。

[京東購書](Android Gradle權威指南)

[噹噹購書](Android Gradle權威指南)

![掃碼關注](http://www.flysnow.org/about/qrcode_for_weixin.jpg)


因為Gradle是基於Grovvy來構建的, 所以想要會用Gradle 而不是 百度粘貼代碼的話, 那麼我們就首先需要去 了解Grovvy 的基本語法。

這裡推薦鄧平凡的一篇博客: 深入理解Android之Gradle - Innost的專欄 - CSDN博客

Grovvy Api: http://www.groovy-lang.org/api.html

Gradle Javadoc: https://docs.gradle.org/current/javadoc/

看往博客後,相信你就會對Grovvy 以及 Gradle 有一定的了解,並且自己可以用來寫點東西了。


對於初學者來說,gradle是不好理解,可以通過下面步驟去學。

1.先學會你應用到的配置,安卓相關的配置可以搜索 android gradle dsl reference,官方文檔有所有配置的詳細解釋

2.當你學會了配置,可能不清楚這種配置的作用,也就是gradle的運行原理,這個時候你就要去gradle官網學習一下task,project,plugin,settings相關的api了。如果這些你都理解了,你應該理解gradle的運行原理。

3. 學會了上面步驟,你就可以去看一些開源gradle插件,比如tinker的gradle插件,嘗試自己寫一個小插件,加深理解


我也是真的不理解這個啊。馬克然後拜讀


AS 很好用的 要不是有些項目必須要 用elp 我才懶得用 多用用就習慣了


推薦閱讀:

「安卓開啟USB調試後大量耗電」的說法正確嗎?
可以通過修改手機基帶來收發自定義信號嗎?
Android 關機為什麼不能啟動鬧鐘?
同一個App,Android版本的開發周期是否要比iOS版本的長一些?為什麼?
手機qq為什麼這麼耗電?

TAG:Android開發 | Eclipse | Android | IntelliJIDEA | Gradle |