編輯推薦
《移動開發經典叢書:Android C++高級編程:使用NDK》提供瞭移植、開發以及利用Android平颱上的C++和其他原生代碼所需要的知識和技能,以便於運行圖形化的高級應用和更復雜的原生應用。
內容簡介
Android是移動電話市場的主要角色而且其市場份額正在持續增長。它是一個完整的、開放的、免費的移動平颱,該平颱給移動應用開發者提供瞭無限的機會。
雖然Android平颱的官方程序語言是Java,但應用開發者不限於僅使用Java技術。
Android允許應用開發者通過Android原生開發包(NDK)使用諸如C和C++之類的原生代碼語言實現他們的部分應用。《移動開發經典叢書·Android C++高級編程:使用NDK》中我們將學習如何用AndroidNDK通過原生代碼語言去實現自己的Android應用中對性能要求較高的部分。
《移動開發經典叢書·Android C++高級編程:使用NDK》介紹瞭原生應用開發、可用的原生API以及故障排除技術的詳細敘述,包括用按步驟的指導和屏幕截圖以幫助Android開發人員迅速達到開發原生應用的目的。
主要內容:
在主要的操作係統上安裝Android原生開發環境。
使用Eclipse集成開發環境開發原生代碼。
使用Java原生接口(JNI)將原生代碼與Java代碼連接。
用SWIG自動生成JNI代碼。
用POSIX和Java綫程開發多綫程原生應用。
用POSIXsockets開發網絡原生應用。
用logging、GDB和Eclipse調試器調試原生代碼。
用Valgrind分析內存問題。
用GProf測試應用性能。
用SIMD/NEON優化原生代碼。
作者簡介
Onur Cinar,有超過17年的移動和通信領域大規模復雜軟件項目的設計、開發和管理經驗。他的專業技能包括VoIP、視頻通信、移動應用程序、網格計算和不同平颱上的網絡技術。從Android平颱問世他就一直積極從事這方麵的工作。他是Apress齣版的Android Apps with Eclipse一書的作者。他在美國賓州費城Drexel大學獲得計算機科學理學學士學位。現就職於微軟Skype分部,任Android平颱的Skype客戶端高級産品工程經理。
內頁插圖
目錄
第1章 Android平颱上的C++入門
1.1 Microsoft Windows
1.1.1 在Windows平颱上下載並安裝JDK開發包
1.1.2 在Windows平颱上下載並安裝ApacheANT
1.1.3 在Windows平颱上下載並安裝AndroidSDK
1.1.4 在Windows平颱上下載並安裝Cygwin
1.1.5 在Windows平颱上下載並安裝AndroidNDK
1.1.6 在Windows平颱上下載並安裝Eclipse
1.2 AppleMacOSX
1.2.1 在Mac平颱上安裝Xcode
1.2.2 驗證Mac平颱的Java開發包
1.2.3 驗證Mac平颱上的ApacheANT
1.2.4 驗證GNUMake
1.2.5 在Mac平颱上下載並安裝AndroidSDK
1.2.6 在Mac平颱上下載並安裝AndroidNDK
1.2.7 在Mac平颱上下載並安裝Eclipse
1.3 UbuntuLinux
1.3.1 檢查GNUC庫版本
1.3.2 激活在64位係統上支持32位的功能
1.3.3 在Linux平颱上下載並安裝Java開發工具包(JDK)
1.3.4 在Linux平颱上下載並安裝ApacheANT
1.3.5 在Linux平颱上下載並安裝GNUMake
1.3.6 在Linux平颱上下載並安裝AndroidSDK
1.3.7 在Linux平颱上下載並安裝AndroidNDK
1.3.8 在Linux平颱上下載並安裝Eclipse
1.4 下載並安裝ADT
1.4.1 安裝Android平颱包
1.4.2 配置模擬器
1.5 小結
第2章 深入瞭解AndroidNDK
2.1 AndroidNDK提供的組件
2.2 AndroidNDK的結構
2.3 以一個示例開始
2.3.1 指定AndroidNDK的位置
2.3.2 導入示例項目
2.3.3 嚮項目中添加原生支持
2.3.4 運行項目
2.3.5 用命令行對項目進行構建
2.3.6 檢測AndroidNDK項目的結構
2.4 構建係統
2.4.1 Android.mk
2.4.2 Application.mk
2.5 使用NDK-Build腳本
2.6 排除構建係統故障
2.7 小結
第3章 用JNI實現與原生代碼通信
3.1 什麼是JNI
3.2 以一個示例開始
3.2.1 原生方法的聲明
3.2.2 加載共享庫
3.2.3 實現原生方法
3.3 數據類型
3.3.1 基本數據類型
3.3.2 引用類型
3.4 對引用數據類型的操作
3.4.1 字符串操作
3.4.2 數組操作
3.4.3 NIO操作
3.4.4 訪問域
3.4.5 調用方法
3.4.6 域和方法描述符
3.5 異常處理
3.5.1 捕獲異常
3.5.2 拋齣異常
3.6 局部和全局引用
3.6.1 局部引用
3.6.2 全局引用
3.6.3 弱全局引用
3.7 綫程
3.7.1 同步
3.7.2 原生綫程
3.8 小結
第4章 使用SWIG自動生成JNI代碼
4.1 什麼是SWIG
4.2 安裝
4.2.1 Windows平颱上SWIG的安裝
4.2.2 在MacOSX下安裝
4.2.3 在UbuntuLinux下安裝
4.3 通過示例程序試用SWIG
4.3.1 接口文件
4.3.2 在命令行方式下調用SWIG
4.3.3 將SWIG集成到Android構建過程中
4.3.4 更新Activity.
4.3.5 執行應用程序
4.3.6 剖析生成的代碼
4.4 封裝C語言代碼
4.4.1 全局變量
4.4.2 常量
4.4.3 隻讀變量
4.4.4 枚舉
4.4.5 結構體
4.4.6 指針
4.5 封裝C++代碼
4.5.1 指針、引用和值
4.5.2 默認參數
4.5.3 重載函數
4.5.4 類
4.6 異常處理
4.7 內存管理
4.8 從原生代碼中調用Java
4.8.1 異步通信
4.8.2 啓用Directors
4.8.3 啓用RTTI
4.8.4 重寫迴調方法
4.8.5 更新HeIIojniActivity
4.9 小結
第5章 日誌、調試及故障處理
5.1 日誌
5.1.1 框架
5.1.2 原生日誌API
5.1.3 受控製的日誌
5.1.4 控製颱日誌
5.2 調試
5.2.1 預備知識
5.2.2 調試會話建立
5.2.3 建立調試示例
……
第6章 BionicAPI入門
第7章 原生綫程
第8章 POSIXSocketAPI:麵嚮連接的通信
第9章 POSIXSocketAPI:無連接的通信
第10章 POSIXSocketAPI:本地通信
第11章 支持C++
第12章 原生圖形API
第13章 原生音頻API
第14章 程序概要分析和NEON優化
前言/序言
洞悉Android原生開發前沿:精研NDK,解鎖移動應用極緻性能 在這智能手機已成為生活核心的時代,移動應用的體驗,尤其是性能,早已成為用戶選擇和留存的關鍵。從流暢的UI交互到復雜的圖形渲染,再到實時音視頻處理、大規模數據運算,高效的底層實現能力是衡量一款應用是否卓越的重要標尺。而Android原生開發,特彆是利用Android NDK(Native Development Kit),正是實現這一目標的不二法門。 本書並非泛泛而談的Android基礎教程,而是直擊核心,專注於Android C++高級編程。它以一個極為明確且深入的視角,帶領讀者踏上一段探尋Android平颱下C++開發精髓的旅程。這本書是獻給那些不滿足於Dalvik/ART虛擬機性能上限,渴望觸及硬件底層,追求極緻性能與效率的Android開發者。如果你已經具備一定的Java/Kotlin開發基礎,並希望在性能敏感的場景下,能夠擁有更強大的掌控力,那麼這本書將是你邁嚮Android原生開發高級領域的絕佳起點。 為何選擇NDK?性能的終極追求與跨平颱可能 隨著移動互聯網的飛速發展,應用的復雜度與日俱增,許多原生Android應用中的計算密集型任務,如遊戲引擎、圖像/視頻處理、機器學習模型推理、物理模擬、加密解密等,如果僅僅依賴Java/Kotlin,其性能錶現往往會受到虛擬機指令集和垃圾迴收機製的製約。此時,NDK便應運而生,它允許開發者直接使用C/C++語言編寫高性能的代碼,並將其集成到Android應用中。 通過NDK,你可以: 最大化性能: C/C++代碼可以編譯成ARM、x86等原生指令集,直接在CPU上運行,避免瞭Java/Kotlin虛擬機帶來的性能損耗,尤其在CPU密集型計算方麵,性能提升往往是指數級的。 復用現有C/C++庫: 如果你的團隊或項目已經積纍瞭大量的C/C++庫,NDK可以讓你無縫地將這些成熟、高效的代碼集成到Android應用中,節省開發時間和成本。 實現跨平颱開發: NDK為移動平颱帶來瞭C/C++的強大能力,這使得開發者能夠更容易地在Android、iOS甚至桌麵平颱之間共享部分核心業務邏輯,構建真正的跨平颱解決方案。 訪問更底層的係統API: NDK提供瞭一些接口,允許你直接調用Android原生係統的API,這在進行一些係統級的功能開發時尤為重要。 本書將深入剖析NDK的工作原理,從最基礎的JNI(Java Native Interface)交互機製,到如何有效地組織和管理原生代碼,再到如何進行性能調優,層層遞進,讓你充分理解NDK的強大之處。 書中的核心內容概覽: 本書的設計思路是以實踐為導嚮,理論與實踐相結閤,確保讀者不僅能理解概念,更能掌握動手實踐的能力。 JNI的深度解析與高級技巧: JNI是Java/Kotlin與C/C++之間通信的橋梁,本書不會停留在簡單的函數調用,而是會深入探討JNI的內存管理、數據類型轉換、對象傳遞、異常處理、多綫程安全等關鍵細節。你將學習如何設計高效的JNI接口,如何避免常見的JNI陷阱,以及如何優化JNI調用的開銷。這部分內容是掌握NDK開發的基礎,也是決定原生代碼性能的關鍵。 C/C++代碼在Android上的編譯與構建: 理解Android的構建係統(Gradle)如何與NDK協同工作至關重要。本書將詳細介紹CMake和ndk-build這兩種常用的構建工具的使用方法,包括如何配置構建腳本、管理依賴、設置編譯選項、生成不同架構的ABI(Application Binary Interface)庫等。你將學習如何構建復雜的原生項目,如何集成第三方C/C++庫,並掌握跨平颱構建的策略。 性能優化與內存管理: 原生代碼的性能優勢固然巨大,但如果不善加利用,也可能導緻內存泄漏或性能瓶頸。本書將提供一套係統的性能分析和優化方法論,包括如何使用Android Studio內置的性能分析工具(如Profiler)來檢測CPU使用率、內存占用等,如何進行代碼級的優化,以及如何有效地管理原生內存,防止內存泄漏,確保應用的穩定性和高效性。 圖形與多媒體: Android平颱在圖形渲染和多媒體處理方麵擁有強大的原生API。本書將引導你探索如何利用OpenGL ES進行高性能的2D/3D圖形渲染,構建流暢炫酷的遊戲畫麵或可視化效果。同時,你還將學習如何使用Android的媒體框架(如MediaCodec, MediaMuxer)來處理音視頻編解碼、錄製、播放等復雜任務,實現高性能的多媒體應用。 跨平颱庫的集成與應用: 現代移動開發往往需要集成各種成熟的跨平颱庫,如用於圖像處理的OpenCV,用於機器學習的TensorFlow Lite,用於網絡通信的Boost.Asio或libcurl等。本書將詳細介紹如何將這些第三方C/C++庫集成到Android項目中,並與Java/Kotlin代碼進行有效的交互。你將學習到庫的構建、依賴管理、ABI適配等關鍵技術,從而快速構建功能強大的應用。 綫程與並發: 在原生代碼中進行多綫程編程需要更精細化的控製。本書將深入探討C++11/14/17標準中的並發特性,以及Android提供的Pthreads等原生綫程API。你將學習如何設計綫程安全的結構,如何處理共享資源的同步問題,如何避免死鎖和競態條件,以及如何利用多核CPU的優勢來提升應用性能。 異常處理與調試: 原生代碼的調試比Java/Kotlin更具挑戰性。本書將介紹如何在Android Studio中進行C/C++代碼的調試,包括設置斷點、查看變量、分析堆棧信息等。同時,也將涵蓋原生代碼的異常處理機製,如何捕獲和處理C++異常,以及如何將原生異常傳遞給Java/Kotlin層,確保應用的健壯性。 高級主題與未來展望: 除瞭核心技術,本書還會涉及一些更高級的主題,例如如何編寫JNI庫的單元測試,如何對NDK項目進行靜態分析和代碼審查,以及NDK在未來的發展趨勢,如WebAssembly在移動端的應用潛力等。 本書的目標讀者: 有一定Android基礎的開發者: 熟悉Android的Java/Kotlin開發,瞭解Activity、Fragment、Service等核心組件,並希望在性能方麵進行突破。 尋求極緻性能的開發者: 正在開發對性能有極高要求的應用,如遊戲、AR/VR應用、圖像/視頻處理工具、科學計算應用等。 希望復用C/C++代碼庫的開發者: 項目中存在大量現有的C/C++代碼,希望將其集成到Android應用中。 對底層技術感興趣的開發者: 希望深入理解Android平颱的工作原理,探索原生代碼的強大能力。 有誌於跨平颱開發的開發者: 希望學習如何利用C/C++在Android平颱上實現跨平颱功能。 閱讀本書,你將收獲: 掌握NDK開發,你將不再受限於虛擬機,能夠以近乎原生代碼的速度實現各種復雜的計算和功能。這將極大拓展你的開發視野,讓你能夠承接更具挑戰性的項目,為用戶提供更卓越、更流暢的應用體驗。本書將是你成為一名資深Android原生開發工程師的寶貴階梯,助你站在移動技術的最前沿,解鎖應用的無限可能。