對于Android,長期以來,我一直有兩件事搞不懂,
一個是為什么Android要選用Java。對于嵌入式開發(fā),CPU和內(nèi)存都很寶貴,居然還使用Java。
一個是為什么Android的開發(fā)站點(diǎn)要被墻。這只是一個技術(shù)網(wǎng)站啊。
最近,在一個Android開發(fā)人員的Blog上證實(shí)了在NDK r5使用C/C++進(jìn)行開發(fā)。(以前,Android 對C/C++開發(fā)的支持僅限于用C/C++開發(fā)動態(tài)鏈接庫,然后在Java中以JNI的形式來調(diào)用)現(xiàn)在,你可以用純C/C++開發(fā)了(參看下面的程序代碼)。還有一段完整的代碼示例在這里(墻,還有XML的manifest,又見XML)??磥?,Google終于明白為什么使用Android的手機(jī)(如:Moto, 三星、索愛和HTC)的觸摸體驗(yàn)遠(yuǎn)遠(yuǎn)不及object C搞出來的iPhone。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_dummy();
// loop waiting for stuff to do.
while (1) {
// Read all pending events.
int ident;
int events;
struct android_poll_source* source;
// Read events and draw a frame of animation.
if ((ident = ALooper_pollAll(0, NULL, &events,
(void**)&source)) >= 0) {
// Process this event.
if (source != NULL) {
source->process(state, source);
}
}
// draw a frame of animation
bringTheAwesome();
}
}
我個人估計(jì)有兩個原因?yàn)槭裁碐oogle回頭支持C/C++了,
Google開始覺得自己整的JVM在性能上可以全面超越傳統(tǒng)JVM,并接近C/C++,現(xiàn)在發(fā)現(xiàn)搞不定了。
Google發(fā)現(xiàn)Java的程序員不像C/C++程序員那樣注重程序的性能和效率,開發(fā)App太耗CPU和內(nèi)存。
于是只好轉(zhuǎn)回支持C/C++。本來就是用C/C++寫出來的Android嘛,居然不能用C/C++而只能用Java,真是太侮辱C/C++了。最后,只希望Google并不是又整了一個C/C++版的Dalvik虛擬機(jī),不然就真是侮辱到極點(diǎn)了。
——— 更新 2011/01/24 ————
謝謝大家對這篇文章的評論,挺有意思的,歡迎討論,我把我的回復(fù)更新在下面。不一定對,僅供大家參考。
Java的學(xué)習(xí)成本低,開放性好,兼容性也高,我不否認(rèn)(但請大家也別否認(rèn)C/C++的效率要比Java要高。而C/C++的程序員在普遍上要比Java程序員更注意性能和效率)。這應(yīng)該是Andorid的一開始的定位,可見,Google關(guān)注的是程序員,而不是用戶?,F(xiàn)在轉(zhuǎn)回支持C/C++必然有他的原因,如果不是性能上的原因。那么就請大家分析一下別的原因。
Android本來就是用C/C++寫的,要跨平臺,首先是Android自己跨平臺。就像Linux一樣,跨平臺的首先是Linux,應(yīng)用開發(fā)人員只需要符合Linux的API就OK了。JVM帶來的便利只是無需重新編譯(就算是無需重新編譯,對于開發(fā)人員來說也要去那個平臺做測試的,因?yàn)椴煌钠脚_的JVM同樣是不一樣的)。在Native平臺上編譯的成本其實(shí)并不高,這個編譯過程完全可以在部署的時候自動化。
有人說,Java的開發(fā)成本比C/C++低,但這和語言沒有關(guān)系,這其實(shí)和封裝程度有關(guān)系。C/C++同樣可以封裝得很好。而且,C/C++的程序員比JAVA程序來說,天生就對內(nèi)存和性能要敏感的多。這更有利于在手機(jī)這樣資源不足的平臺上做開發(fā)。
尤其對于像手機(jī)這樣的時尚終端來說,在用戶體驗(yàn)上花的成本要比在開發(fā)人員上花成本要大得多的多。我以為,Google 的Android 更多的關(guān)注了程序員,而不是用戶。而iPhone更多的關(guān)注了用戶,也讓程序員在開發(fā)過程上受到了一些犧牲(iPhone的做法是如果程序員的程序要上App Store,先交99美刀的代碼審查費(fèi),就像申請美國簽證一樣),但是,iPhone的程序員雖然在開發(fā)的方便上有一些犧牲,但是從收入上卻得到了保障。最新的消息是蘋果已向開發(fā)者支付20億美元 音樂供應(yīng)商分成達(dá)120億美元。在《偷了世界的程序員》中對此有充分的論述。
最后,請大家思考 幾個問題——
Android支持C/C++是為什么?如果是為了程序效率,那么這又是為什么?
是開發(fā)人員更重要,還是用戶更重要?(注意:我說的是“更重要”)
在當(dāng)今這種諸如iPhone或Andorid的開發(fā)模式下,是完全開放好,還是有適當(dāng)?shù)姆忾]好?
開發(fā)和封閉的背后的商業(yè)驅(qū)動是什么?如何在開放和封閉中權(quán)衡用戶、開發(fā)者、公司和版權(quán)商的利益?
蘋果公司給出了一個很不錯的商業(yè)模式。
(完)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。