閱讀498 返回首頁    go 阿裏雲 go 技術社區[雲棲]


愛上Android之選擇您的開發工具

本文摘自人民郵電出版社異步社區《愛上Android》

京東地址:https://item.jd.com/12144527.html
試讀地址:https://www.epubit.com.cn/book/details/4885

第2章 選擇您的開發工具

工欲善其事,必先利其器。選擇一個好的IDE可以大幅提高開發效率,節省下的時間可以去多學習新知識,多陪陪家人。接下來就手把手領著大家把開發環境搭建起來。

2.1 準備軟件,認識Android Studio

之前開發Android一般用Eclipse+ADT插件,但是Google已經停止維護ADT了,本書鄭重地建議大家,不要用Eclipse開發了,改用Android Studio開發。

當然Android程序大部分是使用Java語言開發的,所以安裝Java環境是必須的,需要大家下載JDK,目前最新版本是JDK 8。需要注意的是,大家必須準備JDK 7以上的版本(如果使用的是Android Studio 2.1以上的版本,必須準備JDK 8以上),否則達不到Android Studio的安裝要求,建議準備JDK 8(可以使用lambda語法)。如果是64位操作係統,建議安裝64位的JDK;如果是32位操作係統,隻能安裝32位的JDK。

在Windows操作係統中右鍵單擊我的電腦→屬性就可以查看當前係統的位數。

JDK下載方式非常簡單,直接用百度搜索JDK的下載網站,下載下來直接打開,一直點擊下一步按鈕就可以安裝成功。

上麵都不是重點,大家如果有Java基礎,這些應該都會了;如果沒有Java基礎,最好先了解一下Java,接下來就進入重點,了解一下Android Studio。

2.1.1 什麼是Android Studio

Android Studio是一個基於IntelliJIDEA的新的Android開發環境。與Eclipse ADT插件相似,Android Studio提供了集成的Android開發工具,用於開發和調試。

Android Studio於2013年5月16日在穀歌I/O大會正式對外發布,Google希望Android Studio能讓應用開發更簡單、高效。

Windows、Mac OS X、Linux三大平台全部支持。

2015年年底,Google開發者大會期間推出了Android Studio 2.0,讓Android Studio編譯和運行速度提高了50倍。

Android Studio 2.2完美兼容了NDK開發,可以完全擺脫ADT。

2.1.2 為什麼使用Android Studio

原因一:Android Studio是穀歌開發的,專門為Android開發量身定做的編輯器。

原因二:Android Studio最核心的功能就是智能代碼編輯器,它能幫助我們非常高效地完成代碼補全、重構和代碼分析。做過開發的讀者都知道,沒有代碼提示,估計 90%以上的人就不會寫代碼了。

原因三:Android Studio的速度更快、更加智能,集成了版本控製係統、代碼分析工具、UI編輯器、Gradle構建工具、Android Monitor、模擬器、各種模板和示例等,還有各種強大的插件支持。

原因四:穀歌宣布將在2015年年底前停止對Eclipse Android開發工具的一切支持,包括ADT插件、Ant構建係統、DDMS、Traceview與其他性能和監控工具。

有了上麵這四大原因,你還有什麼理由不用Android Studio?

2.2 安裝Android Studio

2.2.1 安裝配置要求

現在的電腦配置越來越高,圖 2-1 所列的配置要求基本上很容易就能達到了。如果你的電腦配置不滿足這些要求,就需換台電腦了。

▲圖2-1 需要滿足的基本係統要求

2.2.2 下載地址

官方下載地址:

官網:https://developer.android.com/sdk/index.html。

中文官網:https://developer.android.google.cn/studio/index.html。

官網打開樣式如圖2-2所示,這裏提供了三大平台的安裝包,選擇對應的平台進行下載。

▲圖2-2 Android Studio

采用官方鏈接,可以直接下載全部安裝包,裏麵主要包含Android Studio安裝包和Android開發SDK(開發工具包)。當然也可以分開下載。

2.2.3 安裝JDK

首先需要下載JDK,安裝完成JDK,配置JDK環境變量。下麵以Windows平台為例進行演示。

右鍵單擊我的電腦→屬性→環境變量,配置JAVA_HOME環境變量。

參考如圖2-3和圖2-4所示的內容。

▲圖2-3 配置環境變量

2.2.4 安裝Android Studio

安裝過程中的簡單操作在這就不進行截圖講解了,因為隻需要點擊Next按鈕。

本文使用“包含SDK”的安裝文件進行講解,其中包含了“不包含SDK(軟件開發工具包)的安裝文件”的安裝步驟。如果使用“不包含SDK的安裝文件”進行安裝,安裝步驟隻會比這些步驟少。

如果使用壓縮包安裝,直接解壓縮就可以用了。本節內容可直接跳過。

步驟1

如圖2-5所示,第一個選項:Android Studio程序,必選。第二個選項:Android SDK(安卓開發工具包),如果電腦中已經存在Android SDK,可以不勾選。第三個選項和第四個選項都和虛擬機有關係,如果不使用虛擬機或者SDK中的虛擬機,可以不勾選。

▲圖2-4 配置環境變量

▲圖2-5 步驟1

步驟 2

如圖2-6所示,選擇Android Studio和Android SDK的安裝目錄。

▲圖2-6 步驟2

步驟 3

如果在步驟1中勾選了HAXM(也就是第四個選項,HAXM為虛擬機提供加速服務),就會出現這一步。

需要根據自己機器的內容大小來設置這個值,一般建議默認即可,如圖2-7所示。

▲圖2-7 步驟3

步驟 4

如圖2-8所示,Android Studio的運行需要VC++環境,Android Studio在安裝的過程中會自動安裝。這也是為什麼建議使用安裝包的原因。

如果電腦中使用殺毒類的軟件,就會禁止安裝VC++環境,請注意。

▲圖2-8 步驟4

步驟 5

一般不出意外,就會看到如圖2-9所示的界麵。說明Android Studio已經安裝成功了。

▲圖2-9 步驟5

接下來是運行Android Studio。

前提準備工作:安裝JDK並配置JDK環境變量。

請使用傳統的JAVA_HOME環境變量名稱。很多人會被提醒JVM或者JDK查找失敗,幾乎都是因為JDK版本或者沒有使用JAVA_HOME這個環境變量名稱的原因。

步驟 6

每一次安裝都會顯示如圖2-10所示的界麵,用以選擇導入Android Studio的配置文件。

  • 第一個選項:使用以前版本的配置文件夾。
  • 第二個選項:導入某一個目錄下的配置文件夾。
  • 第三個選項:不導入配置文件夾。

▲圖2-10 步驟6

如果以前使用過Android Studio,可以選擇到以前的版本。如果是第一次使用,可以選擇第三項。

步驟 7

這是在檢查Android SDK。安裝時有時會在這裏等上很長時間,很大的原因就是:網絡連接有問題。可以通過配置hosts的方式來解決。如果檢查需要更新,則會允許安裝,如圖2-11所示。

▲圖2-11 步驟7

如果想跳過這一步,可以進行如下操作。

在 Android Studio 安裝目錄下的 bin 目錄下,找到 idea.properties 文件,在文件最後追加disable.android.first.run=true。

步驟 8

如果看到如圖2-12所示的界麵,就說明需要更新Android SDK。建議進行更新。

步驟 9

如圖2-13所示,選擇安裝更新Android SDK。第一個選項表示全選,第二個表示自定義。

▲圖2-12 步驟8

▲圖2-13 步驟9

步驟 10

如果步驟9中選擇第一個選項,就會顯示如圖2-14所示的界麵。選擇Accept,點擊Finish進行安裝即可。

▲圖2-14 步驟10

步驟 11

如果步驟9中選擇第二個選項,就會顯示如圖2-15所示的界麵。需要選擇一個安裝目錄,需要注意的是:這個目錄中不能包含空格以及漢字。不建議使用默認的%APPDATA%目錄。點擊Next後可以看到類似步驟10的頁麵,選擇Accept,點擊Finish進行安裝。

▲圖2-15 步驟11

步驟 12

當更新完Android SDK,就會看到如圖2-16所示的界麵。直到這個界麵才說明,可以使用Android Studio了。

▲圖2-16 步驟12

  • 選項1:創建一個Android Studio項目。
  • 選項2:打開一個Android Studio項目。
  • 選項3:導入官方樣例,會從網絡上下載代碼。此功能在以前的測試版本中是沒有的,建議多看一看官方給的範例。
  • 選項4:從版本控製係統中導入代碼。支持CVS、SVN、Git、Mercurial,甚至GitHub。
  • 選項5:導入非Android Studio項目。比如Eclipse Android項目、IDEA Android項目。如果Eclipse項目使用官方建議導出(即使用Generate Gradle build files的方式導出),建議使用選項2導入。
  • 選項6:設置。
  • 選項7:幫助文檔。

如果一些選項不能點擊,說明JDK或者Android SDK目錄指向有問題,請看下麵的設置JDK或者Android SDK目錄。

2.2.5 設置JDK和Android SDK目錄

有時運行Android Studio會提醒JDK或者Android SDK不存在,需要重新設置。此時就需要到全局的Project Structure頁麵下進行設置。進入全局的Project Structure頁麵方法如下。

方法 1

如圖2-16所示,選擇Configure→ProjectDefaults→Project Structure。

方法 2

如圖 2-17 所示,進入 Android Studio 開發界麵,選擇 File→OtherSettings→Default Project Structure。

▲圖2-17 Android Studio開發界麵

方法1和方法2都會進入Project Structure界麵,如圖2-18所示,在此頁麵下設置JDK或者Android SDK目錄即可。NDK暫時不需要。

▲圖2-18 設置SDK和JDK

建議大家把SDK目錄裏的...\sdk\platform-tools這個路徑加入到PATH環境變量中,如圖2-19所示,方便在命令提示符中使用ADB指令。

▲圖2-19 配置環境變量,圖中為Windows 10係統

2.3 項目的創建

安裝好了開發環境,終於可以創建Android項目了。這可是你成為高手的第一步。接下來介紹創建項目的步驟和出現錯誤時的解決方法。

前期部分章節贈送教學視頻。視頻主要為了新手更方便熟悉基本操作。

 

2.3節、2.4節、2.5節、2.6節對應的視頻地址為:https://v.youku.com/v_show/id_XMTM2NTcz MzA0MA==.html(建議改成超清模式觀看)。

2.3.1 創建項目的步驟

步驟 1  開始創建工程

如圖2-20所示,點擊Start a new Android Studio project就可以創建第一個項目了。

▲圖2-20 步驟一,創建Android項目

步驟 2  設置基本信息

如圖 2-21 所示,這一步主要設置項目中最基本的信息,包括項目的名字、項目的唯一標示包名和項目存放的地址。需要注意的是,存放工程的目錄不要有中文或者空格。添加C++支持暫時忽略。

▲圖2-21 創建工程

點擊Next進入選擇設備界麵。

步驟 3  選擇設備

如圖2-22所示,Android係統覆蓋麵太廣了,既可以開發和手機平板電腦,也可以開發手表、電視,甚至汽車眼鏡,以後種類還會越來越多。學習階段都是以手機為主,我們選擇手機就可以了。

▲圖2-22 選擇設備

關於最低兼容的版本,我們選擇不同版本的SDK,設備覆蓋率會有相應的變化,SDK版本越低,設備覆蓋率就越高。如果想支持更多的設備,就不得不選擇低版本的SDK。

點擊Next進入選擇Activity模板界麵。

步驟 4  選擇 Activity 模板

Activity直接翻譯過來是活動的意思。在Android開發中,Activity是用來顯示界麵的,是傳說中Android四大組件之一(四大組件還包括廣播接受者、內容提供者、服務)。

Android Studio為我們提供了常用的Activity模板,可以選擇更加快捷的創建。其實這些不同的模板大同小異,裏麵自動生成了不同的模板代碼。在學習階段,建議大家選擇 Empty Activity,這是一個空的界麵,我們可以通過自己的雙手創建出來不同的界麵,如圖2-23所示。

▲圖2-23 選擇Activity模板

點擊Next進入設置Activity信息的界麵

步驟 5  設置 Activity 信息

如圖2-24所示,這一步設置Activity和布局的名字。一般Activity的名字都是以Activity為

▲圖2-24 定製Activity

後綴結束,表示這個類是Activity的子類,也就是姓Activity(老外習慣姓在後麵)。布局文件並不是Java中的類,它是XML文件,其作用就是為了輔助我們開發界麵。

主流的Android開發就是采用Java+XML進行的。

Backwords Compatibility(AppCompat) 選項一般勾選,勾選創建的 Activity 默認繼承AppCompatActivity,為了是兼容Android 5.0以下的低版本Android係統。可以讓低版本使用新版本的一些特性。

點擊Finish就完成創建項目了。當然還需要等待一會,如圖2-25所示。

▲圖2-25 項目生成中

2.3.2 解決錯誤(沒有錯誤最好)

第一次創建項目的時候可能會發生些錯誤。錯誤的原因最多的就是SDK版本太高或者太低。

列舉幾個作者碰到的錯誤。

錯誤 1

如圖2-26所示,這個錯誤原因是Gradle插件(Android是通過Gradle打包編譯的)太舊了。解決辦法有兩種。

▲圖2-26 錯誤1

(1)舊的不去,新的不來。升級Gradle插件,舊的就不要了。這個需要下載新的,然後進行配置。

(2)直接用舊的,但需要修改build.gradle文件。這個比較簡單,適合比較專一的人。具體修改方法如下。

如圖2-27所示,先找到工程下的build.gradle文件,找到裏麵的配置,把裏麵的配置改低點,改成1.2.3或者1.5.0,雖然有些新特性可能用不了,但是足夠我們用的了。

▲圖2-27 修改1

備注:最新版本已經不是2.0.0-alpha1了,解決方式是通用的。

錯誤 2

如圖2-28所示,這個錯誤指的是工程無法解析對應的函數庫。碰到這種情況不要害怕,Android Studio提供了解決方案。點擊Install Repository and sync project,然後安裝對應的函數庫即可。

▲圖2-28 錯誤2

備注:圖片隻是為了演示錯誤,新創建工程默認不會加載recycleview-v7這個庫,目前新創建工程會加載。

圖中'com.android.support:appcompat-v7:XXXX'(這個位置看不懂沒關係,後麵會講到)。

讀者在創建工程時碰到的問題可以反饋給我。我盡量幫你解決,同時我也會把問題的解決方式同步到電子書裏。

2.4 Android Studio界麵預覽

創建完了工程,接下來預覽開發環境的界麵,如圖2-29所示。

▲圖2-29 界麵預覽

Gradle同步按鈕為,當我們修改工程中後綴名為Gradle的文件時,需要點擊此按鈕才能生效。

Gradle同步按鈕右側的是工程配置按鈕,對工程進行配置需要點擊它。

圖中視圖切換按鈕的作用是可以根據個人喜好切換到不同的視圖。常用的視圖為Project和Android,如圖2-30所示。

▲圖2-30 視圖切換按鈕

2.5 常用設置

點擊菜單File→Setting進入設置界麵,可以根據自己的偏好進行一些設置。如果喜歡係統默認的設置,此節可以跳過。

備注:Mac版本的Android Studio看不到此按鈕,可通過點擊頂部菜單Android Studio→Preferences調出來,下麵大家自行轉換。

2.5.1 設置主題

默認的Android Studio為灰白色界麵,可以選擇使用炫酷的黑色界麵,如圖2-31所示。

▲圖2-31 設置主題

選擇Settings→Appearance→Theme進入界麵,勾選Darcula主題即可。

2.5.2 設置字體和格式

1.設置係統字體

如圖2-32所示,如果Android Studio界麵中的中文顯示有問題,或者選擇中文目錄顯示有問題,或者想修改菜單欄的字體,就可以這麼設置:

Settings→Appearance,勾選Override default fonts by (not recommended),選擇一款支持中文的字體即可。本書使用的是微軟雅黑,效果不錯。

▲圖2-32 設置字體

2.設置編程字體

如圖2-33所示,此部分會修改編輯器的字體,包含所有的文件顯示的字體。

▲圖2-33 設置編程字體

選擇Settings→Editor→Colors & Fonts→Font。默認係統顯示的Scheme為Defualt,此處是不能編輯的,需要點擊右側的Save As...,保存一份自己的設置,並在當中設置。之後,在Editor Font中即可設置字體。

Show only monospaced fonts表示隻顯示等寬字體。一般來說,等寬字體在編程中使用較多,且效果較好。

3.設置字體顏色

在Settings→Editor→Colors & Fonts中還可以設置字體的顏色,根據要設置的對象選擇設置,也可以從網絡上下載字體顏色設置包,導入到係統中。

4.設置代碼格式

如果想設置代碼格式化時顯示的樣式,就可以這麼設置:

Settings→Code Style。同樣的,Scheme中默認的配置無法修改,需要創建一份自己的配置。

2.5.3 設置文件編碼

無論是個人開發,還是項目組團隊開發,都需要統一文件編碼。出於字符兼容的問題,建議使用UTF-8。大部分Windows係統默認的字符編碼為GBK。

選擇Settings→File Encodings。建議將IDE Encoding、Project Encoding、Properties Fiels都設置成統一的編碼,如圖2-34所示。

▲圖2-34 設置文件編碼格式

2.5.4 設置快捷鍵

Android Studio的快捷鍵和Eclipse(學習過Java的應該都接觸過)的不相同,但是通過設置就可以在Android Studio中使用Eclipse的快捷鍵。

選擇Settings→Keymap。可以從Keymap中選擇對應IDE的快捷鍵,如圖2-35所示。

▲圖2-35 快捷鍵

無論是否選擇Keymap映射,都需要修改一個快捷鍵,就是代碼提示的快捷鍵。Android Studio中代碼提示的快捷鍵是Ctrl+Space,這個按鍵和切換輸入法衝突。

選擇Main menu→Code→Completion→Basic,更改為想替換的快捷鍵組合,推薦為Alt+/,如圖2-36所示。

▲圖2-36 修改快捷鍵

2.5.5 其他設置

如圖2-37所示,為了方便大家開發,推薦大家設置編輯區域和顯示行號。

▲圖2-37 其他設置

1.設置Android Studio編輯區域

代碼在編輯區域中部會有一條豎線。這條線是用以提醒程序員,一行的代碼長度最好不要超過這條線。如果不想顯示這條線,可以這麼設置:

Settings→Editor→General→Appearance,取消勾選Show right margin (configured in Code Style options)。

2.顯示行號

選擇Settings→Editor→General→Appearance,勾選Show line numbers。

2.6 常用快捷鍵

下麵以Windows/Linux電腦為例講解常用快捷鍵。Mac電腦的快捷鍵大部分類似,隻需要把Ctrl替換成Cmd,Alt替換成Option。

默認快捷鍵如下。

Ctrl + D:複製光標所在行代碼到下一行。

Ctrl + Y:刪除光標所在位置那行代碼(Mac電腦為Cmd+Delelte)。

Alt+Enter:導入包,快速修複。

Ctrl+/:當行注釋,反注釋再按一次即可。

Ctrl+Shift+/:模塊注釋,反注釋再按一次即可。

Alt+Insert:可以生成構造器/Getter/Setter等。

Ctrl+Alt+V:生成方法返回值。

Ctrl+E:查看最近打開過的文件。

Eclipse映射後區別不大。

Ctrl+Shift+↓:複製光標所在行代碼到下一行。

Ctrl+D:刪除光標所在位置那行代碼。

Alt+Enter:導入包,快速修複。

Ctrl+/:當行注釋,反注釋再按一次即可。

Ctrl+Shift+/:模塊注釋,反注釋再按一次即可。

Alt+Insert:可以生成構造器/Getter/Setter等。

Ctrl+Alt+V:生成方法返回值。

Ctrl+E:查看最近打開過的文件。

2.7 Android工程目錄

熟悉了Android Studio開發環境,接下來介紹大家比較關心的問題。進行Android開發時,當然需要熟悉Android工程目錄結構,主要需要了解Android目錄結構和Gradle文件的內容結構。

 

本節對應的視頻地址為:https://v.youku.com/v_show/id_XMTM2NTczOTQwMA==.html(建議改成超清模式觀看)。

2.7.1 工程目錄介紹

如圖2-38所示,首先需要切換成Project視圖,然後整個項目結構就在我們眼前了。

我們重點介紹使用的Android項目結構如圖2-39所示。

▲圖2-38 項目結構

▲圖2-39 項目結構,框中的經常使用

注意,res目錄下的所有文件不允許出現大寫字母,也不允許使用Java關鍵字命名。

2.7.2 Gradle使用詳解

Android Studio通過Gradle腳本進行打包運行程序。

Gradle 所有文件結構

Android工程目錄下有一個build.gradle,運行的module裏也有一個build.gradle。

settings.gradle

settings.gradle表示當前運行的程序是app,如果還需要在工程中添加其他運行的程序,就需要在settings.gradle中進行配置。

build.gradle

build.gradle中設置了Gradle的版本、依賴的倉庫。

2.7.3 app/build.gradle

app/build.gradle文件在開發過程中可能修改的次數比較多。下麵我們重點介紹。

apply plugin: 'com.android.application'//應用Android應用插件
android {
  compileSdkVersion 25  //編譯SDK(Software Development Kit)的版本
  buildToolsVersion "25.0.2" //構建工具的版本

  defaultConfig {
    applicationId "com.baidu.myapplication" //應用的唯一標示
    minSdkVersion 15 //最低兼容的版本
    targetSdkVersion 25 //目標版本兼容的版本
    versionCode 1 //版本號,數字版本號
    versionName "1.0" //字符串版本號
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  }
  buildTypes {  //構建類型
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
} 
dependencies { // 指明項目中依賴的第三方函數庫
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:25.1.0'
}

下麵分別進行解釋。

1.Android腳本

這個不能刪。它的作用就是讓其餘的腳本代碼都有用。

apply plugin: 'com.android.application'//應用Android應用插件

2.Android配置

表明編譯的版本和編譯工具的版本。必須保證SDK(開發工具包,馬上就會介紹到)有這個版本。

compileSdkVersion 25  //編譯SDK(Software Development Kit)的版本
buildToolsVersion "25.0.2" //構建工具的版本

3.運行程序的配置

其包括applicationId(程序的包名,也就是程序的唯一標示)、兼容的最低版本(minSdkVersion)和目標版本(targetSdkVersion)。這些都在創建項目的時候指定了,可以在這個位置修改。還有當前程序的版本號(versionCode)和版本名字(versionName),其中版本號是整數,隨著項目的升級遞增,版本名字是字符串,並沒有太嚴格的限製。

defaultConfig {
  applicationId "com.baidu.myapplication" //應用的唯一標示
  minSdkVersion 15 //最低兼容的版本
  targetSdkVersion 25 //目標版本兼容的版本
  versionCode 1 //版本號,數字版本號
  versionName "1.0" //字符串版本號
}

4.buildTypes

程序在發布的時候可以混淆代碼,可以保護代碼,不會被其他人輕易破解。

buildTypes {  //構建類型
  release {
    minifyEnabled false //是否混淆代碼 false不混淆
    // 混淆代碼配置文件
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }
}

其實,buildType主要的目的是可以根據不同的版本設置不同的參數。進行不同的配置。開發過程分為調試階段和正式發布階段,可以通過buildType在不同的階段設置不同的參數,如下麵的代碼:

debug {
  buildConfigField "String", "API_URL", "\"https://test.baidu.com\""
  buildConfigField "boolean", "LOG_CALLS", "true"
  resValue "string", "str_name", "Example DEBUG"
}
release {
  buildConfigField "String", "API_URL", "\"https://www.baidu.com\""
  buildConfigField "boolean", "LOG_HTTP_CALLS", "false"
  resValue "string", "str_name", "Example"
  ...
}

調試階段就是debug,正式發布就是release,裏麵分別設置了不同的3個參數。這3個參數可以通過代碼調用:

String url=BuildConfig.API_URL;
boolean log_calls=BuildConfig.LOG_CALLS;
int stringid=R.string.str_name;

5.dependencies

這個用來指明項目中依賴的函數庫,目前項目創建默認需要依賴appcompat-v7(版本不一定和書中一致),裏麵提供了很多API,既可以使用高版本的特效,也能兼容低版本,何樂而不為呢?

dependencies { // 指明項目中依賴的第三方函數庫
  // 依賴程序中jar包
  compile fileTree(dir: 'libs', include: ['*.jar'])
  // 單元測試相關的
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:25.1.0'
}

2.8 SDK目錄介紹

 

本節對應的視頻地址為:https://v.youku.com/v_show/id_XMTM2NTU3MzcwNA==.html(建議改成超清模式觀看)。

1.什麼是 SDK

首先需要明白一個概念,SDK全稱是Software Development Kit,翻譯過來就是軟件開發工具包。它是開發程序必不可少的。在安裝Android Studio後必須要安裝SDK,否則不能創建項目。如果用官方默認的安裝包,默認是安裝SDK的。

2 . SDK 目錄(見圖 2 - 40 )

注:Mac係統默認在~/Libary/Android目錄下。

▲圖2-40 SDK目錄

(1)add-ons中保存著附加庫,比如GoogleMaps。

(2)build-tools編譯。

(3)docs中是Android SDKAPI參考文檔,所有的API都可以在這裏查到。

(4)extras:額外的jar包之類的。

(5)platforms是每個平台的SDK真正的文件,裏麵會根據APILevel劃分SDK版本。

(6)platform-tools保存著一些通用工具,比如adb、aapt、aidl、dx等文件。這裏和platforms目錄中的tools文件夾有些重複,主要是從Android 2.3開始這些工具被劃分為通用了。

(7)samples是Android SDK自帶的默認示例工程,強烈推薦初學者學習裏麵的apidemos。

(8)source是Android係統源碼。

(9)tools作為SDK根目錄下的tools文件夾,包含了重要的工具,比如ddms用於啟動Android調試工具,還有logcat、屏幕截圖和文件管理器;draw9patch是繪製Android平台的可縮放png圖片的工具;sqlite3可以在PC上操作SQLite數據庫;monkeyrunner是一個不錯的壓力測試應用,模擬用戶隨機按鍵;mksdcard是模擬器SD映像的創建工具;emulator是Android SDK模擬器主程序,不過從Android 1.5開始,需要輸入合適的參數才能啟動模擬器;traceview作為Android平台上重要的調試工具。

(10)system-images:鏡像。

(11)AVD Manager:模擬器管理者。

(12)SDK Manager:SDK管理者,可以用它下載升級SDK。

2.9 調試程序

了解了這麼多,其實大家最關心的是如何把程序部署到手機中。這樣大家就可以拿自己寫的手機程序跟朋友炫耀了。

怎麼部署到手機呢

點擊就可以把程序部署到手機中。

前提是,需要有個Android手機,當然沒有手機也沒有關係,Google工程師提供了模擬器,可以模擬Android手機環境。

2.9.1 創建模擬器

參照圖2-41和圖2-42,首先點擊模擬器按鈕,然後點擊創建模擬器,選擇對應的設備。

▲圖2-41 步驟1創建模擬器

▲圖2-42 步驟2創建模擬器

使用默認的設備,點擊Next,選擇一個係統映像,如圖2-43所示。

▲圖2-43 步驟3選擇鏡像

點擊Next,進入核對配置界麵,如圖2-44所示。

▲圖2-44 步驟4確認配置

最後點擊Finish就創建成功了,如圖2-45所示。

▲圖2-45 創建成功

點擊啟動按鈕就可以啟動模擬器。

目前新版Android模擬器速度非常快,但是比較耗費內存。

2.9.2 連接真實手機

當然,也可以連接自己的真實手機。

如圖2-46所示,進入手機設置中,進入開發者選項,勾選USB調試。然後用數據線連接上電腦,就可以調試了。當然,第一次部署需要用手機授權允許該電腦調試。

▲圖2-46 打開USB調試

備注:Android 4.4以上的手機係統默認是不顯示開發者選項這個按鈕的,默認需要連續點關於手機頁中的版本號。

2.9.3 Genymotion模擬器

如果大家不想用真實的手機,也不想用Android原生的模擬器,推薦大家用Genymotion模擬器(見圖2-47),這個模擬器的速度很驚人。不過,Genymotion安裝起來稍微麻煩,需要先安裝Oracle VM VirtualBox,然後安裝Genymotion,最後注冊Genymotion賬號,再下載模擬器。注冊和下載都需要訪問境外服務器,非常不穩定。本書提前給大家整理好了Windows版的Oracle VM VirtualBox和Genymotion的安裝包,也給大家提供了部分虛擬機,大家可以直接雙擊虛擬機導入Oracle VM VirtualBox中。

▲圖2-47 Genymotion模擬器

鏈接:https://pan.baidu.com/s/1i4fXwCt,密碼:j3gt。

備注:Win10操作係統中,Oracle VM VirtualBox和Genymotion需要用Win8/Win7兼容性,以管理員身份運行。

2.10 程序啟動分析

了解了如何調式程序,接下來分析項目是如何運行起來的。首先來看app/src/main/AndroidManifest.xml
這個文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:andro
  package="com.baidu.myapplication" >

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity"
      >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>

</manifest>

AndroidManifest.xml文件俗稱清單文件,可以簡單理解為是當前應用的配置文件。該文件可以配置應用權限和四大組件(包括Activity、廣播接受者、服務、內容提供者),Activity必須在清單文件中注冊,否則不能直接顯示。

其中,intent-filter裏的兩行代碼非常重要,<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />表示MainActivity是這個項目的主Activity,在手機上點擊應用圖標,首先啟動的就是MainActivity。

接下來再看MainActivity:

package com.baidu.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
  // 首先啟動onCreate方法
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     //設置界麵顯示的布局
     setContentView(R.layout.activity_main);
  }
}

首先可以看到,MainActivity繼承自AppCompatActivity,這是一個特殊的Activity,也具備Activity的特性。

當程序運行的時候,首先會根據上麵清單文件的配置運行MainActivity,然後就會調用MainActivity的onCreate方法,這個方法率先調用。而MainActivity在這個方法中加載了布局setContentView(R.layout.activity_main);

這時候可能有人會問:R.layou.activity_main是什麼?R又是在哪來的?

其中,R代表res目錄,layout就是res目錄下的布局目錄。R是自動生成的類,用來連接res目錄下的資源和Java代碼,這個位置相當於引入了activity_main這個布局文件。如果res目錄下有錯誤,R就不會生成了,代碼中就會有錯誤。

之前給大家介紹過,凡是在應用中看得到的東西,都是放在Activity中,而這個布局就是當前界麵程序顯示的樣子:

再來看布局文件src/main/res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:andro
  xmlns:tools="https://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.baidu.myapplication.MainActivity">
  <!--TextView用來顯示文本的控件-->
   <TextView
      android:
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World!"
      />    
</RelativeLayout>

如圖2-48所示,點擊Design按鈕可以查看預覽界麵,或者直接運行到手機也可以看到一樣的界麵。其中,TextView 就是最簡單的一個控件,用來顯示文本,上麵代碼中的 android:text 屬性就是控製顯示的內容。

▲圖2-48 預覽界麵

簡單總結下:項目啟動首先需要讀取清單文件AndroidManifest.xml,然後找到主Activity,調用主Activity的onCreate方法,加載布局顯示到手機中,大功告成。

2.11 日誌和注釋

開發任何程序時,有兩點是萬萬不能少的:一是注釋,二是日誌的輸出。學習Android開發之前首先需要掌握這兩點。下麵來介紹注釋的使用和日誌的輸出。

本節對應的視頻地址為:https://v.youku.com/v_show/id_XMTM2NTczOTk5Mg==.html(建議改成超清模式觀看)

2.11.1 注釋

大部分Android程序都采用Java代碼,代碼中的注釋和Java代碼是一樣的。XML文件注釋采用<!---->進行注釋,如下:

<!--XML文件注釋-->

// java 行注釋

/*
 注釋
*/

/**
 文檔注釋
*/

好的注釋會讓你維護程序事半功倍。大家在學習的階段一定養成先寫注釋再寫代碼的習慣。

2.11.2 日誌

注釋寫法相對比較簡單,重點看一下在Android中如何輸日誌。首先需要明白日誌是給程序員自己看的,使用軟件的人一般是看不到的。

如圖2-49所示,可以借助Android Monitor工具查看日誌,默認快捷鍵:Alt+6。

▲圖2-49 日誌

從上麵的圖片可以看到,日誌具有不同的日誌級別,包括:Verbose、Debug、Info、Warn、Error、Assert。以上級別依次升高。每條日誌都有進程信息,默認一個應用程序占一個進程。每條日誌都有標簽。

磨刀不誤砍柴工,學習開發前首先需要了解如何輸出日誌。

Android中的日誌工具類是Log(android.util.Log),這個類中提供了如下方法來供我們打印日誌。

(1)Log.v()對應級別Verbose。

(2)Log.d()對應級別Debug。

(3)Log.i()對應級別Info。

(4)Log.w()對應級別Warn。

(5)Log.e()對應級別Error。

(6)Log.wtf()對應級別Assert。

當然System.out.println方法也可以輸出日誌,這個方法在Java中使用的比較多,在Android中並無明顯優勢,因為它不能控製日誌的標簽,查詢起來比較麻煩。

直接在onCreate方法中演示這幾個方法,Log.XXX()中第一個參數就是日誌的標簽,推薦大家指定當前的類名,方便查找:

Log.v("MainActivity","v");
Log.d("MainActivity","d");
Log.i("MainActivity","info");
Log.w("MainActivity","w");
Log.e("MainActivity","e");
Log.wtf("MainActivity","wtf");
System.out.print("out");

寫完代碼,運行查看結果,如圖2-50所示。

▲圖2-50 輸出結果

大家發現Syste.out.println的標簽是System.out,級別是INFO級別。

注意,Android Studio每個級別默認的不是這個顏色,默認的顏色太難看,不方便區別級別,我們需要自己改一下。

2.11.3 設置Android Studio日誌顯示顏色

如圖2-51和圖2-52所示,選擇File→Settings或按Ctrl + Alt +S組合鍵進入設置界麵,找到Editor→Colors &Fonts→Android Logcat或在上麵的搜索框中輸入Logcat點中Verbose、Info、Debug等選項,然後在後麵將Use Inberited attributes去掉勾選,再將Foreground前的複選框選上,就可以雙擊後麵的框去選擇顏色了,選擇Apply→OK。

▲圖2-51 修改日誌顏色

對應的顏色值:

  • VERBOSE BBBBBB
  • DEBUG 0070BB
  • INFO 48BB31
  • WARN BBBB23
  • ERROR FF0006
  • ASSERT 8F0005

在實際開發的過程中,我們會經常看到程序輸出的日誌,其中很多並不是我們主動輸出的。這些日誌就像我們去醫院化驗的結果單子一樣。如果發現警告或者以上級別的日誌,就需要留意了,你的程序有潛在風險或者嚴重問題,需要根據日誌內容進行修複。

▲圖2-52 修改日誌顏色

2.11.4 實際開發中控製日誌

輸出日誌很簡單,怎麼控製日誌的輸出就值得研究下了,日誌是用來調試程序的,當程序發布後日誌就變得一無是處了。所以輸出日誌的原則就是:

程序開發階段允許輸出日誌,發布後不允許打印日誌。

如何去控製呢?如果在上線前手動刪除所有日誌,這個工作量就很大了。

方法 1 :創建 LogUtils

可以創建一個LogUtils工具類:

public class LogUtils {
  public static final boolean DEBUG=true;

  public static void i(String tag,String msg){
    if(DEBUG) {
       Log.i(tag, msg);
    }
  }
}

在程序中都是用Logutils的方法輸出日誌:

LogUtils.i("MainActivity","LogUtils");

這樣就可以通過LogUtils中DEBUG變量去控製日誌的輸出,當程序調試時,把這個值改為true;程序發布了,就把這個值改成false。這樣就可以實現我們一開始的需求。

然而,這樣的話,我們還需要在發布前夕手動地去改代碼,能不能在發布前不改代碼呢?這時候就要借助Gradle了,Android Studio集成了Gradle,這一點非常棒。可以參考之前介紹的內容,打開app/build.gradle這個文件,做一個配置:

buildTypes {  
  debug{ //  開發階段  
    buildConfigField "boolean", "LOG_CALLS", "true"   // 定義了boolean變量 true  
  }  
  release { // 發布了  
    buildConfigField "boolean", "LOG_CALLS", "false"
    minifyEnabled false  
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }  
}

可以在buildType中配置一些全局變量,可以是String類型,也可以是boolean,這裏用到的就是LOG_CALLS這一個boolean類型變量,注意,debug{ ...}指的是程序開發階段,release{ }指的是程序發布階段。我們在開發和發布階段分別定義了對應不同值的LOG_CALLS,接下來就可以在LogUtils中使用這個全局變量了:

public class LogUtils {
  public static final boolean DEBUG=BuildConfig.LOG_CALLS;

  public static void i(String tag,String msg){
    if(DEBUG) {
       Log.i(tag, msg);
    }
  }
}

其中,BuildConfig.LOG_CALLS就是我們在上麵定義的變量,這個變量在開發階段是true,發布階段自動就變成了false。我們這樣就幹了一個一勞永逸的事了。

方法 2 :混淆日誌類

上麵的方法還是比較麻煩,其實還有更簡單的方法。我們可以借助代碼混淆。簡單地說,代碼混淆就是把代碼進行混淆加密,讓盜取代碼的人難以讀懂。

首先開啟代碼混淆:

release {
  minifyEnabled true //是否混淆代碼 false不混淆
  // 混淆代碼配置文件
  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

混淆的腳本默認是在工程目錄下的proguard-rules.pro文件中添加的,添加如下代碼:

-assumenosideeffects class android.util.Log {
  public static boolean isLoggable(java.lang.String, int);
  public static int v(...);
  public static int i(...);
  public static int w(...);
  public static int d(...);
  public static int e(...);
}

assumenosideeffects的官方解釋就是,混淆器將刪除這些方法(如果在程序中使用這些方法的返回值,則不會刪除。一般日誌不關心返回值)。這樣,程序在發布階段將會混淆代碼,混淆的過程中就把日誌輸出的方法給去掉了,程序就永遠不會輸出日誌了。

2.11.5 Logger的使用

可以使用Logger這個開源框架輸出日誌,如圖2-53所示。首先看看這個日誌控製器輸出的界麵,其排版工整,調理清晰。

▲圖2-53 使用Logger輸出日誌

具體怎麼使用呢?大家可以通過上麵的Logger連接進入github主頁。當然這也是本書第一次介紹開源框架的使用。下麵給新手簡單介紹下。

直接訪問app/build.gradle文件,額外添加logger的依賴:

dependencies { // 指明項目中依賴的第三方函數庫
  ...
  compile '<strong>com.orhanobut:logger:1.15</strong>'
}

然後單擊界麵上的同步按鈕,如圖2-54所示,Android Studio就會自動下載logger1.15這個第三方的庫,非常方便。

▲圖2-54 同步按鈕

使用方法:

Logger輸出的日誌方式要多一些,可以輸出JSON和XML格式。後麵介紹講網絡傳輸的時候會對這種格式進行具體介紹。

// 默認標簽
Logger.d("hello");
Logger.e("hello");
Logger.w("hello");
Logger.v("hello");
Logger.wtf("hello");
//指定標簽
Logger.t("mytag").d("hello");

總結

這一章,我們把學習Andorid開發的前期準備工作都做完了,包括環境搭建、熟悉環境、創建項目的步驟、項目結構、調試程序、日誌輸出等。這一章相對麻煩,很多內容大部分人都不會想做第二遍了,當然也沒有必要做第二遍,比如環境搭建(我寫這一節的時候也很痛苦)。不過還是有一些重點需要掌握的,比如日誌的輸出。

本章代碼下載地址:https://github.com/yll2wcf/book,項目名稱:Chapter2。

如果代碼導入困難,讀者可參考我的博客中的文章https://www.jianshu.com/p/0e73ad2ea8b5。

歡迎關注微信公眾賬號——於連林,搜索關鍵字:likeDev。

合抱之木,生於毫末;九層之台,起於累土;千裏之行,始於足下。

最後更新:2017-08-13 22:27:38

  上一篇:go  阿裏雲發布ECS企業級產品家族 19款實例族涵蓋173個應用場景
  下一篇:go  南京3條地鐵傳來新進展,這批地鐵盤你知道多少?