最近很多人说,Android 越来越不好找工作了,学习 NDK 开发会不会好点,明天就聊聊这个问题。是否应该抉择学 NDK?
1. 哪些场景下要用到 NDK 开发?
跨平台的库,如 FFmpeg, skip,weex,
加固,防逆向
签名校验
图片压缩
音视频解码
OpenGL ES 高级特效
热修复 andfix
人脸识别 face++
加密算法
游戏开发
微信 apk 中的 so 文件
图片
手机淘宝 apk 中 so 文件
图片
2.NDK 开发,和 JNI 开发有什么区别?
JNI 是 JAVA NATIVE INTERFACE,JNI 只是一个中间层。JNI 中要用 c /c++ 作具体实现。达到 c /c++ 与 Java 通信的作用。不肯定要编译成 so 文件,才叫 JNI 开发。也不是 Android 上才有,Java 程序员一样能够做 JNI,不会写 Activity 也能够。Java 最简略 Main 函数,能够申明一个 Native 办法,在 VS 中,写一段 c /c++ 代码,依照 JNI 标准。编译成 dll 文件,放到 Java 工程中,一样能够执行。而 so 是只是不同平台动态链接库的产物,因为 Android 是基于 linux 平台。
3. 有没有必要搞 NDK 开发?
如果你的业务和 NDK 开发利用场景不是很有关联,能够不必搞,也是正当的。毕竟 Java 及 Android 中还有很多你不会玩的。如插件化(纯 Java 能够搞),如性能优化,如高级自定义控件,如源码学习等等。光这些够折腾良久了。把这些玩会了,你也是专家了。
当然,你如果业务有关联。如 Camera 美颜,滤镜,音视频等,如果要进阶,NDK 不必多说,必定要会玩的。NDK 实质上玩的是 c /c++,所以就须要好好学习 c /c++, 如虚函数,虚析构,虚基类,智能指针,宏函数,宏定义,构造体,共用体,运算符重载,指针,这些根本的 c ++ 相干。面向对象在任何语言中都受用。
4. 如果要学,怎么学?
Google 官网 NDK 链接:www.sangpi.com
老外有一本:Android NDK Beginner’s Guide
网上的 blog 最初看零碎的,要么就不看,不然东写一篇,西写一篇,没有零碎的线路,对初学者帮忙意义不大。
JNI Specification.chm 这个手册,很不便查问
The Java™ Native Interface Programmer’s Guide and Specification
把 JNI 相熟之后,而后写一些小案例,达到相熟水平,能够在看一些与 C /C++ 进阶的书,如,Effective c++,深刻了解 c ++ 对象内存模型,STL 源码分析, 这些书之类。
程序多入手实际,才是最正确的。看会,不代表会。先就说这么多,有问题,欢送探讨。