第1章:開始啟程 - 你的第一行android程式碼

MU汐_發表於2018-01-24

第1章:開始啟程 - 你的第一行android程式碼

1.1 瞭解全貌——Android王國簡介

1.1.1 Android系統架構

  • Android系統架構分為四層:

  • Linux核心層:Android系統基於Linux核心。 為Android硬體提供底層驅動,例如顯示驅動,音訊驅動,照相機驅動,藍芽驅動,Wi-Fi驅動,電源管理等。

  • 系統執行庫層:通過C/C++庫為Android系統提供特性支援如:SQLite庫提供資料庫支援,Webkit庫提供瀏覽器核心支援。
    該層還有Android執行時庫,提供核心庫,允許用Java語言開發Android應用。Android執行時庫還包含Dalvik虛擬機器(5.0後是ART執行環境),它使得每個Android應用都能執行在獨立的程式當中,並且擁有一個自己的Dalvik虛擬機器例項,相較於Java虛擬機器,Dalvik是專門為移動裝置定製的,它針對手機記憶體、CPI效能有限等情況做了優化處理。

  • 應用框架層:提供應用程式的各種API,Android自帶的核心應用就是使用這些API完成的。

  • 應用層: 手機中所有的應用程式屬於應用層,如系統自帶的聯絡人、簡訊等,或者其他第三方應用程式。

  • 第1章:開始啟程 - 你的第一行android程式碼

1.1.2 Android已釋出的版本(截止201712)

    <tr>
        <th width=10%, bgcolor=yellow>版本號</th>
        <th width=10%, bgcolor=yellow>API級別</th>
        <th width=10%, bgcolor=yellow>釋出日期</th>
        <th width=10%, bgcolor=yellow>版本代號</th>
		<th width=10%, bgcolor=yellow>CodeName(系統名稱)</th>
    </tr>
    <tr>
        <th>1.0</th>
        <th>1</th>
        <th>2008-09-23</th>
        <th>阿童木</th>
		<th>BASE</th>
    </tr>
  	 <tr>
        <th>1.5</th>
        <th>3</th>
        <th>2009-04-17</th>
        <th>紙杯蛋糕</th>
		<th>Cupcake</th>
    </tr>
 	 <tr>
        <th>1.6</th>
        <th>4</th>
        <th>2009-09-15</th>
        <th>甜甜圈</th>
		<th>Donut</th>
    </tr>
    <tr>
        <th>2.0</th>
        <th>5</th>
        <th>2009-10-26</th>
        <th>泡芙</th>
		<th>Eclair</th>
    </tr>
  	 <tr>
        <th>2.2</th>
        <th>8</th>
        <th>2010-05-20</th>
        <th>凍酸奶</th>
		<th>Froyo</th>
    </tr>
 	 <tr>
        <th>2.3</th>
        <th>9</th>
        <th>2010-12-06</th>
        <th>薑餅</th>
		<th>Gingerbread</th>
    </tr>
	<tr>
        <th>3.0</th>
        <th>11</th>
        <th>2011-02-24</th>
        <th>蜂巢</th>
		<th>Honeycomb</th>
    </tr>
        <th>4.0</th>
        <th>14</th>
        <th>2011-10-19</th>
        <th>冰激凌三明治</th>
		<th>Ice Cream Sandwich</th>
    </tr>
        <th>4.1</th>
        <th>16</th>
        <th>2012-06-28</th>
        <th>果凍豆</th>
		<th>Jelly Bean</th>
    </tr>
        <th>4.4</th>
        <th>19</th>
        <th>2013-09-03</th>
        <th>奇巧</th>
		<th>KitKat</th>
    </tr>
        <th>5.0</th>
        <th>21</th>
        <th>2014-10-15</th>
        <th>棒棒糖</th>
		<th>Lollipop</th>
    </tr>
        <th>6.0</th>
        <th>23</th>
        <th>2015-05-28</th>
        <th>棉花糖</th>
		<th>Marshmallow</th>
    </tr>
        <th>7.0</th>
        <th>24</th>
        <th>2016-05-18</th>
        <th>牛軋糖</th>
		<th>Nougat</th>
    </tr>
        <th>8.0</th>
        <th>26</th>
        <th>2017-8-22</th>
        <th>奧利奧</th>
		<th>Oreo</th>
   
</table>
複製程式碼
  • 我擦,Table表格不是這麼用的嗎,上截圖了...
    第1章:開始啟程 - 你的第一行android程式碼

1.1.3 Android應用開發特色

  • 四大元件

    • Activity 活動
    • Service 服務
    • BroadCast Receiver 廣播接收者
    • Content Provider 內容提供者
  • 豐富的系統控制元件

  • SQLite資料庫

  • 強大的多媒體

  • 地理位置定位

1.2 手把手帶你搭建開發環境

工欲善其事,必先利其器

1.2.1 準備所需要的工具

  • JDK1.8以上:Java語言的軟體開發工具包(包含Java的執行環境,工具集合,基礎類庫等內容)
  • Android SDK:Android開發工具包
  • Android Studio:Android編譯器

1.2.2 搭建開發環境

  • 下載AndroidStudio:
    • 官網:https://developer.android.google.cn/studio/index.html
    • 開發者:http://www.androiddevtools.cn/

當前正式版最新版本為:3.0.1

1.3 建立你的第一個Android專案

Hello World

1.3.1 建立HelloWorld專案

1.3.2 啟動模擬器

1.3.3 執行HelloWorld

  • 第1章:開始啟程 - 你的第一行android程式碼

當年花了大半天去搞得東西,如今幾分鐘,我想起那天夕陽下的奔跑...

1.3.4 分析你的第一個Android程式

  • 第1章:開始啟程 - 你的第一行android程式碼

Project下的目錄結構

  • .gradle和.idea: Android Studio自動生成的檔案
  • app: 專案中的程式碼,資源幾乎都在放app目錄下
    • build:編譯時自動生成的檔案
    • libs:放置第三方jar包
    • androidTest:編寫Android Test測試用例,專案自動化測試
    • java:放置所有Java程式碼
    • res:專案資源目錄
    • AndroidManifest.xml:Android專案配置檔案
    • test:編寫Unit Test測試用例,專案自動化測試
    • .gitignore:控制版本忽略檔案
    • app.iml:IntellJ IDEA自動生成的檔案
    • build.gradle:app模組的gradle構建指令碼
    • proguard-rules.pro:指定專案程式碼的混淆規則
  • build: 專案編譯時自動生成的檔案
  • gradle: 包含gradle wrapper的配置檔案 ,使用gradle wrapper不需要提前將gradle下好,Android Studio會自動根據快取情況決定是否需要聯網下載。預設不啟用gradle wrapper,可以通過File-Setting-Build-Execution-Deployment-Gradle進行配置更改
  • .gitignore: 指定的目錄或檔案排除在版本之外
  • build.gradle: 專案全域性的gradle構建指令碼
  • gradle.properties: 全域性的gradle配置檔案,這裡配置的屬性影響專案中所有的gradle編譯指令碼
  • gradlew和gradlew.bat: 命令列介面執行gradle命令 ,gradlew在Linux或Mac系統中使用 ,gradlew.bat 在Windows系統中使用
  • HelloWorld.iml: 所有IntelliJ IDEA專案中都會自動生成的檔案,用來標識這是一個IntelliJ.IDEA專案
  • local.properties:指定本機中SDK路徑,通常自動生成
  • setting.gradle: 指定專案中所有引入的模組

1.3.5 詳解專案中的資源

  • drawable 存放圖片
  • mipmap 存放應用圖示
  • value 存放字串,樣式,顏色等配置
  • layout 存放佈局檔案

1.3.6 詳解build.gradle檔案

AndroidStudio是採用Gradle來構建專案

第1章:開始啟程 - 你的第一行android程式碼

1.最外層目錄下:build.gradle

  • jcenter:程式碼託管倉庫
    • classpath:Gradle外掛版本
      • classpath 'com.android.tools.build:gradle:3.0.1'
      • 因為Gradle並不是專門為構建android專案開發的,Java,C++都可以用Gradle構建

2.App目錄下的:build.gradle

  • apply plugin(應用一個外掛):

    • com.android.application 應用程式模組,可直接執行
    • com.android.library 庫模組,只能作為程式碼庫依附
  • android閉包(配置專案構建的各種屬性):

    • compileSdkVersion: 指定專案的編譯版本
    • bulidToolsVersion: 用於指定構建工具的版本
    • defaultConfig 閉包:對專案的更多細節進行配置
      • applicationId:指定專案的包名
      • minSdkVersion: 指定專案最低相容的系統版本
      • targetSdkVersion: 在該目標版本上已經做了充分的測試,系統將為你的應用程式啟用一些最新的功能和特性
      • versionCode: 指定專案的版本號
      • versionName: 指定專案的版本名
    • bulidTypes 閉包: 指定生成安裝檔案的相關配置,通常只有兩個子閉包
      • debug:指定生成測試版安裝檔案的配置,可忽略不寫
      • release:指定生成正式版安裝檔案的配置
        • minifyEnable: 指定是否對專案進行混淆
        • proguardFiles: 指定混淆時使用的規則檔案,這裡指定兩個
          • proguard-android.txt是在AndrliodSDK目錄下的,裡面是所有專案通用的混淆規則
          • proguard-rules.pro 當前專案的根目錄下,編寫當前專案特有的混淆規則,注意:通過androidStudio直接執行專案生成的都是測試版安裝檔案
  • dependencies閉包:指定當前專案所有的依賴關係

    • compile fileTree 本地依賴:對本地的jar包或目錄新增依賴關係
      • implementation fileTree(include: ['*.jar'], dir: 'libs')
      • lib目錄下所有jar字尾檔案新增到專案構建路徑中
    • 庫依賴: 對專案中的庫模組新增依賴關係
      • compile project(':helper')
    • 遠端依賴:對jcenter庫上的開源專案新增依賴關係
      • implementation 'com.android.support:appcompat-v7:26.1.0'
      • com.android.support 域名部分:用於和其他公司庫區分 appcompat-v7 組名稱,區分同一公司不同庫

1.4 前行必備-掌握日誌工具的使用

android.util.Log

1.4.1 使用Android的日誌工具Log

  • Log.v():verbose 最小的日誌
  • Log.d():debug 除錯資訊,比verbose高一級
  • Log.i():info 比較重要的資訊,比debug高一級
  • Log.w():warm 警告資訊,比info高一級
  • Log.e():error 錯誤資訊,比warm高一級

1.4.2 為什麼使用Log而不使用Systom.out

  • Log:可控制列印資訊,確定列印時間,能新增過濾器,日誌有級別區分
  • System.out滿足不了

1.5 小結與點評

學習android的起點

本章總結

回頭看看,這一章我還有很多說不出因果的點,比如android系統架構/build.gradle檔案每個條目的相關情況,平時開發一般也沒留意吧,知其然而不知其所以然,趁這回好好總結,在之後筆記中多寫寫自己的思考,觸類旁通.

亂拳打死老師傅,懷著敬畏的心態去複習基礎.前兩天我司一個android開發跟架構爭論為毛後臺java介面加密用MD5不用非對稱加密,架構大佬直接問:你知道MD5加密底層怎麼實現的嗎,它的位數長度是多少...頓時無言以對..技術的選擇沒有必然的好壞,但是跟別人討論還是要提前做好準備吧,裝逼有風險,就這些.

相關文章