1. 程式人生 > >Android SDK PDK NDK詳解

Android SDK PDK NDK詳解

昨天一個同事問我Android PDK,NDK,SDK都是做什麼的,什麼意思。之前聽到過這幾個詞,感覺自己能夠理解,

但是發現要比較清晰的給她解釋才發現自己的理解可能還不是很到位,帶著疑問查了查資料,結合自己的理解寫

下來。

其實這個三個詞應該是在軟體開發領域通用的,它們的全稱分別為SDK(Software Development Kit),PDK(Platform

Development Kit),NDK(Native Development Kit),我們可以從它們的用途以及針對的人群來理解一下。

1.SDK 軟體開發套件

  一般平臺都會發布自己的SDK,SDK包含該平臺為應用程式開發人員提供的開發工具,主要是所有公開API

的集合,應用程式開發人員可以藉助SDK中的API快速的進行應用的開發。

   Android SDK針對所有安卓應用開發人員開放,下載ADT檢視sdk目錄如下:

 sdk
├── add-ons
├── build-tools
├── extras
├── platforms
├── platform-tools
└── tools

SDK檔案目錄解釋:

1) add-ons   這裡儲存一些附加庫,例如GoogleMaps

2) build-tools 這裡放的是Android的一些重要的編譯工具,比如aapt、aidl、逆向除錯工具dexdump和編譯指令碼dx等

3) extras 存放的是幾次大的升級新增的新功能相關的static library,如android-v4,android-v7,android-v13

4) platforms 存放的是平臺真正的SDK,其中會根據APILevel來區分SDK的版本,命名規則android-APILevel,如android 4.4

                     SDK的資料夾名稱為android-20,其檔案目錄如下:

├── android.jar
├── build.prop
├── data
├── framework.aidl
├── sdk.properties
├── skins
├── source.properties
├── templates
└── uiautomator.jar

該目錄下主要檔案android.jar為該版本framework的主要檔案,包括class,圖片等;

data目錄下為系統的資原始檔,包括字串資源,fonts字型庫檔案,activity broadcast的action記錄,intent的category,

widget的列表等內容;skins目錄為Android模擬器的面板資源;templates目錄下為建立Android工程預設模板,包括

AndroidManifest.xml,java檔案,launch圖示等;

5) platform-tools  此目錄主要放置的是平臺工具,如adb, fastboot, sqlite3等

6) tootls  這個目錄中有比較重要的除錯工具,如ddms(包括一些截圖),Android模擬器的主程式emulator,traceview效能優化工具,

               UI控制元件掃描工具uiautomatorviewer,UI層級顯示工具hierarchyviewer,程式碼混淆工具proguard,ant編譯指令碼,程式碼缺陷

               掃描工具lint等,這個目錄下也有個templates目錄,簡單看了下不太明白是幹什麼用的,有興趣的可以瞭解一下。

2.PDK 平臺開發套件(合作伙伴開發套件)

PDK主要針對系統和平臺開發的人員,有的部落格上說PDK對於解決Android碎片化有一定的作用,在PDK推出之前,未能參與Google

早期開發裝置計劃的OEM廠商和半導體供應商必須等到Android開源版本公佈後,才能開始進行開發。而從Jelly Bean,也就是Android

 4.1版本開始Google在釋出新的Android版本之前會Release給與其簽約過的OEM廠商和半導體供應商PDK(PDK的獲取需要授權,因為

PDK中的新版Android尚未正式釋出),這樣OEM廠商不會再落後於Google挑選的獨家早期開發夥伴。原來的時候,只有Google的自有品

牌Nexus裝置才能成為市場領先者,但以後的情況可能不一定會如此,因為會有許多積極的OEM 廠商也能借助PDK快速推出新版產品。

這個就是PDK的作用,加快OEM廠商的update速度,不然Android的新版本的使用率會跟不上更新的速度。

這個PDK中會有一些平臺的少量Code,以及一些binary檔案,能夠是系統工程師儘快的進行本平臺的一些驅動的開發,除錯,以及一些

平臺的新功能開發,至於PDK的詳細檔案目錄以及檔案內容我暫時不太清楚。

3.NDK 原生開發套件(這個我翻譯得比較蹩腳)

Android的SDK是中的API都是java的,眾所周知,安卓應用跑在dalvik/ART上,所以第三方應用基本上只能通過java來進行開發,如果

想要通過C來開發,需要通過JNI來實現,個人理解由於C/C++上有很多成熟的庫可以用,所以Google開闢的NDK,可以使得C/C++的

應用也能直接在Android上跑起來,但是這裡面也存在技術障礙,比如程式更加複雜,相容性難以保障,無法訪問Framework API,Debug

難度更大等,開發者需要自行斟酌使用。NDK官方說明

我沒有進行過NDK的開發,查閱到NDK的講述有一篇特別詳細的部落格,有興趣或這需求的可以根據該blog學習一下。

如果有更多關於NDK的問題可以到NDK論壇找找看。

參考文章: