愛上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