NDK開發與實踐(入門篇·微課視頻版)
蔣超
商品描述
目錄大綱
教學課件(PPT) 本書源碼??????
基 礎 篇
第1章 NDK入門基礎( 60min) 3
1.1 NDK的概念 3
1.1.1 JNI的基礎概念 3
1.1.2 NDK的使用場景 4
1.1.3 NDK的學習方法 4
1.1.4 開發資料 5
1.2 編譯概念 5
1.2.1 動態庫 5
1.2.2 靜態庫 18
1.2.3 靜態庫和動態庫的使用場景 21
1.2.4 交叉編譯 21
1.2.5 預編譯庫 22
1.2.6 預編譯庫和源碼編譯庫的區別 23
1.3 CPU指令集和ABI 24
1.3.1 CPU指令集 25
1.3.2 ABI 25
1.4 CMake概念 27
1.4.1 CMake介紹 27
1.4.2 選擇CMake的原因 28
1.5 NDK目錄介紹 29
1.6 本章小結 31
第2章 環境搭建( 41min) 32
2.1 Ubuntu環境搭建 32
2.1.1 Ubuntu虛擬機安裝 32
2.1.2 獨立NDK環境配置 48
2.2 集成NDK環境搭建之Android Studio 52
2.3 本章小結 56
第3章 NDK開發場景( 57min) 57
3.1 NDK開發實際集成源碼的場景 57
3.1.1 使用Android Studio源碼直接集成 57
3.1.2 使用命令編譯出符合平臺相關的預編譯庫 65
3.1.3 使用Android Studio 直接集成預編譯庫 70
3.1.4 使用開源代碼原始的方式交叉編譯FFmpeg 77
3.1.5 Neon 86
3.2 本章小結 88
第4章 CMake開發基礎( 72min) 89
4.1 CMake的基礎使用 89
4.1.1 日誌打印方法 89
4.1.2 流程控制 90
4.1.3 目標生成與鏈接 95
4.1.4 CMake設置庫的輸出路徑 96
4.1.5 CMake如何包含頭文件 97
4.1.6 CMake如何包含源文件列表及包含所有源文件語法 98
4.2 CMake多模塊場景 99
4.2.1 多CMake應用場景 99
4.2.2 多CMake的實際使用案例 100
4.3 本章小結 104
第5章 NDK開發常用的數據類型及使用方法( 67min) 105
5.1 基礎類型說明 105
5.2 引用類型說明 106
5.2.1 C語言下的引用類型 106
5.2.2 C++語言下的引用類型 107
5.3 UTF-8和UTF-16字符串 108
5.4 常用數據類型操作函數的使用 109
5.4.1 String字符串的使用 109
5.4.2 數組操作 111
5.5 本章小結 116
第6章 NDK開發核心知識點( 51min) 117
6.1 JavaVM 117
6.2 JNIEnv 119
6.3 全局引用和局部引用 120
6.3.1 局部引用 120
6.3.2 全局引用 122
6.3.3 弱全局引用 124
6.3.4 JNI_OnLoad 126
6.3.5 JNI_OnUnload 127
第7章 NDK開發關鍵函數( 163min) 128
7.1 函數操作基礎 128
7.1.1 函數簽名 128
7.1.2 jclass 133
7.1.3 jmethodID 135
7.2 調用Java端的函數 136
7.2.1 Native調用Java端成員函數 137
7.2.2 Native調用Java端的靜態函數 140
7.3 Linux線程使用方法 141
7.3.1 線程的創建函數pthread_create 141
7.3.2 獲取線程ID函數pthread_self 142
7.3.3 線程退出函數pthread_exit 143
7.3.4 線程資源回收函數pthread_join 147
7.3.5 線程終止函數pthread_cancel 149
7.3.6 線程分離函數pthread_detach 153
7.3.7 線程屬性pthread_attr_t 155
7.3.8 小結 158
7.4 原生線程中獲取JNIEnv 158
7.5 本章小結 162
第8章 NDK開發函數註冊方式( 32min) 163
8.1 函數的靜態註冊方式 163
8.2 函數的動態註冊方式 164
8.2.1 JNINativeMethod 164
8.2.2 RegisterNatives和UnregisterNatives函數 165
8.2.3 示例 165
8.3 靜態註冊和動態註冊的優缺點及使用場景 167
8.3.1 靜態註冊的優缺點及使用場景 167
8.3.2 動態註冊的優缺點和使用場景 168
8.3.3 小結 168
8.4 本章小結 168
實 戰 篇
第9章 NDK開發之大量數據傳輸( 79min) 171
9.1 DirectByteBuffer簡單介紹 171
9.2 DirectByteBuffer的使用方法 172
9.2.1 創建DirectByteBuffer 172
9.2.2 DirectByteBuffer API使用 172
9.3 DirectByteBuffer的使用場景 177
9.3.1 大數據量的IO密集型操作 177
9.3.2 長期使用的數據 177
9.3.3 對內存管理有特殊要求的場景 177
9.3.4 需要直接訪問操作系統內存資源的場景 177
9.4 DirectByteBuffer的使用案例 177
第10章 NDK開發之opus開源庫開發案例( 70min) 181
10.1 開源庫opus源碼封裝 182
10.1.1 opus預編譯庫的編譯與集成 183
10.1.2 opus庫的基本使用 187
10.1.3 opus庫的封裝 190
10.2 使用opus開發PTT語音通話案例 192
10.2.1 UI開發 192
10.2.2 編解碼及網絡接口封裝 198
10.2.3 錄音功能實現 207
10.2.4 播放功能實現 210
10.3 本章小結 212
第11章 NDK開發調試( 80min) 213
11.1 使用Android Studio調試Native代碼 213
11.1.1 啟用調試功能 213
11.1.2 開始調試 214
11.2 問題跟蹤 225
11.2.1 Native函數返回值崩潰 225
11.2.2 動態庫Debug版本和Release版本的區別 226
11.2.3 如何快速定位Native崩潰 227
11.3 本章小結 231
第12章 線上崩潰Log捕獲( 31min) 232
12.1 使用谷歌開源庫捕獲崩潰信息 232
12.1.1 轉儲文件 232
12.1.2 平臺支持 233
12.1.3 工作過程 233
12.1.4 Breakpad封裝 233
12.2 線上崩潰信息捕獲的註意事項 243
第13章 NDK開發推薦做法( 14min) 245
13.1 數據傳遞 245
13.1.1 減少跨層傳遞次數 245
13.1.2 減少數據轉換 245
13.1.3 設計高效接口 246
13.1.4 綜合考慮性能和資源管理 246
13.1.5 盡量避免跨層異步通信 246
13.2 JNI線程使用時的註意事項 246
13.3 JNI接口開發建議 246
13.4 動態庫瘦身 247
參考文獻 248
VI
VII