標籤:

為什麼 PC 多種多樣卻沒有碎片化的問題而 Android 有呢?有沒有可能開發出一個中間層來自動適配手機配置,減少開發者的工作,消滅碎片化?

感謝大家的回復,再補充幾點:

1.PC是X86構架,主要生產廠是Inter和AMD,android智能手機基本上都是ARM構架,主要生產廠家有高通、三星、NVIDIA、TI等,也不是很多,所以架構方面應該不是導致碎片化的主要原因才是啊?或許我理解的問題?

2.各廠商的ROM應該只是做一些二次開發,不會動核心部分吧?而APP的開發不是只需要跟核心匹配就行了么?就像WIN 2000和XP一樣,同樣的NT核心,程序基本可以兼容。

3.關於中間層,我的想法是:

①由Google主導開發以消滅碎片化。

②類似.NET Framework和JAVA這種,JIT編譯。就是不知道性能開銷如何。

③Google應該會不斷的升級系統,而Android的開放性決定了終端的多樣性,所以中間層還是有價 值的。


我就是做OS的,先挨個回答題主的問題:

1.PC是X86構架,主要生產廠是Inter和AMD,android智能手機基本上都是ARM構架,主要生產廠家有高通、三星、NVIDIA、TI等,也不是很多,所以架構方面應該不是導致碎片化的主要原因才是啊?或許我理解的問題?

架構方面是一個重要原因。

x86架構從當年8086開始,到如今的x64的64位平台,能做到彙編指令完全兼容

再看看ARM架構有多混亂:

ARM處理器內核列表

x86架構的位元組序是固定的,而ARM架構的位元組序都是可變的,位元組序就是大小端的意思,比如一個32位的數據:0x12345678,在x86架構下,內存里永遠都是0x78 0x56 0x34 0x12,而在ARM架構里,可能是前者,也可能是0x12 0x34 0x56 0x78.

位元組序本身沒有什麼優劣之分,但對於開發人員來說,可變的位元組序意味著移植機器代碼是有困難的。

================================================

2.各廠商的ROM應該只是做一些二次開發,不會動核心部分吧?而APP的開發不是只需要跟核心匹配就行了么?就像WIN 2000和XP一樣,同樣的NT核心,程序基本可以兼容。

安卓系統基於的內核是Linux,Linux不是微內核架構,而是宏內核,內核里包含的東西很多。而Windows是一個近似微內核的架構,微內核的好處就是驅動什麼的可以很容易改變以適用的變化(準確的說Windows確實不是完全微內核,但比Linux而言內核確實很小)。

宏內核的缺點就是如果硬體改變的太大,很多時候內核要跟著變動。而且由於ARM平台本身硬體上差異也很大,導致廠商修改驅動的做法很頻繁。如果Linux是一個微內核結構,那麼可能兼容性就不是現在這樣子,但可惜Linux不是。

當然,如果存儲空間足夠大,那麼宏內核也沒什麼問題,PC端的Linux兼容性不都是很好嗎?是的,但移動平台的存儲空間不是足夠大的,所以,沒有見到哪家廠商把各種驅動都裝到手機上。所以各個廠商之間的安卓系統無法直接兼容。

================================================

3.關於中間層,我的想法是:

①由Google主導開發以消滅碎片化。

②類似.NET Framework和JAVA這種,JIT編譯。就是不知道性能開銷如何。

③Google應該會不斷的升級系統,而Android的開放性決定了終端的多樣性,所以中間層還是有價 值的。

第一條,Google在做了。第二條,也是安卓現在的做法。要是沒有JIT,安卓的也就基本沒有多少活路了。Java的效率會越來越高,這最終會消除兼容性的問題,但消除不掉的是從硬體到驅動這一層的差異。

最後我想補充一條:各個廠商不開放硬體規範也是一個大問題,比如魅族想把系統移植到小米手機上,前提是魅族知道小米的BSP(board support package)代碼,不然再厲害也沒有用。而PC平台上大多數廠商都是開放自己的硬體規範的,主板廠商用的晶元組基本上就是那幾個,並且都跟微軟達成了聯合開發的協議。這一點是人為製造的兼容性障礙。

================================================

總結一下:

Windows的兼容性成功有幾個原因:硬體指令完全兼容存儲設備足夠大以存放各種兼容代碼、微內核結構方便擴展;Linux在PC平台的兼容性成功是基本跟Windows相同的,只是沒有微內核結構。

但到里移動平台,因為硬體指令不能完全兼容,硬體種類又很多,所以如果要兼容各種設備就需要大量的全套的驅動,而移動平台存儲設備又太小,你希望你只有8G內置存儲的手機里有7.8G都放著各種驅動嗎?並且內置存儲小的手機又根本放不下,所以要想活路,只好暫時放棄兼容性,把兼容性的問題留給JIT去做。

當然,這種趨勢最終會被打破,移動設備的內置存儲總有一天會很大,硬體廠商總有一天會統一,那麼到時候,就看設備廠商是否願意開放所有的驅動代碼了。

=================================================

最後反駁幾個觀點:

有人說Windows也有兼容性的問題,但請問:兼容性再有問題也不會出現Windows從dell電腦上拿到聯想電腦上就不能運行吧?安卓你試試把小米系統移植到魅族手機上?

早期的硬體配置確實麻煩,跳線不對機器都起不來,但用戶在正確指導下是可以配起來的,但現在呢?各個廠商封閉自己的BSP代碼和硬體規範,用戶能把小米系統移植到魅族手機上嗎?

還有人拿解析度說事,DOS時代到WIN7,解析度變化了多少了?解析度只是影響顯示的樣子,說白了就是好看跟不好看而已,現在安卓系統面對的可不僅僅是好看不好看的問題。

有人說PC的介面規範是為Windows準備的,那您可真讓Linux汗顏了。Windows驅動五花八門難道都是自己變出來的?都是人寫的。移動平台的問題是每個廠商都想只做自己的驅動,別人的驅動我才不管呢,當然想管也管不了,後果就是一個硬體平台定製出來的東西完全不兼容另一種平台。

還有人說ARM沒有兼容性問題,確實,現在主流手機都是ARM7指令集,ARM7是沒有兼容性問題,但別忘了ARM指令集還有ARM4呢,這個跟ARM7差異很大的。另外大小端的事情怎麼解決?雖然ARM默認是小端的。

Windows系統有問題,硬體有變化,可以升級驅動,為什麼可以升級驅動,因為微內核容易升級驅動,驅動變動對微內核影響很小,並且驅動再大也不會出現硬碟里放不下的程度。Linux的宏內核導致稍微大點的改動就要重編內核,請問有多少人會重編Linux內核的?再看有多少人會給Windows裝驅動的?

評論里有人說到Linux在PC上也有碎片化的問題,這個確實存在的,但現在Linux在不同PC硬體之間遷移基本上沒難度,手機系統呢?


你現在是從操作系統、軟體層面來對比了。之前有從提問從硬體平台角度來對比,http://www.zhihu.com/question/20345362。

PC操作系統一家獨大,OS市場佔用率最高的還是微軟的Windows XP,後來的Windows 7就低的可憐了。這得益於D版橫行,也是由於XP對硬體要求不高,而Win7的性能既差,對硬體要求也高造成的。

PC操作系統:

1. 關於基礎版本。

1.1 Windows本身正式發布的版本就不是很多,發展二三十年了, 架構基本穩定,後期都是小修小補比較多,用Windows Update功能安裝更新就行了,不需要重新發布個大傢伙。

1.2 Linux的內核更新頻率也不高。

1.3 Mac OS也是類似的情況,X.x.x,十年了,還是在大X上,小版本的更新頻率不高,而且可以通過更新中心隨時升級到最新版本。

2.關於碎片。

2.1 雖然Windows上也有一些定製版本出現,但出名和裝機量大的也就那幾家,像番茄花園、雨林木風、無憂等。

2.2 Linux上的各種發行版本是有點多了,不過好在企業選用的時候,都會選相對穩定的版本,不會盲目追新。服務版,收費的就選Red Hat的企業版,免費的用CentOS,現在Ubuntu用的也多了。桌面版,就隨用戶個人喜好來選擇了,用的也是程序員多,技術宅不怕這點麻煩。

2.3 Mac OS全封閉,一家開發和維護,不會產生碎片。

Android操作系統:

1. 關於基礎版本。那個真是叫多呀,從為了應用開發而準備的ADT修訂版數量上就能看出端倪,不到三年的時候里,列出來的就有二十一個之多,這不是玩人嘛。

2. 關於碎片。之所出這麼多ADT也是為了適應不同廠商不同設備的需要,至於全世界有多少廠商在定製生產Android手機就不清楚了。而且還有專門對ROM進行深度二次開發的,像OPhone、MIUI、點心、樂蛙等等。M乘以N?碎片數量蹭的一下就升上去了。

開發你說的中間層,難度不亞於重新開發一個Android系統出來,而且受限於Google的開放程度,你前腳適配了市面上所有的版本,它又出新的了,你是繼續適配,還是發布出去先賣錢呢?有人買嗎?你覺得這個中間層的性能怎麼樣?想使用它,手機硬體是不是得進行一次巨大的升級換代呀?

--------------------------------------------

像中間件在手機上不可行,還有一些例子能證明,先談商業上的:

1. 你是依附在別人的私有產品上,那局限性就非常的大。像微軟玩諾基亞一樣,承載Windows Phone 7的Lumia 800剛被市場接受,微軟就宣布Windows Phone 7不能升級到Windows Phone 8,諾基亞的股票立馬大跌,庫存積壓,本來復甦的希望就這麼被掐沒了。

2. 谷歌也意識到了碎片對自己生態系統帶來的影響,以前不關注,是因為產品不完善,影響沒那麼大,也不通過Android來賺錢,最重要的是通過硬體廠商快速佔有市場,賺錢還是通過谷歌的服務與廣告。從Android 4.0開始,在逐漸的統一標準,減少碎片,只是限於目前市場上2.3.x的佔有量太大,還沒法通過產品升級做到位,不過畢竟在做了。你做的這個中間件產品的生命周期能有幾年?


Android的碎片化指的是運行在Android設備上的os版本多種多樣,並且很難升級。它和cpu架構或者程序的兼容性一點關係都沒有。

其實這個問題的原因很簡單,就是因為Android是一個開源系統。Windows不存在這個問題是因為Windows源碼完全由微軟控制,硬體廠商只能為Windows寫驅動程序,而不能為了讓Windows適應自己的硬體而修改Windows的源碼。Android就有這個問題,廠商會因為各種原因修改Android的源碼,使得Android的源碼產生大量不同的分支。Google只能維護他自己的代碼,所以google親兒子一般沒有升級的問題。

什麼時候Android閉源了,碎片化也就解決了。


1.首先要更正一下,現在android陣營旗艦機的CPU是三星與高通的天下;GPU是imagination與高通adreno的天下。低端機CPU的是MTK的天下;GPU是ARM mali的天下。TI已退出移動CPU領域,NVIDIA由於技術爛正逐步被邊緣化。現階段android手機的CPU均基於ARMv8/v7指令集,GPU API均基於Opengl 2.0/3.0。二者與碎片化無關。

2.什麼是碎片化?

眾所周知android是一個開源系統,而windows則是一個閉源系統。開放系統的源代碼可以讓眾多手機廠商參與系統的定製。但定製ROM會不同程度地修改原生ROM的API,這種現象便是碎片化。碎片化勢必會讓google play中的app在這些定製ROM里出現兼容性的問題。而windows是閉源系統,內部的API其他廠商無權修改的,所以不存在這個問題。

3.google將android開源主要是為了推動GMS(google moble service谷歌移動服務)這才是谷歌盈利點所在。這裡簡單提到一個概念——「交叉補償」, 當用戶使用谷歌服務的時候,谷歌可以把廣告嵌入各種穀歌的服務中,比如:在使用谷歌地圖的時候,就能發現搜索地名關鍵字的廣告。在使用谷歌移動搜索的時候,不用說,當然也是有廣告的。谷歌其實是拿用戶的注意力來換取商戶的廣告費。

簡單了解谷歌的目的之後,我們來具體說說GMS有哪些服務,谷歌對GMS的態度是如何的。 GMS目前提供有Search、Search by Voice、Gmail/Google Mail、Contact Sync、Calendar Sync、Talk、Maps、Street View、YouTube、google play服務。谷歌把android分為三個級別,對手機廠商進行認證:level 1是免費使用android操作系統,但不內嵌GMS;level 2是內嵌部分GMS服務,但手機不能打上谷歌的商標;level 3是內嵌所有的GMS服務,也可以使用谷歌商標。

谷歌不是慈善家,企業都是無利不起早的。因此google不會因為碎片化再無私地開發出一套SDK來消滅它。手機生產商你要想讓你的定製ROM沒有app兼容性的問題只得臣服與我,加入OHA,並取得GMS認證,讓搭載GMS手機成為google盈利的工具。畢竟大多數app資源是壟斷在google的手中,任何手機製造商的app編寫能力再強還是強不過google。google現在就在做這件事情,將很多系統底層API放入GMS中,只有獲得GMS認證的廠商才有資格獲取。在將來android可能會成為歷史,取而代之的將是更為封閉的chrome os。

題外話:微軟是通過賣軟體掙錢的,蘋果是通過將軟硬體捆綁銷售,並通過app生態圈盈利的。而google更為高明,先讓android佔領手機市場份額,在通過GMS的黏附性讓不同廠商的手機成為自家盈利的工具。


早期CPU的生產商就有4-5家,同是X86架構的,指令集都有差異的,跟它配套的主板晶元有的連驅動都找不到,而內存也不是全兼容的,連插的槽都要很小心,不同品牌的內存是不能混用的,否則一定開不了機,主板生產商就更多了,主板晶元生產商有7-8家,大陸最多地是VIA的,intel還有其他幾家主板晶元生產商,主板驅動跟BIOS要特別設置,否則要麼網卡驅動不了,要麼顯卡掛掉,裝個WIN98,可以折騰一天,殺人的心都有


回答下第一個問題.

本人不是搞計算機的,對底層知道的不多.後一個不好回答.

你所指的PC是對一類可以適用WINDOWS系統的機器的統稱.

他們本身就是已經規範化的介面和標準的集合.而這種集合是為Windows所準備的.

當然,我知道PC原意是個人計算機.

但是在計算機多年的 發展過程中,CPU實質上只剩下了Intel和AMD.而他們都大量製造的各種處理器又都是遵循的x86架構.

你可以參考下這篇文章.http://www.pcbeta.com/viewnews-31346-1.html (確乎是捧Intel的軟文,但是對x86架構的介紹還算是詳細)

也許讀完之後你就能明白個大概.

x86實質上是主流PC採用的標準或者說現今絕大部分PC都採用X86架構.在某種意義上,PC已經成為了可以運行Windows的電腦的代名詞.

平台硬體的單一化和標準化很顯然會極大地簡化軟體編寫難度.

回到android上,可以看到各路CPU紛紛登台亮相.這之中或多或少都會影響到軟體開發.尤其是會涉及底層操作的軟體.

此外,移動設備顯示屏都較小.或則說顯示屏從3.5吋到4.5吋7吋應有盡有.那麼開發者在開發時就必須要考慮如何利用顯示屏的空間將信息有效地傳達給使用者並形成良好的互動.圖片太大,那麼小屏幕的設備就無法正常顯示整個界面,可能圖片會覆蓋掉相當大一部分內容,圖片太小,在大設備上,又可能會太小以至於分辨不清.針對不同設備解析度進行調試的工作量會非常的大.

(我沒記錯的話,蘋果和微軟都要推出功能類似的軟體幫助開發者適配圖片.而蘋果更是在研究用相對像素更好地顯示圖片?)

I C...

安卓才出現了4年時間.相比PC發展幾十年時間,Windows發展二十多年來看還很短.

不完美之處有也是正常的.

嗯,JELLY BEAN 今天也要放出源碼了.

谷歌在安卓開發上做出的成就也都放在那兒.一步一步走下去,倒是希望能夠把安卓做成一個很完美的系統.

以上.

參考:

維基對x86的介紹: http://zh.wikipedia.org/wiki/X86

========昏割線===========

說理不嚴謹.你可以參考下這個問題中的各個回答.http://www.zhihu.com/question/20147279


其實也有 win98、win2000,win7,程序也不是全能兼容。另外pc屏幕解析度其實不多。另外就是ms在驅動兼容性上下了不少功夫,win98時代有很多兼容性問題就是碎片化問題。


推薦閱讀:

如何評價miui的智能識別防騷擾功能?
如何評價鎚子手機Smartisan T1?
8K伏靜電到底合不合格?
Google 身份驗證器為何可以離線使用?其原理是什麼?
怎麼看待「做Android就是做界面」這種觀點?

TAG:Android | NokiaN9 |