2012年上市的书,现在再看获益依然很多。建议用java写应用的朋友多关注下NDK方面的知识,在提高程序性能和跨平台方面会有很大帮助。也是进阶的必经阶段。
如图
书中的例子比较旧,用的是Android.mk脚本进行在Eclipse上编译打包,我习惯用CMakeList.txt形式在Android Studio中整合使用,C/C++的内部逻辑没有变化。
一、环境搭建
第一至三章介绍NDK环境在Windows、Linux、Mac系统上的环境搭建,一看就懂,用Android Studio更简单,点几下旧好了,不详述。
二、JNI的实现,日志调试,错误排查
第三至五章介绍JNI的实现原理及调试方法。
头文件xxx.h的生成方法:
在java类中用native关键字对方法进行定义,打开CMD终端,将路径cd到java源码目录,用以下命令生成头文件
javah com.ideacodecom.nativethreads.MainActivity
就会在java文件所在路径下生成xxx.h的文件,这个文件定义了C/C++文件的方法,不用再手动修改。
JNI强制参数:
JNIENV* env:指向可用JNI函数表的接口指针
jobject obj:生成头文件的java类的对象引用
各种数据类型jni中的类型和java中的数据类型对比:
https://blog.csdn.net/zhao007z5/article/details/80061819
SWIG生成JNI:详情查看其余资料
三、Bionic的应用实例
第六至十三章介绍了如何利用Bionic C库进行实际的应用开发,Bionic是Android为程序开发提供的POSIX变准C库。
第七章:原生线程,介绍在原生代码中线程的实现
着重讲解POSIX线程的使用和同步机制
第八、九、十章介绍POSIX在网络通信方面的应用
第八章:POSIX Socket面向连接的通信,TCP
第九章:POSIX Socket无连接的通信,UDP的应用,需要解决丢包、粘包的问题,系统底层已经处理这方面的需求。接受数据用recvfrom、发送数据用sendto
第十章:POSIX Socket本地通信,同一设备两个程序之间或同一个程序原生代码和java代码之间通信。
第十二、十三章介绍NDK在多媒体方面应用。
第十二章:通过实现一个AVI格式的视频播放器展示 JNI Graphics API(bitmap.h)、OpenGL ES、原生Window API三中方式的事项逻辑。
第十三章:通过实现一个wav格式的音频播放器展示 OpenSL ES的实现逻辑。用到了wavelib库进行文件解码。
第十四章介绍原生程序的profile分析及优化。
可以集成GNU Profile进行性能的检测
https://github.com/richq/android-ndk-profiler
部分章节的源码可以在
https://github.com/Apress/pro-android-c-w-ndk
查阅
后续补上我自己实现的章节源码。
to be continue...