Android如今真的很危險了?不,如今正是Android大幹一場的好時機

「誰會從 Google 手中搶走 Android?」

早在去年,Google 就曾因 Android 移動操做系統涉嫌壟斷行爲而面臨鉅額罰款威脅。再加之各種競爭者虎視眈眈,以及跨平臺替代框架對原生 Android 的圍攻,Google 的日子彷佛並很差過。前端

做爲一個曾在 Google 工做了 13 年之久的技術老兵,Steve Yegge 在離職加入了東南亞出行巨頭 Grab 公司以後,發佈了一篇分析本身爲什麼離開Google 的博文,強調了 Google 在創新能力方面的漸趨弱勢,一度引起普遍熱議。時隔近一年,他又在本文中重點介紹了 Google 的 Android 技術自己存在的一些問題,譬如 Dev Stack 缺失、兼容性差、開發框架安全性低等等,對此,你怎麼看?程序員

如下爲譯文:編程

01.前言:從離開 Google 到糟糕的 Android後端

我至今仍然不能百分之百地肯定爲何我發表的那篇叫作《我爲何要離開谷歌》(medium.com/@steve.yegg… 80 種語言來傳播,直到後來某一天才被娜塔莉·波特曼的一篇專欄文章超越。公平地說,那個專欄要有趣得多。安全

我猜其中一個緣由是由於那一週沒有什麼勁爆新聞吧?另外一個緣由多是 Medium 網站擁有了大量的用戶?Medium 網站是一個很好的平臺,回想起寫博客的日子,我曾經但願谷歌也能創造出一個像 Medium 這樣有新意的產品,但正如你所知,事實上並無……微信

不管緣由是哪個,個人博文收到的回覆仍是頗有趣的。巴基斯坦的某個傢伙說若是我碰巧和他在同一個城市的話,就要請我喝杯啤酒。倫敦的某人願意出一千刀,讓我在電話裏花一個小時和他聊聊語音搜索市場或關於 Garbo 的話題,我禮貌地拒絕了,由於我實際上對這些一無所知。一個俄羅斯人甚至在一次聚會上走過來對我說:「你樹立了很多敵人啊」。哈哈,多麼有趣的時光。網絡

網上也有不少評論對我想在那篇博文中表達的關鍵信息有很多誤解,有人甚至問「這不就是個專車服務嗎?」 我曾嘗試描繪一張更大的「畫」,但彷佛搞砸了。有時間我會回過頭再從新看看那篇博文,看可否讓你們更明白些。框架

但今天我想要討論的重點是 Android——站在一個外行者以及業餘愛好 Android/iOS 的開發人員的立場,分享下個人我的觀點。分佈式

我一直關注 Android 是由於咱們正在嘗試招聘一些移動開發人員,你會認爲這件事情很簡單。但事實證實移動開發人員是當今市場上的「搶手貨」,不少公司都有須要,並且市場上懂得移動開發的人並很少。招聘他們就像想抓獨角獸同樣不容易。工具

爲何每一個公司都須要移動開發人員?由於桌面網頁開發正在慢慢消失。我在谷歌的各個開發團隊都有些朋友——好吧,或許如今只能算是前朋友吧——他們曾經在背地裏指責我。但無論他們如何批評我,隨着整個世界向移動端傾斜,桌面網頁開發會漸漸減小。你可能還記得 Facebook 從「Web First」到「Mobile First」的轉變吧,那差很少是在 八、9 年前的事了,Facebook 當時差點就完蛋了。我並非說這種轉變會在一晚上之間發生。但這家公司在乎識到他們要麼成爲一個移動互聯網公司要麼被市場拋棄的時候,確實經歷了一場生存危機。

他們成功了,但這確實不容易,由於 Android 的 Dev Stack(開發堆棧)是世界上最大的一坨 poo sandwich。

02.Google 內部工程師的鄙視鍊形成的 Android 窘境

在谷歌,大多數工程師都很傲慢而不肯作移動或網頁開發工做。他們很是傲慢地宣稱「我不作前端開發」。那裏有一種現象,我喜歡稱之爲「鄙視 DAG 鏈」,這裏的 DAG 是指有向無環圖,有點像流程圖。在鄙視 DAG 鏈的頂端坐着的是用 C++ 寫搜索引擎的工程師,他們比 Java 工程師酷,Java 又比 Python 酷,Python 又比 JavaScript 酷。一樣,寫搜索的比寫廣告系統的酷,寫廣告的比寫 App 的酷,寫 App 的比工具酷,工具又比作前端的更酷。諸如此類。程序員喜歡互相看不起對方。若是你不幸成爲谷歌的移動開發工程師,那麼你將被困在幾個鄙視鏈的底部,每一個人都在俯視你。

可是,當我一個又一個地從事了全部這些開發工做以後,從系統編程到大規模數據工程,從編譯器設計到服務框架開發,從遊戲開發到 Web 開發,再到移動開發,我能夠向你保證,前端編程即便不會更難,也至少和其餘開發工做同樣困難。後端中的一切看上去都是美觀、整潔、有序、分佈式而且是可並行的——與 25 年後仍然一團糟的前端網頁開發相比,這簡直是天堂。若是再和包括 iOS 在內的移動編程那種「便便三明治」相比,哪怕前端網頁編程也會猶如巴厘島的一次美妙之旅。

Android 怎麼樣呢?沒錯。這是他們中最大的「poo sandwich」。若是不介意我說句俏皮話的話,Android 開發人員都是英雄。若是用 Android 來開發巨型應用,如谷歌地圖、Facebook 或 Snapchat……若是我告訴你,你都不會相信——改完一行代碼,坐在那裏要等上 20 分鐘纔會看到發生了什麼。你所作的每個更改,不管多麼細微,在第一次嘗試時都有 80% 的機率不會有效果,由於 Android 的特徵互操做性矩陣異常簡單。你能夠用 X,也能夠用 Y,可是由於某個該死的緣由你就是不能同時用 X 和 Y。

設備兼容性這事更是讓我火大。我在 Google Play 商店裏有一堆一星評論,由於個人 Wyvern 遊戲 App 隨機地不能在 LG 設備上工做,因此我不得不去 eBay 上買一個 60 美圓的廉價 LG 設備(而不是那種劣質的 600 美圓的 LG 設備)來重現這個 Bug,結果發現 Android 有兩個在滾動列表上獲取鼠標點擊事件的 API,可是有一個 API 在 LG 上不起做用。

我想說,有沒有搞錯!

正由於 Android 總有這樣的莫名其妙的事情發生,如今許許多多的競爭對手,不管大小,都推出了本身的 Android 替代框架。他們想替代的不只僅是缺失功能的支持庫(儘管不少這樣作了),他們更想要作的是全面替代谷歌 Android 的全面的開發堆棧。如今已經面世的替代框架有微軟的 Xamarin、Adobe 的 Cordova、Facebook 的 React Native。除此之外,再仔細看看,還有 Framework七、Appcelerator Titanium、Onsen、Sencha、Kendo、XDK、Ionic、Mobile Angular、Unity——天吶,這究竟是要整哪一齣!

就像全部曾經嘗試過 Android 開發的人放棄後都會說:「Android 太糟糕了,我要本身去作一個更好的。」

而谷歌,不甘於被競爭對手超越,迴應說,「哦,是嗎?你沒法和咱們競爭,由於咱們的競爭對手是咱們本身!」。而後他們推出了 Flutter,這是一個 100% 嚴肅的 Android 開發堆棧,與原生 Android 競爭,而 Android 開發團隊甚至拒絕認可它的存在。

03.Android 的對手

這些開發框架的問題在於它們使 Google 容易受到攻擊。大多數此類框架都是跨平臺的,這意味着你只需編寫一個應用就能夠在 iOS 和 Android 上運行。無論你是大公司仍是小做坊,沒有人願意付雙份薪水請兩個開發團隊在不一樣的平臺上編寫徹底相同的應用。所以,巨大的經濟壓力驅使公司遷移到跨平臺框架。惟一拖後腿的地方在於,目前這些框架還不如「原生」開發框架那麼棒。

但其中一些框架(尤爲是 Facebook 的 React Native)距離這個目標已經很是很是近了。若是它們中的一個成功搶佔了足夠大的市場份額,那麼 Android 基本上就成了開發者生態系統的一部分,而且這個系統已經再也不由谷歌控制了。

這彷佛不是什麼大問題,由於谷歌仍然擁有 Play Store、OEM 和許可受權等。對大多數人來講,他們彷佛很舒服地坐在駕駛座上。可是考慮一下:若是全部移動開發者都開始使用一個特定的跨平臺框架 X,那麼從字面上來看任何其餘的硬件/操做系統製造商或聯盟均可以和他們本身的競爭硬件/操做系統平臺(好比 Windows)一塊兒直接支持該框架 X,而且全部的應用程序均可以在其上運行(可能更快,更容易啓動)。這將徹底把谷歌切割出來。相信我,不少公司都想這樣作。對不起,我說錯了,不是不少,而是所有。誰不想呢?

谷歌對這種狀況的反應是毫不讓步。他們加倍投入到本身的「原生」(傳統)Android 編程,爲 Kotlin 語言提供官方支持,這對於原生 Android 程序員來講是一個很大的進步。我喜歡 Kotlin,它表明 Java 的將來。但讓咱們面對現實:這已經不是移動開發的發展方向了。人們編寫跨平臺框架的緣由有兩個:第一,由於他們但願公司的應用程序在兩個平臺上工做,而不須要作兩倍的工做。第二,由於 Android 原生開發仍然如此痛苦,即便有了 Kotlin,許多公司也感受他們應該扔掉它,並從一個更容易的技術上從頭再來。

若是你是一個 Android 或 iOS 開發者,而且你花了一些時間嘗試 React Native(Facebook 建立它是爲了幫助解決這些問題),不到 30 秒你就會意識到這是更好的方法,不過前提是你開發的不是遊戲,不然你可能更願意使用 Unity。對於業務和產品類的應用,React Native 提供了合理的性能、跨平臺兼容性和極爲方便的工具(最好的來自 Microsoft),極大提升了發展速度。還記得我前面說過一行代碼的改變效果在常規 Android 堆棧中要花 20 分鐘才能看到嗎?這可能發生在像 Nest 或 Facebook 這樣的大型應用程序中,但即便是中型應用程序,也可能須要 2-3 分鐘。而 React Native 則即時的,你一旦改變了代碼,就能即刻看到效果。

這意味着產品功能的發佈速度能夠提升 10 倍;這意味着更快的上市時間;這意味着先發制人的優點;這意味着大家在競爭中不斷取勝。放棄原生編程框架,轉而使用像 React Native 這種快節奏的跨平臺框架,將會讓你立於不敗之地。

我懷疑,在沒有證據的狀況下,谷歌的 Android 團隊並不能肯定跨平臺對他們是好是壞,但他們傾向於「壞」,不然他們會爲跨平臺的 Flutter 提供更多支持。我我的認爲這對他們有好處,但我說了不算。

無論怎樣,谷歌目前正致力於經過改善原生體驗,來保持本身的領先地位。並且,因爲原生體驗對於像 Snapchat 和 Instagram 這樣的大型應用程序來講是最糟糕的,它們主要是試圖解決大型應用程序開發體驗問題,而這主要又是由構建時間來決定的。

爲了解決這一問題,谷歌在改善「官方」的 Android 應用程序構建系統上作了大量工做,而這個系統自身是基於原本就已經很是複雜的 Gradle 系統,谷歌隨後又在其上加入了大量亂七八糟的 Android 特有的東西。日復一日,這個系統變得愈來愈複雜,甚至構建工程師都再也不能理解其中的某些部分。若是你想試着搞清楚構建類型(Build type)、產品風格(Product flavor)和風格維度(Flavor dimension)之間到底有什麼區別,那隻能說祝你好運了。由於谷歌一直在增長這個系統的複雜性,他們認爲增長的這些東西對於擁有大型應用的大型公司很重要。

諷刺的是,大多數大型公司都在積極地將其棄之不用,轉而支持 Facebook 的 Android 構建系統——Buck,看起來谷歌正在走向一個死衚衕。

所以,彷佛谷歌已經明白這是一個問題,可是他們卻在加倍致力於一個沒有人喜歡的解決方案——一個擁有極其複雜的 Gradle 構建系統的原生堆棧——開發人員正在遠離,而第三方開發堆棧正在不斷得到市場份額。

04.互聯網巨頭們針對 Android 發起「攻擊」

更糟的是,開發堆棧並非安卓系統受到的惟一攻擊。還有其餘一些方法能夠將 Android 從谷歌竊走。一種方法是建立一個更成功的商店:Play Store 是谷歌對 Android 最主要的控制手段,它在公司和政府層面引發了不少爭議。由於 Android 據稱是一個開放系統,但 Play Store 卻 100% 由谷歌控制。而微軟和 Twitter 支持下的 Cyanogen 曾是打破這種局面的重大嘗試。雖然因爲內部權力爭鬥而最終失敗,但這是第一次認真嘗試對於 Play Store 進行「割喉」打擊。

另外猜猜還有誰和競爭對手正在聯手對谷歌大打出手呢?你猜對了,正是 Jeff Bezos(Amazon 的 CEO)。由於若是不從谷歌偷取 Android 系統,他就不能成爲全球首個萬億富翁。亞馬遜的應用商店已經作得至關不錯了,而我看到的亞馬遜和谷歌之間的幾乎每一場面對面的競爭中,亞馬遜的表現都會隨着時間的推移而愈來愈好。小心了,谷歌!

若是這些還不足以讓谷歌擔憂,那麼針對 Android 系統還有第三場襲擊,而這場襲擊正中谷歌的要害——在線廣告。現在,Facebook 的 Android 應用變得至關龐大(多年來有數百名工程師致力於此),已然發展成爲一個真正的平臺,如今企業能夠直接將廣告投放到 Facebook 的應用中。例如,《紐約時報》能夠在那裏購買廣告投放,全部的錢都直接從紐約時報轉到 Facebook,而沒必要勻一分錢到谷歌,能夠想象這讓谷歌有何感覺。

正如微信在中國同樣——微信應用已經成爲一個蓬勃發展的平臺,能夠在其上構建和部署其餘應用(和廣告)。就像把一個完整的市場嵌入到應用內部,Facebook 和微信移動應用已經成爲獨立的廣告發布渠道。

讓咱們澄清一下:谷歌建立 Android 的惟一緣由在於 Android 是一個廣告頻道(Channel)。谷歌是一家廣告公司,世界上最大的廣告公司,於是老是受到諸多公司無休止的攻擊,這些公司想把用戶眼球轉移到他們本身的頻道而不是谷歌頻道。歸根結底,這和針對網絡中立性的攻擊幾乎一模一樣。電信運營商和 ISP 但願爲你提供全部你想看到的廣告,或者至少從谷歌和 Facebook 的廣告中分得一杯羹。

每當你看到像 Facebook、谷歌、亞馬遜或微軟這樣的公司神祕地進入一個陌生的新業務,你能夠確信新的廣告頻道爭奪開始了。谷歌的 Chrome 是一個控制 Web 訪問的廣告頻道;微軟的 Xbox 是一個針對 PlayStation 的廣告頻道,它威脅要將 PC 做爲在家上網的頻道;YouTube 是一個廣告頻道;Instagram 和 WhatsApp 也是相似產物;HBO/Amazon/Netflix內容戰是一個直白的廣告頻道;亞馬遜 Echo 是一個廣告頻道,而你的家已經變成今天最大的廣告頻道之一;即便是谷歌地圖,也是本地廣告的一個廣告頻道……一旦你開始觀察,就會發現廣告頻道無處不在。

最重要的是,企業但願你經過他們的頻道而不是其餘人的頻道觀看你最喜歡的內容(書籍、電影、遊戲等),這樣他們就能夠得到廣告收入,或者至少是訂閱收入。

Android 多是谷歌最重要的頻道——即便今天不是,在將來的十年確定是。他們不能失去對它的控制。但咱們已經看到,至少有三個不一樣維度的協同攻擊正在發生:開發者生態系統(React Native 和它的朋友們)、商店應用(Amazon 的 App Store 和 傳言中的 Cyanogen 繼承者)以及輕量級的應用內市場(Facebook 和微信等)。到目前爲止,谷歌對每個威脅的反應都是……好吧,不得不認可他們仍然處在領先地位,至少如今是。

言歸正傳——

全部這些看起來像是一堆無用的高談闊論(本來就是),但它實際上對 Crab 這樣的公司產生了實質的影響,由於咱們必須對咱們開發移動應用要使用哪些技術堆棧作出重大決策,這些應用對於咱們的乘客、司機、商人、代理等而言,是通向外部世界的窗口(也即頻道)。

若是你認爲谷歌確實有可能失去對 Android 的控制,那麼你最好的選擇是使用跨平臺框架,由於它將經過改進的可移植性來對衝你的賭注。若是你陷入了激烈的競爭中而須要更快的產品發佈速度,你可能應該選擇原生 Android 之外的產品。Android 仍在追逐着「Gradle」列車,但這條路毫不會走得太快,而這很大程度上是由於 Android 設計的遺留問題很難解決。

在跨平臺選項中,React Native 看起來像是一個贏家。它吸引了許多 Web 開發人員,這多是全球最大的開發人員受衆,很難與之競爭。Grab 最近開始投資 React Native,看看它可否實現本身的承諾,到目前爲止,看起來至關不錯。固然,要把咱們的原生 Android 和 iOS 應用退下來,還有很長一段路要走,由於移植確實須要時間。

總結一下這篇博文背後的主要觀點:移動開發人員市場緊缺,很難僱傭獲得,由於除了谷歌之外,全部人都知道 Android 編程很艱難。因此如今整個生態圈正在迅速發展,不少競爭對手正在努力讓本身的方式成爲移動開發的惟一真正方式……這使得招聘移動開發人員更加困難,由於整個生態圈是如此的分散。

可是若是不考慮你的風格,如今正是成爲移動開發人員的好時機。若是你是一個非移動開發者,你應該考慮切換到移動開發一段時間。從後端體驗和學習移動開發開始,您將成爲一個「全棧開發人員」,這樣的開發人員在市場上更加罕見,是更具市場價值的獨角獸。

若是你對此有興趣,是時候參與這樣的競爭中來,以得到對 Android 的控制,不少公司都在這樣作,甚至谷歌的其餘團隊也在這樣作。如今有不少大鯊魚繞着 Android 這條船在打轉,谷歌須要提升警戒。

免責聲明:以上是個人我的觀點,其中可能有不少有失偏頗之處。同時我也不表明個人僱主(Crab 公司)說話,你大可沒必要盡信。事實上,我本身甚至都沒回過頭再讀一遍。

最後

漫漫開發之路,咱們只是其中的一小部分……只有不斷的學習、進階,纔是咱們的出路!纔跟得上時代的進步!

我從事Android開發快十年了,今年年初我花近兩個月的時間收錄整理了一套Android進階知識體系,若是有想法深刻的系統化的去學習,能夠加入Android開發交流羣(820198451),我會把我收錄整理的資料都送給你們,幫助你們更快的進階。

重要的事說三遍,轉發+轉發+轉發,讓更多須要的朋友們均可以看到而且領到!

相關文章
相關標籤/搜索