Android Studio入門到精通

yangxi_001發表於2017-02-10

PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊!


目標:Android Studio新手–>下載安裝配置–>零基礎入門–>基本使用–>除錯技能–>構建專案基礎–>使用AS應對常規應用開發


AS簡介

經過2年時間的研發,Google終於正式釋出了面向Android開發者的整合開發環境Android Studio 1.2(穩定版)。Android Studio是Google開發的一款面向Android開發者的IDE,支援Windows、Mac、Linux等作業系統,基於流行的Java語言整合開發環境IntelliJ搭建而成。該IDE在2013年5月的Google I/O開發者大會上首次露面,當時的測試版各種莫名其妙的Bug,但是14年12月8日釋出的版本是穩定版。Android Studio 1.0推出後,Google官方將逐步放棄對原來主要的Eclipse ADT的支援,併為Eclipse使用者提供了工程遷移的解決辦法。不過相信作為Developer的你上手AS 1.0以後你再也不願意使用原來苦逼的Eclipse+ADT了,你會被AS的各種強大所吸引。


下載安裝

下載AS前先說下,AS安裝包分為含SDK版本和不含SDK版本下載,如果你有SDK,那麼完全可以下載不含SDK版本;不過下載了含SDK版本也沒事,安裝時選擇自定義SDK也可以,安裝後重新指定SDK路徑也可以,總之看個人愛好嘍。先吐槽下天朝的強大吧,不得不拜服天朝的牆。如果你有梯子請去Android Developer下載最新版的AS安裝包,如果你沒有梯子那也有個辦法,就是去Android Studio中文社群官網下載你的平臺需要的安裝包。

下載下來以後安裝的過程可以忽略了吧,能安裝的都是程式猿吧,所以安裝這點就不說了,注意已經正確安裝配置了JDK。

安裝好了以後首次執行AS可能一直停在Fetching Android SDK component information。如下介面:

AS

這是因為天朝的牆真的太高太厚把首次執行更新SDK給牆了。解決辦法就是關閉安裝嚮導,如果無法關閉可以在工作管理員中手動關掉程式(Ctrl+Alt+Del啟動工作管理員),然後開啟AS安裝目錄下的bin目錄裡面的idea.properties檔案,新增一條禁用開始執行嚮導的配置項:

disable.android.first.run=true

然後再啟動程式就會開啟專案嚮導介面,這個時候如果點選Start a new Android Studio project是沒有反應的,並且在Configure下面的SDK Manager是灰色的,這是因為沒有安裝Android SDK的緣故。這時候一般有兩種做法:

  1. 自己沒有SDK,需要從網路下載;開啟向導的Configure-Settings,在查詢框裡面輸入proxy,找到下面的HTTP Proxy,設定代理伺服器,並且將Force https://… sources to be fetched using http://選中,然後退出將上面在idea.properties配置檔案中新增的那條配置項註釋掉重新開啟Android Studio等剛開始的嚮導把Android SDK下載安裝完成就可以了。

  2. 自己有SDK,重新指定SDK路徑;開啟向導的Configure->Project Defaults->Project Structure,在此填入你已有的SDK路徑。

此時重啟AS就可以在嚮導裡新建Android工程嘍。至此整個安裝過程結束。


基本使用介紹

首先新建工程,輸入工程名和主包名和儲存路徑;點選next到如圖步驟:

AD

上圖中首先你可選擇你的App要適配的裝置是Wear還是Mobile還是TV。在你新建App選擇最低適配版本時,強大的AS會給你一些有用的統計提示,如圖描述了當前版本的使用者情況,點選Help me choose後彈出如下更加形象的分佈圖表描述:

這裡寫圖片描述

愛不釋手的亮點就是這麼一步一步比Eclipse強大的,這只是一些不值得一提的小點而已,強大的功能還在後面。繼續點選Next選擇形象友好的GUI模板,點選完成進入工程初始化過程。

第一次安裝工程初始化時由於需要聯網下載gradle會比較慢,不過有時候不是第一也會慢,工程依賴的gradle版本不匹配時也會自動重新下載;我的初始化很快,原因是我本地的gradle-2.2-all.zip之前已經下載OK的。至於啥時gradle後文會有說明。這兒只是告訴你若果你看到卡一會兒時正常的。

接下來進入到了工程介面下:

這裡寫圖片描述

這個建立過程可比Eclipse上長的多。主要是因為從gradle上下載。gradle也可以手動離線下載好放在對應目錄下。工程的結構和Eclipse上的不同,src下分為java和res。AS是基於idea,而idea和eclipse有大的區別,有好處也有不好的地方,在一段時間裡,idea被認為是開發java最好用強大的ide工具,所以AS新建的時候有new application和new module開發。idea沒有工作空間這樣的說法。這就是Eclipse使用者切換過來第一個比較不適應的地方。

具體說就是:

  1. android studio是單工程的開發模式
  2. android studio中的application相當於eclipse裡的workspace概念
  3. android studio中的module相當於eclipse裡的project概念

有了如上三條概念自己手動建立摸索下,相信聰明的你自然就明白咋回事了吧。

接下來看一些工欲善其事必先利其器的基本高頻率實用設定:

  1. 中文亂碼—–在視窗中,找到IDE Settings->Appearance,在右側勾選上“Override default fonts by”,然後在第一個下拉框中選擇字型為“simsun”,然後apply,重啟IDE,就好了。

  2. 設定快捷鍵—–在settings視窗中,找到IDE Settings->keymap,右側開啟的就是快捷鍵了。右鍵單擊要修改的快捷鍵,會彈出一個選單,選擇“Add keyboard shortcut”就可以修改快捷鍵了。刪除的話,在彈出的選單中選擇remove XXX即可。特別說明,在AS的快捷鍵設定裡可以直接設定使用Eclipse快捷鍵還是別的IDE快捷鍵。如果你熱衷Eclipse那麼也可設定成Eclipse的快捷鍵。

  3. 修改主題—–在IDE Settings->Appearance,右側的Theme選擇自己喜歡的主題即可。個人比較喜歡Darcula主題,也就是如上截圖樣式。

  4. 如何將Eclipse工程匯入AS使用—–選擇File->Import Project,在彈出的選單中選擇要匯入的工程即可,選擇好以後就直接next,在第二個視窗中也選擇預設的第一個選項就可以。需要注意的是,在AS中,有兩種工程,一個是Project,一個是Module,上面已經細說過了。

  5. 匯入jar包—–選擇File->Projcet Structure,在彈出的視窗中左側找到Libraries並選中,然後點選“+”,並選擇Java就能匯入Jar包了。或者直接拷貝jar檔案到專案的libs資料夾下,然後執行:Sync Project with Gradle Files。然後clean project重新編譯。

  6. 刪除專案—–AS對工程刪除做了保護機制,預設你在專案右鍵發現沒有刪除選項。你會發現你的module上面會有一個小手機,這是保護機制。刪除的第一步就是去掉保護機制,也就是讓手機不見,具體做法就是滑鼠放在工程上右鍵->open module setting,或者F4進入如圖介面,選中你要刪除的module,然後點選減號,這樣就取消了保護機制,然後回到專案工程右鍵就可發現刪除選項。注意:刪除會將原始檔刪除。

這裡寫圖片描述

  1. 修改工程目錄—–在建立專案的時候,在Project Location中選好工程目錄後,要自己輸入一個資料夾的名字用來儲存工程,然後就能使用自己的工程目錄了。

入門總結

到此為止AS的基本情況相信你已經有個大致瞭解了。具體比Eclipse的優勢體現在如下幾點:

  1. AS是Google專門為Android基於IntelliJ IDEA打造的利器。親生的永遠是最好的,只是現在還在成長中而已。

  2. AS在速度上不管哪一個方面都比Eclipse快。

  3. Darcula主題UI簡直就是極客範,帥爆了。

  4. 強大的智慧提示補全功能在寫程式碼時簡直比Eclipse高效率N倍。

  5. 智慧儲存,不需要Ctrl + S。效率會大大提升。

  6. 整合Gradle構建工具,Gradle集合了Ant和Maven的優點,不管是配置、編譯、打包都非常牛逼。

  7. UI編輯器簡直比Eclipse高效N倍,自帶了多裝置的實時預覽,簡直是神器。多語言適配點選地球直接輸入,再也不用比較那個string沒有翻譯了。

  8. 內建終端直接替代cmd命令列,一個IDE全部搞定。

  9. 完善的外掛系統,如Git、Markdown、Gradle等,直接搜尋下載。

  10. 版本控制系統,安裝的時候就自帶GitHub, Git, SVN等流行的版本控制系統,可以直接check out你的專案,邊寫程式碼邊右鍵可以直接具備BCompare功能與其他版本進行對比修改。

總之就一句話,相信我,若果你和我一樣是Eclipse使用者切換過來,那麼你絕對不會再切換回去,你會愛上AS的。


Android Studio目錄結構

新建工程專案後AS的Product目錄結構如下所示:

    .idea://AS生成的工程配置檔案,類似Eclipse的project.properties。
    app://AS建立工程中的一個Module。
    gradle://構建工具系統的jar和wrapper等,jar告訴了AS如何與系統安裝的gradle構建聯絡。
    External Libraries://不是一個資料夾,只是依賴lib檔案,如SDK等。
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

新建工程專案後AS的Module目錄結構如下所示:

    build://構建目錄,相當於Eclipse中預設Java工程的bin目錄,滑鼠放在上面右鍵Show in Exploer即可開啟資料夾,
        編譯生成的apk也在這個目錄的outs子目錄,不過在AS的工程裡是預設不顯示out目錄的,就算有編譯結果也
        不顯示,右鍵開啟通過資料夾直接可以看。
    libs://依賴包,包含jar包和jni等包。
    src://原始碼,相當於eclipse的工程。
    main://主資料夾 
        java://Java程式碼,包含工程和新建是預設產生的Test工程原始碼。 
        res://資原始檔,類似Eclipse。
            layout://App佈局及介面元素配置,雷同Eclipse。
            menu://App選單配置,雷同Eclipse。 
            values://雷同Eclipse。
                dimens.xml//定義css的配置檔案。 
                strings.xml//定義字串的配置檔案。 
                styles.xml//定義style的配置檔案。
                ......//arrays等其他檔案。
            ......//assets等目錄
        AndroidManifest.xml//App基本資訊(Android管理檔案) 
        ic_launcher-web.png://App圖示 
    build.gradle://Module的Gradle構建指令碼
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Android Studio開發除錯使用

Android Studio除錯其實也非常方便,一般問題直接通過AS的DDMS的Logcat就可以搞定。AS支援類似Eclipse的DDMS的所有功能。這裡要說的是疑難問題的除錯方式,即斷點除錯。

首先先編譯好要除錯的程式。

這裡寫圖片描述

如上圖2所示在行號處點選設定斷點。然後如1所示點選開啟除錯會話。

這裡寫圖片描述

如上圖所示,IDE下方出現Debug檢視,1指向的是現在除錯程式停留的程式碼行,2區域是程式的方法呼叫棧區。在這個區域中顯示了程式執行到斷點處所呼叫過的所用方法,越下面的方法被呼叫的越早。由此順序想必有些Android深入功底瞭解一點Android系統啟動流程的就知道這幾個方法咋回事,怎麼到Activity的onCreate的。哈哈,說到系統了。不扯了。3是一些除錯按鈕,快捷鍵放在上面直接會顯示。4和5是一些變數觀察區。

這裡寫圖片描述

上圖中:

點選1指向的按鈕,程式向下執行一行,如果當前行有方法呼叫,這個方法將被執行完畢返回,然後到下一行。

點選2指向的按鈕,程式向下執行一行。如果該行有自定義方法,則執行進入自定義方法(不會進入官方類庫的方法)。

點選3鈕在除錯的時候能進入任何方法。

點選4的作用是如果在除錯的時候你進入了一個方法(如debugFunc),並覺得該方法沒有問題,你就可以使用4跳出該方法,返回到該方法被呼叫處的下一行語句。值得注意的是,該方法已執行完畢。

點選5指向的按鈕後,你將返回到當前方法的呼叫處重新執行,並且所有上下文變數的值也回到那個時候。只要呼叫鏈中還有上級方法,可以跳到其中的任何一個方法。

這裡寫圖片描述

如上圖設定多個斷點,開啟除錯。想跨斷點移動到下一個斷點,點選如下圖1箭頭,程式將執行一個斷點到下一個斷點之間需要執行的程式碼。如果後面程式碼沒有斷點,再次點選該按鈕將會執行完程式。點選箭頭2指向的按鈕,可以檢視你曾經設定過的斷點並可設定斷點的一些屬性,如下圖所示。除錯開始後,在Variables區域可以給指定的變數賦值(滑鼠左鍵選擇變數,右鍵彈出選單選擇setValue…)。這個功能可以更加快速的檢測你的條件語句和迴圈語句。點選箭頭3加號或者在除錯的程式碼變數上右鍵新增watcher即可檢視跟蹤變數值。

這裡寫圖片描述

上圖箭頭1指向的是你曾經設定過的斷點,箭頭2可以設定條件斷點(滿足某個條件的時候,暫停程式的執行,如 index==5)。結束除錯後,應該在箭頭1處把所設的斷點刪除(選擇要刪除的斷點後,點選上方的紅色減號)。

以上便是AS的一些除錯使用技巧。


Android Studio構建系統基礎

基礎知識

專案建立成功後會自動下載Gradle,這個過程特別慢,建議翻牆。下載的Gradle在Windows平臺會預設在 C:\Documents and Settings\<使用者名稱>.gradle\wrapper\dists目錄,這個目錄下有個gradle-x.xx-all的資料夾,。也可以自己手動到Gradle官網下載對應的版本,然後將下載的.zip檔案(也可以解壓)複製到上述的gradle-x.xx-all 資料夾下。

每一個Module都需要有一個gradle配置檔案,語法都是一樣,唯一不同的是開頭宣告的是apply plugin。注意區分不同位置的build.gradle檔案。

AS的工程根目錄下的build.gradle檔案:

    buildscript {       //設定指令碼的執行環境
        repositories {  //支援java依賴庫管理(maven/ivy等),用於專案的依賴
            //mavenCentral()    //僅僅是不同的網路倉庫而已
            jcenter()           //推薦使用這個倉庫
        }
        //依賴包的定義。支援maven/ivy、遠端、本地庫、單檔案,前面定義了repositories{}jcenter庫,使用jcenter的依賴只需要按照
        //類似於com.android.tools.build:gradle:1.0.0-rc2,gradle就會自動的往遠端庫下載相應的依賴。
        dependencies {  
            classpath 'com.android.tools.build:gradle:1.0.0-rc2'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    //多專案的集中配置,多數構建工具,對於子專案的配置,都是基於繼承的方式。Gradle除了提供繼承方式設定子專案,還提供這種配置
    allprojects {
        repositories {
            jcenter()
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

AS的工程根目錄下的settings.gradle檔案:

    include ':app'      //module
    include ':my_lib'   //module(build as lib)
  • 1
  • 2
  • 1
  • 2

AS的工程根目錄下的Module的build.gradle檔案(此處以一個簡單的Lib module的gradle為例):

    //plugin在AS裡取值一般為'com.android.library'或者'com.android.application'
    apply plugin: 'com.android.library' //構建為lib

    android {
        compileSdkVersion 17            //編譯需要SDK版本
        buildToolsVersion "19.1.0"      //SDK Manager確定本地安裝該版本才可以

        defaultConfig {
            minSdkVersion 8         //最小版本
            targetSdkVersion 17     //目標版本
        }

        buildTypes {                //編譯項
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
        }
    }

    dependencies {                  //依賴支援
        compile 'com.android.support:support-v4:18.+'
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Gradle打包APP簽名

預設情況下,debug被配置成使用一個debug keystory。debug keystory使用了預設的密碼和預設key及預設的key密碼。debug構建型別會自動使用debug簽名配置。在你的Module的build.gradle檔案中新增:

    android {
        ......
        signingConfigs {
           myConfig{
             storeFile file("yanbober.keystore")
                storePassword "gradle"
                keyAlias "gradle"
                keyPassword "gradle"
            }
        }

       buildTypes{
         release {
            runProguard true
            zipAlignEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig  signingConfigs.myConfig
         } 
       }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

雖然經常使用專案根目錄的相對路徑作為keystore的路徑,但是也可以使用絕對路徑,儘管這並不推薦(除了自動建立出來的debug keystore)。執行gradle clean gradle build即可生成簽名混淆對齊的app。

Gradle構建Android應用多渠道包(批量打包)

Android應用的釋出需要面對各種各樣的市場,我們稱之為渠道。通常作為開發者我們需要知道應用是從哪個渠道下載的。這種統計資訊一般常用的是百度統計或者友盟統計。這裡舉例時使用友盟統計為例說明問題。原理是Gradle的Manifest Merger。

在AndroidManifest.xml裡配置所謂的PlaceHolder。

    <meta-data
        android:name="CHANNEL"
        android:value="${CHANNEL_VALUE}" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在模組build.gradle檔案的defaultConfig加上PlaceHolder,作用是宣告CHANNEL_VALUE是可替換值的PlaceHolder,同時為其設定yanbober預設值。

    android {
        ......

        defaultConfig {
            ......
            manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
        }   
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在模組的build.gradle檔案裡新增ProductFlavors配置。ProductFlavors其實就是可定義的product特性,與Manifest Merger使用就可以在一次編譯過程中產生多個具有自己特性配置的版本。下面這個配置的作用就是為每個渠道包產生不同的CHANNEL_VALUE的值。

    android {
        ......

        defaultConfig {
            ......
            manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
        }   
        productFlavors {
            yanbober{}
            wandoujia{}
            xiaomi{}
            baidu{}
        }
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [ CHANNEL_VALUE:name ]
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

批量生成多渠道包:進入工程目錄下執行gradlew assembleRelease。可以看到編譯一共產生了4個apk,分別對應在productFlavors段定義的4個渠道。反編譯開啟AndroidManifest.xml就會發現CHANNEL這一段的配置已經被修改。

生成單個渠道包:開啟AS的Gradle Tasks皮膚模組有很多工,直接雙擊對應的耽擱渠道任務生成對應的apk。用命令列單獨生成xiaomi渠道使用gradlew assemblexiaomiRelease就好了。

好了,Gradle的基本情況就說到這,具體可以閱讀官網或者查閱其他資料,Gradle的使用需要經驗的積累。


Android Studio外掛安裝及使用Genymotion模擬器

Android Studio自帶的模擬器速度已經比Eclipse外掛的快一點了,但是還不夠暴力,不夠爽。現在來說說最暴力的Genymotion模擬器如何結合AS使用。首先上Genymotion官網下載安裝Genymotion,同時你需要在Genymotion官網官網上註冊一個賬號,這樣你才能正常的使用Genymotion。

進入AS的Settings介面左側找到Plugins,點選下圖箭頭Button(也就是線上安裝):

這裡寫圖片描述

順便說下上圖介面也就是AS安裝外掛的通用方法,可以看見當前已經安裝了的外掛,選擇線上安裝或者從硬碟安裝,即針對你已經下載好了的外掛,可通過這項選擇到你下好的外掛,進行安裝。

如下圖所示在1區輸入外掛名字,2區選中,3區下載安裝,然後返回後在AS工具欄上可以看見Genymotion小圖示,也就是箭頭4指的那個玩意,說明安裝OK。

這裡寫圖片描述

接下來就是設定下Genymotion,新建一個虛擬機器裝置,這是Genymotion的東西,至於怎麼弄Step by Step就行,沒啥難度。完事點選AS上模擬器圖示就可以啟動使用了,執行AS程式選擇模擬器就可以在模擬器看見自己程式了,下圖就是Genymotion啟動起來的介面。

這裡寫圖片描述

至此快速模擬器Genymotion已經搞定,提升你的速度。其他的外掛安裝也就觸類旁通了。


其他

其他的也就是快捷鍵啥玩意的了。這東西就得自己積累慢慢整了,純屬積累熟練。詭異的問題就自行google和度娘了。其實到現在版本的AS還是有一些Bug的,但是滿足基本需求了,遇見Bug查閱修改繞過或者使用大招—-重啟AS一般就能解決,其他的詭異問題歡迎討論共同成長。

PS:其他問題上AD就行了,這文章基本也就是AD的翻譯版加上自己遇到的蛋疼問題的彙總了。

總之你會愛上他的。


Android Studio總結

到此你已經可以順利使用Android Studio進行應用程式開發。其他的問題相信聰明的您使用Google可以搞定,祝你好運!總之AS的強大需要你自己去慢慢探索,你會發現不知不覺你會愛上他的。

轉自:http://blog.csdn.net/yanbober/article/details/45306483

相關文章