你是否真的適合搞NDK開發?

最近不少人說,Android愈來愈很差找工做了,學習NDK開發會不會好點,今天就聊聊這個問題。是否應該選擇學NDK?linux

1.哪些場景下要用到NDK開發?c++

跨平臺的庫,如FFmpeg, skip,weex,程序員

加固,防逆向算法

簽名校驗性能優化

圖片壓縮微信

音視頻解碼weex

OpenGL ES 高級特效ide

熱修復 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.若是要學,怎麼學?

官方NDK連接遊戲代理:http://www.walajiao.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源碼剖析,這些書之類。

程序多動手實踐,纔是最正確的。看會,不表明會。先就說這麼多,有問題,歡迎探討。

相關文章
相關標籤/搜索