標籤:
1. 你得知道,android開發打一開始就是java的事,沒其它語言什麼事情,就是說google提供的android sdk中的api都是java的api
2. 至於強大的跨平台語言,你懂的,非c/c++莫屬,說java是跨平台,那是扯淡,沒java虛擬機器看你能跑java不, 而c/c++語言是將程式直接編譯成本地機器碼,這與java這種語言是完全不一樣的
那麼問題來了,我開發遊戲要使用跨平台的語言比如說C++,但是android是用java開發的,我用C++寫的代碼沒法在android下面編譯,運行. 將C++程式員拒之門外, google不會做這麼蠢的事情
好,第一個問題就是,如何在android下面編譯並運行C++寫的代碼呢
答案就是:在android下面使用ndk編譯c/c++
在這裡有一些東西要我要給自己科普一下
在java的平台上有一個叫jni的東西,它的功能就是允許java代碼與其它語言寫的代碼進行互動
在NDK r5之前,你想在android下面使用c/c++進行開發,只能寫成動態連結程式庫,然後在java中以jni來調用這些庫
NDK r5之後,你就可以使用純C/C++來開發android程式了,這是2011年的事情了
到今天2015年初,有一個問題很多人都搞不懂,為什麼在android上面非要搞一個jvm呢,本來嵌入式開發cpu和記憶體都是很寶貴的資源,而在這方面的控制C/C++做的比JAVA好
至於原因,個人覺得吧,現在硬體廠商實在是太多了,你在PC上面開發程式一般都是跑在同種作業系統下面的,而作業系統屏蔽了這些硬體之間的差異,但是android並沒有在系統這一層級屏蔽硬體之間的差異,而是通過JVM來屏蔽硬體之間的差異,也就是說在android系統上面再搞一個jvm系統,也難怪它有一點點慢了
不過最新的android系統已經支援直接使用C/C++編譯成本地語言運行,而不在jvm上面運行了,我覺得android還是很有搞頭的
好了,現在回頭,說說NDK, 前面說了在android使用NDK來將C++代碼編譯成庫,然後由java通過jni來調用這些庫
那什麼是NDK呢,google官方給的解釋就是SDK前面加上Native,那麼叫NSDK咯,他想了想,還是叫NDK比較好,這隻是稱謂而已
那什麼是NDK呢,它是一套工具集,允許你用C++語言實現應用的一部分
OK, 我們來建立一個android項目
所有的本地代碼都會儲存到一個叫jni的檔案夾中,開啟它來看看吧
有一個Android.mk 檔案, 它是用來構建項目的
有一個Application.mk 檔案, 它是用來儲存編譯參數的(雖然它不是必須的)
再建立個ndk-build檔案來顯示編譯過程(同樣也不是必須的)
參考文檔
http://www.importnew.com/8038.html
http://www.importnew.com/8052.html
http://www.cnblogs.com/qq78292959/category/304331.html <這個是android ndk翻譯系列>
給自己的android掃盲文 - 1