前言
越來越多的人在提“移動(dòng)端的下半場(chǎng)”、“Android開發(fā)的焦慮”之類的,也有人在喊“技術(shù)天天在變,學(xué)也學(xué)不完”,“昨天Kotlin今天Flutter”。其實(shí)我卻認(rèn)為,如果你技術(shù)達(dá)到了一定程度,你無需太過在意這些。
移動(dòng)端真正進(jìn)入下半場(chǎng)了嗎?于我看來并沒有,最多說“Android技術(shù)的探索”進(jìn)入了下半場(chǎng),而整個(gè)市場(chǎng)還是樂觀的。以前是BAT的天下,而近兩年出來越來越多的獨(dú)角獸:頭條、抖音、拼多多、快手、小猿搜題等,這些公司的業(yè)務(wù)都在移動(dòng)端上,他們需要招聘更多的移動(dòng)端人才。如果真要說下半場(chǎng),只能說很多小型創(chuàng)業(yè)公司在退出市場(chǎng),這確實(shí)會(huì)導(dǎo)致很多入門工程師失業(yè),但這也說明了這個(gè)行業(yè)在更加規(guī)范。
而且,對(duì)于Android工程師而言,這更是個(gè)好的時(shí)代。互聯(lián)網(wǎng)下沉,那么下沉市場(chǎng)里的用戶是使用Android多還是IOS多,大家都清楚。
那么,對(duì)于工程師而言需要做什么才能存活呢?很簡(jiǎn)單,要么轉(zhuǎn)行,要么提高。我相信,一個(gè)技術(shù)不錯(cuò)的工程師,不但無需焦慮,而且在這個(gè)時(shí)代,能夠擁有穩(wěn)定的職業(yè)生涯和豐厚的收入。
Android技術(shù)的下半場(chǎng)
要說下半場(chǎng),我更愿意說是“Android技術(shù)的下半場(chǎng)”,隨著這幾年大量的工程師和公司投入研發(fā),Android技術(shù)已經(jīng)從最早的簡(jiǎn)單頁(yè)面,到越來越復(fù)雜的交互,再到動(dòng)態(tài)化、插件化等新技術(shù)和黑科技,這個(gè)領(lǐng)域的深度在不斷加深。
如果想成為優(yōu)秀、不擔(dān)心淘汰的工程師,絕不是一味跟風(fēng)新技術(shù),今天學(xué)Kotlin、明天學(xué)Flutter,疲于奔命;而應(yīng)該持續(xù)努力去完善自己的知識(shí)體系,保持一定的技術(shù)深度。
因此,本專欄希望在大家做UI、界面開發(fā)之余,分享一些Android架構(gòu)方面的知識(shí)和技能。
希望且相信這些技能能夠讓讀者真正擺脫技術(shù)焦慮,最終找到自己的方向和競(jìng)爭(zhēng)力。
業(yè)務(wù)同學(xué)需要了解架構(gòu)嗎?
有的同學(xué)會(huì)問,我平常都在寫業(yè)務(wù)代碼、寫頁(yè)面、調(diào)用SDK,有必要去了解架構(gòu)嗎?答案很簡(jiǎn)單,業(yè)務(wù)是表,架構(gòu)是里。變化萬千的業(yè)務(wù)背后都是大同小異的架構(gòu)。時(shí)代更迭,業(yè)務(wù)變遷,理解架構(gòu)的技術(shù)人員可以處變不驚,而非疲于奔命。
因此,本人建議業(yè)務(wù)同學(xué)在繁重的業(yè)務(wù)開發(fā)之余,可以多去研究一些底層庫(kù)原理,而非停留在花式調(diào)用SDK的階段,這會(huì)讓你具備更強(qiáng)的技術(shù)競(jìng)爭(zhēng)力。
架構(gòu)孵化于業(yè)務(wù),服務(wù)于業(yè)務(wù)
不少公司的架構(gòu)同學(xué)和業(yè)務(wù)同學(xué)都存在一種矛盾:架構(gòu)與業(yè)務(wù)互相獨(dú)立,導(dǎo)致輸出的技術(shù)總是不能很好的滿足業(yè)務(wù)需求,導(dǎo)致的結(jié)果是:架構(gòu)同學(xué)有心無力,業(yè)務(wù)同學(xué)有苦難言。
實(shí)際上,真正好的架構(gòu)是從業(yè)務(wù)中孵化出來的,而且能服務(wù)于更廣闊的業(yè)務(wù)形態(tài)。
舉幾個(gè)例子大家就清楚了。
大家都知道阿里主營(yíng)電商業(yè)務(wù),而電商是強(qiáng)運(yùn)營(yíng)的,所以對(duì)于動(dòng)態(tài)化有非常強(qiáng)的需求,也就是希望App盡可能像網(wǎng)頁(yè)一樣,能夠隨時(shí)更新頁(yè)面內(nèi)容。于是,阿里內(nèi)部孵化出了Weex,通過遠(yuǎn)程開發(fā)部署js代碼,即可實(shí)時(shí)更新頁(yè)面內(nèi)容;
另外,手淘App對(duì)于整個(gè)阿里集團(tuán)的戰(zhàn)略意義非常大,它不僅是盈利怪獸,而且是整個(gè)集團(tuán)的流量入口(手淘DAU自2015年即達(dá)1.1億)。這也就是阿里曾提出的“航母策略”:手淘如一座航母,集團(tuán)內(nèi)各種業(yè)務(wù)形態(tài)如飛豬、閑魚、天貓等都可坐落在其上。于是,Atlas誕生了,所有App都可以輕松集成到手淘上,享受流量滋養(yǎng)。
類似的例子還有很多,比如大家熟知的微信,需要保證消息在任何復(fù)雜網(wǎng)絡(luò)下都能有最高的到達(dá)率。因此微信自研了一套跨平臺(tái)長(zhǎng)連接方案,提出智能心跳方案、多種弱網(wǎng)應(yīng)對(duì)策略如多級(jí)超時(shí)等,最終推出了Mars,保證了全國(guó)各種網(wǎng)絡(luò)環(huán)境下的用戶都能穩(wěn)定的收發(fā)消息。
有些同學(xué)可能了解阿里15年提出的“大中臺(tái),小前臺(tái)戰(zhàn)略”,搭建集團(tuán)數(shù)據(jù)中臺(tái)、技術(shù)中臺(tái),幫助各種前臺(tái)業(yè)務(wù)快跑前進(jìn);這樣的技術(shù)架構(gòu)和組織架構(gòu)幫助阿里快速孵化出各種新的業(yè)務(wù),比如18年初的淘寶特價(jià)版,據(jù)朋友了解整個(gè)App從啟動(dòng)到上線只用了短短一個(gè)多月的時(shí)間。今年,騰訊組織架構(gòu)調(diào)整,擔(dān)任CTO的張志東就提到:“沒有能幫助到公司級(jí)的數(shù)據(jù)中臺(tái)建設(shè),我個(gè)人也蠻遺憾。”,自此騰訊也正式啟動(dòng)了“中臺(tái)架構(gòu)”建設(shè)。
所以說,不同的業(yè)務(wù)形態(tài),能孵化出特有的架構(gòu)。
架構(gòu)是根,扎得越深,業(yè)務(wù)才越能開枝散葉。
專欄技術(shù)圖譜
閑話說了不少,下面正式談一談本專欄會(huì)覆蓋的一些技術(shù)點(diǎn)吧。這些技術(shù)點(diǎn)會(huì)基于本人日常的工作積累,同時(shí)結(jié)合各大廠開源的技術(shù)體系,(當(dāng)然對(duì)于阿里閉源的會(huì)盡量規(guī)避掉,線下可以做一些技術(shù)探討)。
下面,我把后面專欄會(huì)覆蓋到的技術(shù)點(diǎn)列出來,當(dāng)然在寫作的過程中還會(huì)逐步調(diào)整。
- 動(dòng)態(tài)化專題 由于App獲客成本不斷提高,動(dòng)態(tài)化是近年來越來越重要的技術(shù)架構(gòu),例如React Native、小程序、快應(yīng)用等都在試圖讓App具備實(shí)時(shí)更新、隨手可得。本專題會(huì)對(duì)各廠提出的動(dòng)態(tài)化方案進(jìn)行分析,如JsBridge;包括小程序方案的一些實(shí)現(xiàn)思路,比如多進(jìn)程的H5容器架構(gòu);另外,還會(huì)分析一些適用于移動(dòng)平臺(tái)的動(dòng)態(tài)化編程語言如Lua,JAVAscript等。
- 圖片專題 對(duì)于億級(jí)App而言,圖片的任何優(yōu)化都對(duì)于流量、體驗(yàn)等具有重要意義。比如google+ App采用 WebP 圖片格式后,每天節(jié)省了 50TB數(shù)據(jù)存儲(chǔ)空間。因此,本專題會(huì)談一下各大廠如騰訊、FB、Google等在圖片優(yōu)化方面提出過哪些方案,比如WebP vs SharpP;另外也會(huì)分析一些大家用的比較多的Glide、Fresco是如何做圖片緩存、如何基于Dalvik/Art不同的內(nèi)存結(jié)構(gòu)來優(yōu)化。
- 省流專題 上面談到了圖片的壓縮,其實(shí)節(jié)省流量是一個(gè)永恒的話題,它不僅能改善用戶體驗(yàn),也能幫助減少用戶流量開銷,節(jié)省公司成本。因此,本專題會(huì)談一談如何監(jiān)控Android流量;有哪些常用的Diff及壓縮算法,比如Tinker里自研的Diff算法 vs Google提出的google-diff vs BsDiff等;如何選用數(shù)據(jù)通信格式如json、ProtoBuf;FastJson、Jackson各自的優(yōu)勢(shì)等等。
- 網(wǎng)絡(luò)專題 大多數(shù)業(yè)務(wù)同學(xué)對(duì)網(wǎng)絡(luò)的認(rèn)識(shí)就是OkHttp+Json解析,實(shí)際上,網(wǎng)絡(luò)這一塊還存在非常多值得研究的技術(shù)點(diǎn)。一個(gè)優(yōu)質(zhì)的App,除了在網(wǎng)絡(luò)良好的環(huán)境下運(yùn)行,更重要的是,必須在弱網(wǎng)、網(wǎng)絡(luò)劫持、網(wǎng)絡(luò)慢等復(fù)雜環(huán)境下也要良好運(yùn)行,而且還得快,這也就涉及到DNS加速、網(wǎng)絡(luò)結(jié)果緩存等。 之前大廠都在提“頁(yè)面秒開”的概念,頁(yè)面打開速度很大程度取決于當(dāng)下的網(wǎng)絡(luò)環(huán)境,也對(duì)于用戶體驗(yàn)和留存有非常大的影響。這個(gè)專題我們談?wù)劸W(wǎng)絡(luò)相關(guān)的技術(shù)點(diǎn)。
- 監(jiān)控與日志專題 對(duì)于監(jiān)控和日志,多數(shù)人的印象是集成一個(gè)第三方SDK,如Fabric、Bugly等。業(yè)務(wù)同學(xué)或許對(duì)日志了解不是特別多,但實(shí)際上日志是至關(guān)重要的,尤其是在排查復(fù)雜問題時(shí)。 本專題我們談一下如何做到日志不丟失,如何后臺(tái)上報(bào)且不影響App運(yùn)行,最有意思的一點(diǎn):如何利用長(zhǎng)連接等技術(shù),實(shí)時(shí)拉取任意用戶的本地詳細(xì)日志。
- 安全專題 安全專題就離多數(shù)比較遠(yuǎn)了,這里我們講解一些常見的和業(yè)務(wù)相關(guān)的安全話題,具體后續(xù)補(bǔ)充。
- 高可用專題 后續(xù)補(bǔ)充
- GC專題 后續(xù)補(bǔ)充
專題計(jì)劃技術(shù)點(diǎn)列表
動(dòng)態(tài)化專題
- 如何讓JavaScript與App交互
- 如何實(shí)現(xiàn)“即點(diǎn)即用”之小程序、快應(yīng)用
- H5容器之多進(jìn)程架構(gòu)
- 動(dòng)態(tài)化編程之Lua
- ...等
- 圖片專題
- 圖片壓縮之WebP與騰訊SharpP的實(shí)現(xiàn)機(jī)制
- 圖片內(nèi)存優(yōu)化之Glide和Fresco原理篇
- png jpg等常用圖片格式的內(nèi)存、解壓速度分析
- ...等
省流專題
- Android流量監(jiān)控
- 文件壓縮 zip 7z gzip等
- 增量更新之diff算法,案例:Tinker自研diff/patch算法
- 圖片緩存技術(shù)
- WebView緩存優(yōu)化
- 數(shù)據(jù)傳輸協(xié)議對(duì)比之ProfoBuf、FastJson、Jackson
- ...等
網(wǎng)絡(luò)專題
- 可靠長(zhǎng)連接的意義
- HTTPDNS DNS劫持
- 網(wǎng)絡(luò)嗅探
- Http2/Https/QUIC協(xié)議對(duì)比
- CDN 削峰填谷
- 如何做全局網(wǎng)絡(luò)限流,保證業(yè)務(wù)流量高優(yōu)先級(jí)
- ...等
監(jiān)控與日志專題
- mmap日志落地方式,開源項(xiàng)目Logan,xlog等分析
- 通過長(zhǎng)連接動(dòng)態(tài)拉取日志
- 如果長(zhǎng)連接斷開、通過短連接兜底拉取日志
- 日志上報(bào),本地分片存儲(chǔ)及后臺(tái)上報(bào)策略
- ...等
安全專題
- 移動(dòng)端的加密算法之對(duì)稱與非對(duì)稱,防篡改
- 常規(guī)編碼方式一覽 md5 base64...等