androidwebkit編譯
Ⅰ Android 5.x 免 Root 升級系統 WebView
Android 的系統碎片化問題可以說是 Android 系統最大的硬傷了,自這個系統誕生以來十幾年過去了,依然沒能很好的解決,碎片化問題也是每個 Android 開發工程師心中的隱痛😂,每次處理系統碎片化帶來的問題時,血壓也能分分鍾飆升到 200+,為了減輕其他同仁的痛苦以及此後再遇到類似問題能少踩幾個坑,就之前的爬坑經歷做個記錄吧。
有關 WebieView 的重要性和其使用不是本文的重點,但是有幾個相關的屬性我們必須了解:
在Android4.4(API level 19)系統以前,Android使用了原生自帶的Android Webkit內核,這個內核對HTML5的支持不是很好,現在使用4.4以下機子的也不多了,就不對這個內核做過多介紹了,有興趣可以看下 這辯叢悶篇文章 。
從攜彎Android4.4系統開始,Chromium內核取代了Webkit內核,正式地接管了WebView的渲染工作。Chromium是一個開源的瀏覽器內核項目,基於Chromium開源項目修改實現的瀏覽器非常多,包括最著名的Chrome瀏覽器,以及一眾國內瀏覽器(360瀏覽器、QQ瀏覽器等)。其中Chromium在Android上面的實現是 Android System WebView ^1 。
從Android5.0系統開始,WebView移植成了一個獨立的apk,可以不依賴系統而獨立存在和更新,我們可以在 系統->設置->Android System WebView 看到WebView的當前版本。
從Android7.0系統開始,如果系統安裝了Chrome (version>51),那麼Chrome將會直接為應用的WebView提供渲染,WebView版本會隨著Chrome的更新而更新,用戶也可以選擇WebView的服務提供方(在開發者選項->WebView Implementation里),WebView可以脫離應用,在一個獨立的沙盒進程中渲染頁面(需要在開發者選項里打開) ^2 。
從Android8.0系統開始,默認開啟WebView多進程模式,即WebView運行在獨立的沙盒進程中 ^3 。―― 節選自 如何設計一個優雅健壯的Android WebView?(上)
WebView 的包名在 AOSP 中的值是 com.android.webview ,該值是在 AOSP 構建過程中編譯的版本,也就是說它是和系統一起被編譯出來的,由於大部分的第三方手機製造商都有自己的定製 ROM,所以包名也是不盡相同,比如 MIUI ROM 中它已經被改為 com.mi.webkit.core 。從 WebView 的版本歷史中可以看到自 Android 5.0 開始 WebView 移植成了一個獨立的 apk,可以不依賴系統而獨立存在和更新,這時候起 WebView 的包名就正式改為 com.google.android.webview 了。
所以這就是鄭核為什麼網上一堆人問為啥升級了一下系統 WebView ,App 內使用到 WebView 的地方或者是內置瀏覽器一碰就報 PackageManager$NameNotFoundException: com.google.android.webview 或者 PackageManager$NameNotFoundException: com.android.webview 之類的錯誤,這些問題在 Android 5.0 的機器上非常常見,因為你升級了 WebView 之後 TMD 包名都變了🤣,而 ROM 定製商一般在版本銜接時都很保守,所以即使系統升到了 Android 5.0 ,解決方案未必就是最新的,內置的 WebView 依然可能是硬編碼進 ROM 的,所以系統環境引用的包名可能依舊是 com.android.webview ,你升級到 com.google.android.webview 它當然不認識了😂。
通過上面一通廢話,你應該知道了,替換的坑就在如果你換上去的 WebView 包名和原內置的 WebView 包名不一致,就無法使用,所以就需要找一個包名一致的高版本 APK 了,還有一種方法是在系統目錄某個配置文件里改個什麼值,也就是包名引用,這樣你就能換成任何包名的 APK 了,這個暫時沒仔細研究,後續有結果了再更新。
APKMirror 是一個 APK 鏡像站點,在這里可以找到很多 APK 的 release 版本以及歷史版本,尤其 Google 全家桶系列的 APK 非常全,我們在這里根據需求直接搜索包名就可以了,我這里需要 com.android.webview ,檢索到如下結果,可以看到這些都是從第三方 ROM 里提取出來的。
因為 Google 官方早在 WebView 40 的時候就已經將包名換成 com.google.android.webview 了,最新的是 72.xxx ,我翻了 15 頁才找到最早改名並獨立出來的那個版本😂。
adb connect 192.168.18.235
adb shell
su
mount -o rw,remount /system
這里原目錄下的文件分別有 /webview/webview.apk 和 /webview/lib/arm/libwebviewchromium.so ,備份原目錄:
cd /system/app
mv webview/ webview-b/
mkdir -p webview/lib/arm/
這里很簡單,文件後綴 .apk 直接改成 .zip 然後解壓縮,復制出 libwebviewchromium.so 即可
先上傳文件到設備 /sdcard ,然後執行如下命令移動過去,和原路徑以及原文件名保持一致即可。
mv /sdcard/xxx.apk /system/app/webview/webview.apk
mv /sdcard/xxx.so /system/app/webview/lib/arm/libwebviewchromium.so
cd /system/app/
chmod 777 webview/*
adb reboot
如上一頓操作,其實也沒什麼難度,主要的坑就是包名一致的問題,還有一些系統目錄訪問許可權之類的問題,之前網上搜了好多,都說不 root 沒法換,或者換了會出問題,root 許可權其實就是為了訪問和寫入系統目錄,通過重新掛載就解決了,換了會崩掉的問題其實就是歷史遺留問題,從 4.x 過度到 5.0 WebView 獨立了,所以包名變了,或者是 ROM 定製方不按套路來導致換上去的 WebView 不被系統識別,只要找到合適的包就解決了。
Ⅱ 移動開發基礎教程:Android是什麼 安卓開發
Android是基於Linux內核的操作系統,是谷歌公司在2007年11月5日公布的手機操作系統,早期由谷歌開發,後由開放手持設備聯盟(Open Handset Alliance)開發。它採用了軟體堆層(software stack,又名以軟體疊層)的架構,主要分為三部分。底層Linux內核只提供基本功能;其他的應用軟體則由各公司自行開發,部分程序以java編寫。
一、簡介
BlackBerry和iPhone都提供了受歡迎的、高容量的移動平台,但是卻分別針對兩個不同的消費群體。BlackBerry是企業業務用戶的不二選擇。但是,作為一種消費設備,它在易用性和 「新奇特性」 方面難以和iPhone抗衡。Android則是一個年輕的、有待開發的平台,它有潛力同時涵蓋行動電話的兩個不同消費群體,甚至可能縮小工作和娛樂之間的差別。
如今,很多基於網路或有網路支持的設備都運行某種Linux內核。這是一種可靠的平台:可經濟有效地進行部署和提供支持,並且可直接作為面向部署的良好的設計方法。這首攜鏈些設備的UI通常是基於HTML的,可通過PC或Mac瀏覽器查看。但並不是每個設備都需要通過一個常規的計算設備來控制。想像一下傳統的家用電器,例如電爐、微波爐或麵包機。如果您者孫的家用電器由Android控制,並且有一個彩色觸摸屏,會怎麼樣?如果電爐上有一個Android UI,那麼操控者甚至可以烹飪點什麼東西。
二、Android術語
在Eclipse環境中開發Android應用程序需要了解Eclipse環境和Android平台的知識。了解以下術語會有助於用Eclipse插件開發Android應用程序。
Open Handset Alliance
這是一個由谷歌公司主導的組織,它由許多公共和私人組織組成。
Android
這是Open Handset Alliance的主打產品。它是一種針對移動設備的開放源碼操作環境。
模擬器
模擬另一個系統的軟體工具—這常常是在個人計算機(IBM、Mac、Linux)上運行的一個環境,它模擬另一個環境,比如移動計算設備。
Linux
一種開放源碼的操作系統內核,許多計算平台都使用這種操作系統,包括伺服器、桌面計算機、網路設備和移動計算設備。Android在Linux內核上運行。
Dalvik Virtual Machine
Dalvik VM是Android產品組合中的一種操作環境,它在運行時解釋應用程序代碼。Dalvik VM與Java VM相似,但是兩者不兼容。
三、Android簡史
Android平台是Open Handset Alliance的成果,Open Handset Alliance 組織由一群共同致力於構建更好的行動電話的公司組成。這個組織由谷歌領導,包括移動運營商、手持設備製造商、零部件製造商、軟體解決方案和平台提供商以及市場營銷公司。從軟體開發的觀點看,Android正處在開源領域的中心位置。
市場上第一款支持Android的手機是由HTC製造並由T-Mobile供應的G1。這款隱山設備從設想到推出花了大約一年的時間,惟一可用的軟體開發工具是一些實行增量改進的SDK發行版。隨著G1發行日的臨近,Android團隊發布了SDK V1.0,用於這個新平台的應用程序也浮出水面。
為了鼓勵創新,谷歌舉辦了兩屆「Android Developer Challenges」,為優勝的參賽作品提供數百萬美金的獎勵。G1 問世幾個月之後,隨後就發布了Android Market,它使用戶可以瀏覽應用程序,並且可以將應用程序直接下載到他們的手機上。經過大約 18 個月,一個新的移動平台進入公眾領域。
四、Android平台
Android平台被稱為一個產品組合,因為它是一系列組件的集合,包括:
基於Linux內核的操作系統 Java編程環境 工具集,包括編譯器、資源編譯器、調試器和模擬器 用來運行應用程序的Dalvik VM
Android有豐富的功能,因此很容易與桌面操作系統混淆。Android是一個分層的環境,構建在Linux內核的基礎上,它包括豐富的功能。UI 子系統包括:
窗口 視圖 用於顯示一些常見組件(例如編輯框、列表和下拉列表)的小部件。
Android包括一個構建在WebKit基礎上的可嵌入瀏覽器,iPhone 的Mobile Safari瀏覽器同樣也是以WebKit為基礎。
Android提供多種連接選項,包括WiFi、藍牙和通過蜂窩(cellular)連接的無線數據傳輸(例如GPRS、EDGE 和3G)。Android應用程序中一項流行的技術是鏈接到谷歌地圖,以便在應用程序中顯示地址。Android軟體棧還提供對基於位置的服務(例如GPS)和加速計的支持,不過並不是所有的Android設備都配備了必需的硬體。另外還有攝像支持。
過去,移動應用程序努力向桌面應用程序看齊的兩個領域分別是圖形/媒體和數據存儲方法。Android通過提供對2D和3D圖形的內置支持,包括OpenGL 庫,解決了圖形方面的挑戰。由於Android平台包括流行的開源SQLite 資料庫,因此緩解了數據存儲的負擔。圖1顯示一個簡化的Android軟體層次結構。
五、應用程序架構
如前所述,Android運行在Linux內核上。Android應用程序是用Java編程語言編寫的,它們在一個虛擬機(VM)中運行。需要注意的是,這個VM並非您想像中的JVM,而是Dalvik Virtual Machine,這是一種開源技術。每個Android應用程序都在Dalvik VM的一個實例中運行,這個實例駐留在一個由Linux內核管理的進程中,如下圖所示。
Android應用程序由一個或多個組件組成:
活動
具有可視UI的應用程序是用活動實現的。當用戶從主屏幕或應用程序啟動器選擇一個應用程序時,就會開始一個動作。
服務
服務應該用於任何需要持續較長時間的應用程序,例如網路監視器或更新檢查應用程序。
內容提供程序
可以將內容提供程序看作資料庫伺服器。內容提供程序的任務是管理對持久數據的訪問,例如SQLite資料庫。如果應用程序非常簡單,那麼可能不需要創建內容提供程序。如果要構建一個較大的應用程序,或者構建需要為多個活動或應用程序提供數據的應用程序,那麼可以使用內容提供程序實現數據訪問。
廣播接收器
Android應用程序可用於處理一個數據元素,或者對一個事件(例如接收文本消息)做出響應。
Android應用程序是連同一個AndroidManifest.xml文件一起部署到設備的。AndroidManifest.xml包含必要的配置信息,以便將它適當地安裝到設備。它包括必需的類名和應用程序能夠處理的事件類型,以及運行應用程序所需的許可。例如,如果應用程序需要訪問網路 — 例如為了下載一個文件 — 那麼manifest文件中必須顯式地列出該許可。很多應用程序可能啟用了這個特定的許可。這種聲明式安全性有助於減少惡意應用程序損害設備的可能性。
六、所需工具
開始開發Android應用程序的最簡捷的方式是下載AndroidSDK 和EclipseIDE。Android開發可以在微軟Windows、Mac OS X 或Linux上進行。
本文假設您使用的是Eclipse IDE和用於Eclipse的Android Developer Tools插件。Android應用程序是用Java語言編寫的,但是是在Dalvik VM(非Java虛擬機)中編譯和執行的。在Eclipse中用Java語言編程非常簡單;Eclipse 提供一個豐富的Java環境,包括上下文敏感幫助和代碼提示。Java 代碼通過編譯後,Android Developer Tools 可確保適當地將它打包,包括AndroidManifest.xml 文件。
雖然沒有Eclipse和Android Developer Tools插件也可以開發Android應用程序,但是那樣就需要熟悉Android SDK。
AndroidSDK 是作為一個ZIP文件發布的,可以將該文件解壓到硬碟上的一個目錄中。由於有多個SDK更新,建議有意識地組織開發環境,以便在不同的SDK安裝之間輕松地切換。
SDK 包括:
android.jar
Java 歸檔文件,其中包含構建應用程序所需的所有的Android SDK 類。
documention.html和docs目錄
本地和網上提供的SDK文檔。這些文檔的主要形式為JavaDocs,以便於在SDK中導航大量的包。文檔還包括一個高級開發指南和Android社區的鏈接。
Samples目錄
Samples子目錄包含各種應用程序的源代碼,包括ApiDemo,該應用程序演示了很多API。這個示例應用程序可以作為Android應用程序開發的良好起點。
Tools目錄
包含所有用於構建Android應用程序的命令行工具。最常用、最有用的工具是adb實用程序(Android Debug Bridge)。
usb_driver
該目錄包含將開發環境連接到支持Android的設備(例如G1或Android Dev 1解鎖開發手機)所需的驅動程序。只有Windows平台的開發人員才需要這些文件。
Android應用程序可以在實際的設備上運行,也可以在Android SDK 附帶的Android Emulator上運行。圖 3 顯示Android Emulator 的主屏幕。
七、Android Debug Bridge
adb實用程序支持一些可選命令行參數,以提供強大的特性,例如復制文件到設備或從設備復制文件。可以使用shell命令行參數連接到手機本身,並發送基本的shell命令。圖 4 顯示在通過USB線連接到Windows筆記本電腦的一個實際設備上運行的adb shell命令。
在這個shell環境中,可以:
顯示網路配置,網路配置可顯示多個網路連接。注意這多個網路連接:
lo是本地或loopback連接。
tiwlan0是WiFi連接,該連接由本地DHCP伺服器提供一個地址。
顯示PATH環境變數的內容。
執行su命令,以成為超級用戶。
將目錄改為/data/app,其中存放用戶應用程序。
列出包含某個應用程序的目錄。Android應用程序文件實際上是歸檔文件,可通過WinZip之類的軟體查看。擴展名為apk。
發出ping命令,查看Google.com是否可用。
從相同的命令提示符環境中,還可以與SQLite 資料庫交互,啟動程序以及執行許多其他系統級任務。想像一下您正在連接到電話,因此這是非常了不起的功能。
Ⅲ Android開發之WebView(一)配置&小技巧
背景:原生時間緊沒時間開發任務量大的任務,而前端又閑著打醬油
方案:原生+webview混合開發
缺點:對於比較復雜的頁面,webview在性能上力不從心;且與原生通信頻繁也增加了隱藏的工作量
優點:能自帶支持動態更新(js),能充分利用人力
webview是一個基於webkit引擎,展示web頁面的控制項。Android上的webview在低版本和高版本採用了不同的webkit版本內核,Android4.4(19)後直接使用了Chrome內核;WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對url請求,頁面載入,渲染,頁面交互進行強大的處理。一般來說webview可單獨使用,也可聯合其工具類一起使用
移動應用的主體是webview,主要以網頁語言編寫,穿插Native功能的Hybrid App開發類型。激活webview為活躍狀態,能正常執行網頁的響應;當webview 的頁面被失去焦點切換到後台不可見狀態onPause時,需要通知自己暫停所有的動作,比如DOM的解析,plugin的執行,JavaScript的執行等
1,顯示和渲染web頁面
2,直接使用本地assets或者網路上的html文件作為布局
3,可和JavaScript進行互相調用
1,直接在布局文件里寫死
2,動態添加進viewgroup中
註:不管以哪種方式,都必須注意webview的銷毀,否則可能會造成內存泄漏最終導致內存溢出crash
下面是WebView的一些常用的方法列舉,一些已經過時的方法未列出
下面是WebSettings的一些常用的方法列舉,一些已經過時的方法就沒有寫出來了
一般不管是動態生成還是xml寫死,只要處理好了引用持有問題,就能有效的避免內存泄漏;下面是我嘗試的方案,在工具類WebViewUtils.java里封裝好,在activity銷毀的時候調用
1,清除webview緩存和記錄
2,可以設置不啟用緩存
3,H5的一些控制項標簽不支持導致的白屏
4,xml啟用軟體加速
5,通過menifest的來配置,在目標webview的activity設置
解決方案:
解決方案:
解決方案:
上一篇: Flutter入門-01-工程創建&目錄介紹
Ⅳ 關於Android WebView的那些事
[TOC]
Webkit是一個開源瀏覽器項目,其中,對Android開發者來說,或多或少的都有些接觸。 在應用層來看,最經常使用無非這么幾個類:WebView(Android中最為復雜,也是最為簡單的一個View,繼承自AbsoluteLayout),WebViewClient、WebChromeClient(作為回調控制類)、WebSettings(進行設置項的配置)等;Webkit內部包含了網路請求、頁面渲染、Js引擎等等。在Android4.4之前的版本中,系統使用的是Webkit內核,其後,切換到Google的Chromium內核。本文主要介紹的是在Android中,如何使用Webkit進行H5頁面的展現,以及常見問題的分析手段。
下面的內容抄自網路 & 亂七八糟的地方,簡單了解一下。
<b><i>前面都是吹牛逼的信息,如何使用Webkit來更好的搬磚? 且聽如下分解</i></b>
XML布局中丟一個 <WebView> 標簽,然後再 Activity 或者 Fragment 中 findViewById ,進而 loadUrl ,一般也沒人這么簡單的用,除非寫Demo。很簡單,它就是一個Layout,提供了一個調用載入頁面的介面,不寫範例了,能看到這篇文章的都看過Google的API說明。
主要涉及到WebView和WebSettings兩個類。
例如:
其實就是WebView的父類ViewGroup和View的方法,不多說了。不過需要注意的是,不是所有的View或ViewGroup的方法對WebView都生效。
列舉幾類常用的,幾乎所有App的 WebView 都會設置的屬性:
</br>
如何處理頁面跳轉以及特殊 Scheme
這個回調可以說是最容易出問題的一個回調,表示什麼? 字面意思,讓你重寫這個URL 的loading,比如點擊html打電話的一個 <a href=「tel:110」> 標簽,作為一個有節操、有責任心的瀏覽器,你需要處理 H5常用的幾個Scheme :
除此之外,還有各個應用自定義的scheme ,舉個例子,支付寶的支付Scheme : alipay: 。 這里的返回值,就代表你有沒有能力處理這個url,沒有的話Webkit就默認處理了。
需要注意的是,這個回調的觸發的絕大多數情況是點擊頁面的 <a href="xxxx"> a標簽,在Android中 loadUrl("http://www..com") ,是不會回調的,為什麼不會回調,各位自行理解吧。
超鏈接 <a> 標簽怎麼寫: 點我
特別說下窗口常見的兩種打開方式:
針對單頁模式的WebView框架(所有的html窗口均使用同一個WebView實例),不需要關注target的。
如果作為一個成熟的瀏覽器框架的話,是需要支持Html、JavaScript使用新窗口打開頁面,需要實現如下回調:
還有一個相關設置項: WebSettings.
此時,系統將不會再回調 shouldOverrideUrlLoading 。新窗口邏輯的具體實現機制,可以參考系統browser實現邏輯。
<b> 這里有個坑 </b>
Android 4.4版本 ,如果實現了onCreateWindow,也就是說頁面 <a> 標簽是這么寫的: <a href="http://www..com" target="_blank"> ,點擊此鏈接打開的新WebView窗口,此窗口中的url點擊,是不會觸發 shouldOverrideUrlLoading 。 這是剛替換成Chrominum內核出的一個bug。本人並沒在新版本上驗證是否已經修復。
另外,根據不同的Rom,底層實現是不一樣的,有的ROM會幫你處理各種調起scheme,也就是startActivity,有的ROM點一個url,就會拋一個intent出來,讓用戶選擇系統瀏覽器進行載入。
系統默認,提供了一個介面:
有什麼安全隱患呢?
戳這里
如果不知道Js怎麼寫, 請戳我
用PC的截圖意思一下,看出區別了吧。 這里確定、取消點擊以後就得調用 JsResult、JsPromptResult 的 confirm或者cancel。
因為安全問題,大一些的App Native與Js通信都不再用 WebView.addJavascriptInterface(Object) 了,都改用JsPrompt,因為JsPrompt中有message、有JsPromptResult可以返回給Js一些信息,所以橋選中了JsPrompt,另一個備選方案是JsConsole。
大體有這么幾種方式進行傳遞
具體方案實現時,多方面考慮使用何種方式。
還有一個比較牛逼的
系統源碼中均有方法注釋,怎麼用自己看吧。
那麼問題來了
查了下,只有這兩個相關的:
WebBackForwardList BackForwardList()
void clearHistory()
系統提供的關於歷史記錄的操作並不多,因為,不支持單條刪除啊,啊啊啊!
WebViewClient中,還有一個相關callback,當系統更新歷史記錄時回調:
void doUpdateVisitedHistory(WebView view, String url, boolean isReload)
<b>相關問題分析法:歷史棧回退錯誤的定位</b>
絕大多數回退錯誤是由於介面調用、回調中邏輯執行時序錯誤。
定位方法:利用 BackForwardList , doUpdateVisitedHistory 兩個介面在 loadUrl、onPageStart、onPageFinish 以及邏輯相關的地方調用,打log,查看歷史棧,這里注意下由於loarl是非同步的,需要考慮是否加延遲等等保證調用時機的准確。
本人曾經遇到一個問題:在WebChromeClient中的 JsPrompt回調中,直接進行WebView.goBack操作,結果發現WebView確實回退到上一個頁面,但是BackFowardList當前頁面的index未更新的問題,具體見另一個篇blog。
網上有很多關於WebView內存泄露的討論,據傳,老版本的WebView在展示大量圖片的時候,即使 WebView.destory() WebView=null ,也不會銷毀。
在新版本上,實際測試結果:compileSDKVersion 23 不會泄露。
一般,我們如何銷毀WebView比較保險?
這個問題好大。。。
暫時不介紹,另起blog進行說明。
解決方案:
實現回調 void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
首先,提幾個需要注意的點:
個人歸納總結幾點:
step1 進入開發者模式,勾選「顯示布局邊界」;
step 2,回到你想查看的界面; step 3 假如內容區只有一層基本就是H5 WebView的,多個層級,就是Native。
看到左右圖的差異了吧。
還有另一種方法,RD屌絲們看這里,特別說明,這種方法不太適合瀏覽器。 (自有內核,可能會不準確)
好了,就介紹到這里,零零散散的幾年前寫的文章,第一篇blog,如有不對的地方,還懇請大家指正。
Ⅳ 安卓Android軟體開發用什麼語言
Android以Java為編程語言。
操作系統與應用程序的溝通橋梁,並用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。
Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。
Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
(5)androidwebkit編譯擴展閱讀:
安卓軟體開發學習內容
Android基礎階段:平台架構特性(JAVA/C) Market/應用程序組件 環境搭建與部署/打包與發布 AVD/DDMS/AAPT 調試與測試 相關資源訪問/資源製作 。
Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及深層實現。
Android進階初級:組件Widget/ 菜單Menu/ 布局Layout 詳解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL資料庫原理, SQLite /SharedPreferences/File詳解 多媒體Audio/Video/Camera 詳解。
Android進階高級:藍牙/WIFI SMS/MMS 應用實現 深層次解析GPS原理,實現。LocationManager/LocationProvider 進行定位/跟蹤/查找/趨近警告以及Geocoder正逆向編解碼等技術細節。
2D圖形庫(Graphics/View)詳解 SDCARD/感測器/手勢 應用實現。