利其器:Android應用開發的幾個概念的區分

來源:互聯網
上載者:User

標籤:

前言:

學習Android應用開發的時候,經常在eclipse裡面看到很多名詞,讓人很迷惑,問別人也是說的不知所云。所以還是自己上網尋找比較靠譜,參考連結都在最後。

??

涉案名單:

Intel x86 Atom System Image

Google APIs Intel x86 Atom System Image

Android API Levels

Android Platform Version

Android SDK Version

Google APIs

Android version names

??

學習途徑:

網上部落格和問答論壇搜了一堆,最後發現還是官網文檔說的最全,本來搜部落格就是為了逃避看官網文檔,最後卻發現官網文檔是最能解決疑惑的地方,也確實是諷刺。

所以編程類最好查資料時先查官方文檔,然後查離官方文檔最近的社區,最後再查書和部落格。

對官方文檔往往容易有誤解,第一感覺就是官方文檔大而全缺少趣味,加上又是全英文大大降低了閱讀動機。實則不然,官方文檔最大的優勢在於資訊充足,概念明確,非二次部落格所能取代,能節省大量時間。

??

------------------------------以下為自己的理解,可能有不對的地方

Android Platform Version升級意味著什嗎?

Android歸根到底是一個軟體,一個作業系統,它依賴於硬體,同時硬體也依賴於它,二者相依為命。

我們知道Android的表徵圖是一個機器人,那麼就把Android裝置(比如手機、平板、手錶以及各種嵌入式裝置)比作一個機器人,而機器人的大腦或者機器人的軟體系統就是Android了,我這種軟硬結合稱作Android Platform

??

Platform Version的每一次增加無非意味著軟體升級或者硬體升級,這兩者是混合在一起的。

在官方文檔uses-sdk-element中的一個對應表格中,點擊查看Android 5.0平台版本相對於之前版本所帶來的改變:

進入Platform Highlight查看,這個頁面描述了這個版本(Lollipop: 棒棒糖)的最大特色:

瀏覽網頁後可以發現,系統更多地體現在演算法提升和架構穩定性的改進上,另外為外設提供更多的支援。可見Android更多地是為人們的各種應用需求服務的,大大超出了核心所能提供的基礎功能。而且還包含了使用者體驗方面的內容,比如頁面設計規範的提出。

而所有這些新功能引入導致Android Platform的升級,必然帶來API Level的升級,那麼API Level升級意味著什嗎?開啟Android源碼目錄查看一下或者在網上也可以:

為了保持向下相容,理論上說API(也就是函數調用的名字、參數、傳回值)應該只增加或者只修改實現,而沒有刪除,但實際是有刪除的,畢竟Android其實也類似一個大的應用程式(因為OS的準系統已經被核心實現了),很難保證介面始終不變,而核心相對而言對介面要求要穩定許多:

下面是Android 5.0源碼目錄:

點擊進去查看當前API版本和上一個API版本的差異報表:

??

Android Platform Version和API Level的關係?

如果把Android Platform比作一個變形金剛(肉身)的話,那麼API Level可以理解為變形金剛的技能等級,隨著變形金剛這個實體的不斷升級,它的技能等級也越來越高。變形金剛實體版本可以理解為對外發行版本,就好比豪車的發行版本,對外發行往往考慮到一些商業的或人方面的因素,版本號碼也不是那麼連續而且還起了特殊的花名(就好比你給家裡的每隻小寵物狗(假設你確實養了好多隻)都起一個堆數字名字一樣,總不能是1號狗,2號狗...吧),但是API Levels則是連續遞增的整數,其實也不奇怪,畢竟API是給開發人員用的(明確區分最重要)。

??

Android SDK、Android APIs、Android API什麼關係?

首先想想什麼是API?

API (Application Programming Interface)就是應用程式介面的意思,不要誤以為只有作業系統可以提高API,其實任何程式都可以提供API,如果A程式調用了B程式提供的功能介面,那麼B程式的這個功能函數介面就是A程式的API。

FB上有人提出一個比方,如果把皮卡丘比作一個程式,那麼他就為呢提供了兩個API功能,一個是鋼鐵尾巴,一個是雷電,雖然你不知道皮卡丘是個什麼鬼,更不要說他居然會使用雷電了==!反正你只要說:"上吧皮卡丘,使用雷電吧!"

??

??

這幾個概念前面的Android都可以換成其他的系統,比如windows,比如ARM,比如XXOO等等,也就是Android是個修飾詞而已。

為什麼APIs比API多個s呢?正如Dogs和Dog的區別一樣,s表示複數,但是這裡多了一層含義:API是互相聯絡的,為了實現複雜功能也為了更好地分層和分模組管理功能,調用一個API往往需要同時調用

許多基礎的API來實現某些功能,所以乾脆打包成APIs來提供給開發人員。所以有時你會發現你調用的API本身並沒有實現你要的功能,而是調用了一組其他的API,也就是這個原因。

打個比方吧,李剛兒子和李剛就好比兩個API,他們組合成APIs,如果你是李剛兒子的同學,你調用李剛API的時候,必然要調用李剛兒子的爸爸李剛API,否則誰鳥你,李剛兒子只有配合了李剛才能發揮作用。

SDK是什麼呢?

SDK就是軟體開發工具,是前面修飾詞廠商提供的,比如Android SDK就是Google提供的。沒有SDK你能不能開發呢?當然能,你自己把SDK幫你完成的工作手工做一遍就行了,但幾乎是不現實的,所以要有SDK來輔助你開發,而且需要對應平台的供應商來提供,當然了其他供應商也是可以的如果他們有能力的話,這個JDK的功能是類似的。

Android SDK開發工具提供了

??

Android SDK Manager介面:

??

??

如何為應用程式選擇合適的API Levels呢?

官方文檔總結的很好。這裡簡單說下。加入你有一個小米手機,上面裝的系統是5.0的,對應的API版本是21,這意味著你編寫的程式安裝在上面時可以無障礙和API 21包含的函數介面通訊。隨著API版本的升級,比如你把手機刷機到6.0了,對應的API版本也升級到了23,那麼API 23相對API21就新增了許多功能介面,顯然你為API 23編寫的APP如果用到了這些新功能就無法在舊機上使用了,除非你額外把用到的庫打包到程式裡。

那麼如何選擇最低運行platform version呢?如果你想讓更多的人使用你的程式,顯然把版本設定的越低越好,但是如果太低你的程式就能調用那些高階的功能介面,而這會影響你程式的品質。所以不能太低。折中的方法就是少數服從多數,我們選擇市場佔有率最大的版本作為我們的開發版本。

Android API levels大概分類,摘自Stackoverflow:

  • Android 1.5 - 2.3 (API levels 3-10) - Android made specifically for smartphones.
  • Android 3.0 - 3.2 (API levels 11-13) - Honeycomb, Android made for tablets.
  • Android 4.0 - 4.4 (API levels 14-19) - A big merge with tons of additional functionality, totally revamped Android version, for both phone and tablets.
  • Android 5.0 - 5.1 (API levels 21-22) - Material Design introduced.
  • Android 6.0 - 6.… (API levels 23-…) - Runtime Permissions,Apache HTTP Client Removed

??

tools/build-tools/platform-tools目錄下部分工具介紹及其他工具,詳見參考連結13:

aapt

全稱Android Asset Packaging Tool,主要用有三個:

a. 產生R.java檔案

b. 配置AndroidManifest.xml

c. 編譯資源

aapt的參數很多,功能強大,很多自訂的打包流程都可以通過調整aapt的參數來實現,比如Q立方的

分包打包,為了避免修改代碼中R.java的import路徑,可以指定aapt產生R.java的包名。更多的參數可查看aapt的協助,打包過程有特殊需求的,應該第一時間先看看aapt支不支援。

adb

使用頻率最高的工具,常用的什麼install,uninstall,push,pull等就不多介紹了,這裡列舉一些其他情況常用的命令:

"adb forward":映射手機上的連接埠到本地連接埠,調試網路應用的時候很有用

"adb shell pm clear":清除包的所有資料,SD卡自訂路徑的資料除外

"adb shell pm enable/disable":啟用或者禁用Android Component或者Android應用,如果想強制停止一個應用程式,殺死所有該應用的進程,並且防止自動啟動的話,disable很好使,這個是不會清除資料的

"adb shell am start":啟動一個Activity,可以通過包名類名,也可以通過Action

"adb shell am startservice":啟動一個Service

"adb shell am broadcast":發送一個廣播

"adb shell am force-stop":殺死一個應用程式及其進程

"adb shell dumpsys":dump當前系統的狀態,十分有用,包含cpuinfo、meminfo、activity stack等等,調試利器,支援的狀態如下,每個狀態的子命令可以用"adb shell dumpsys xxx -h"查詢,例如"adb shell dumpsys activity -h"

"adb shell bugreport":有時候出了問題,但是沒有抓到日誌的話,可以用這個命令把日誌dump出來,Android會儲存一段時間的crash日誌

"adb shell screenrecord":4.4開始支援使用這個命令錄製螢幕操作的視頻,比普通軟體的效果好很多,用來做示範等很有用

fastboot bootloader模式下使用的命令,刷機、解鎖必備

jobb.bat 用於建立APK Expansion Files的工具,因為有的Android應用很大,比如遊戲,一搞就1、2G,會導致APK檔案過大,所以Android提出了APK Expansion Files的概念,就是把大的資料檔案和程式本身分開,這樣使用者可以安裝了應用之後再去下載資料檔案

etc1tool 用來把png映像轉換成ETC1格式的工具,ETC1格式用於OpenGL的材質貼圖

Virtuous Ten Studio 逆向工程Integration Environment,我一直在用

dex2jar Dex位元組碼轉換成class檔案

AVD Manager:Android虛擬機器管理介面

SDK Manager:SDK管理工具,用於更新SDK

Android NDK:NDK支援開發Android Native Library,以及使用C/C++來開發Android應用,目錄結構跟SDK大體上是差不多的,需要一些Linux開發知識來理解

?

最後一個問題:為什麼Android架構搞這麼複雜?

我覺得所有的複雜都是為了簡單,人腦夠複雜了,但是功能似乎很簡單-想東西。

同理Android架構複雜即使為了最大化地簡化編程,儘可能地想出一種機制來使應用程式層完成想要的任何策略,想出這麼一種機制是複雜的,用機制的複雜來換卻策略的獨立。

至於怎麼想出這麼一種機制的,則是另外一回事了。

??

grep "name" * ./* -nR

??

參考連結:

  • Android Developer 最好每個月都看看這個上面的更新
  • Android Source
  • <uses-sdk> 詳細的官方文檔
  • Understanding Android API Levels 對於eclipse裡的那些混亂的版本配置解釋了下
  • What does API level mean?
  • API ? SDK? 傻傻分清楚
  • 問下大神們Android SDK的每個版本有什麼區別呢?
  • 詳解Android SDK 目錄和作用
  • Android SDK目錄結構及作用
  • What are the Android SDK build-tools, platform-tools and tools? And which version should be used?
  • More Info on Android Build tools and commands
  • eLinux.org?是 Linux 基金會下屬?Consumer Electronics Linux Forum?維護的一個 Embedded Linux Wiki。該 Wiki 全面系統地梳理了嵌入式 Linux 方方面面的知識。
  • Android入門-工欲善其事必先利其器 介紹了SDK 目錄下的部分工具

    ??

    ??

利其器:Android應用開發的幾個概念的區分

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.