上周五的時候磺陡,跟@大野一起吃飯让簿,聊到了釘釘Android 2015 都做了些什么敬察,達到什么效果,聊完以后尔当,大野說 “擦莲祸,這個應(yīng)該放到網(wǎng)上跟大家分享一下”,并給我規(guī)定了一個時間椭迎,周一搞定這個事情锐帜,今天上午忙完以后,我準備今天下午來這里分享一下釘釘Android的2015. 我先給大家分享一下釘釘Android 2015 取得了哪些成績Crash率降低到萬二畜号,領(lǐng)先行業(yè)千一的水平
在去年早些時候缴阎,我們做了一個功耗的測試,釘釘功耗全面優(yōu)于微信简软、QQ
聊天里大圖片的瀏覽 流暢度 優(yōu)于微信蛮拔,大家可以下載附件里的一個superimage.zip里的這個圖片,在釘釘?shù)牧奶毂陨⑽⑿帕奶旖拧Q聊天里打開這張圖片,查看大圖疼蛾,來滑動一下大圖肛跌,你會發(fā)現(xiàn)釘釘滑動更快。這里釘釘率先采用了分塊加載技術(shù)察郁。
在大圖瀏覽的時候衍慎,精確定位手指點擊,放大有需求的區(qū)域绳锅,方便細節(jié)查看西饵。當(dāng)查看一個原圖的時候,比如你想看左下角到底是什么內(nèi)容鳞芙,手指雙擊圖片的左下角眷柔,你會發(fā)現(xiàn)你點擊的區(qū)域不會消失,會放大這里原朝,圖片的上半部分可能不會顯示驯嘱,反之,你點擊圖片的上半部分的時候喳坠,上半部分會放大出來的鞠评。見下圖,點擊有框的部分壕鹉,出來的效果剃幌,這個效果是微信和QQ都沒有的
Android IM 消息問題兩小時定位聋涨,關(guān)于丟消息,或者狀態(tài)不對的問題负乡,我們可以兩小時定位
在Android上的冷啟動牍白,我們是優(yōu)于微信。在手機上抖棘,殺死微信茂腥、釘釘,然后點擊微信ICON切省,你會發(fā)現(xiàn)需要等待一會最岗,才出來微信的Splash頁面,釘釘?shù)腟plash頁面是秒起朝捆,與QQ處于同一個水平般渡。釘釘冷啟動到列表頁面頁面3秒內(nèi)可以完成,微信則需要5秒
不停發(fā)送表情右蹦,釘釘順暢地活著诊杆,微信死了。有A B兩個手機何陆,這兩個手機分別裝了微信晨汹,釘釘,從A手機不停地發(fā)送表情到B手機贷盲,我們在魅藍手機品牌上淘这,B手機上的微信死了,表情太多巩剖,處理不過來铝穷,換成釘釘,你會發(fā)現(xiàn)釘釘還順暢而低調(diào)地接收著佳魔。
聊天界面的流暢度曙聂,從感官上釘釘優(yōu)于微信,并且滾動速度優(yōu)于微信
在6月份進行了OOM的優(yōu)化鞠鲜,OOM的BUG減少了70%
那么Android 2015我們都做了什么呢宁脊?Android完成了模塊拆分,各模塊間采取了接口依賴的方式贤姆,降低了以前開發(fā)的時候相互依賴榆苞,解決一個BUG,可能由于回歸不全面而造成一些沒有發(fā)現(xiàn)的BUG上線霞捡,同事個模塊間采用aar的方式依賴坐漏,方便了模塊版本的回退,不再通過代碼回滾的方式來進行回滾。這里加速了大家的開發(fā)效率和質(zhì)量
引入FRESCO中的圖片分配到native和一些native的bytearray重用思想赊琳,進一步降低了圖片的內(nèi)存空間街夭,與內(nèi)存碎片的問題,同時我們還做了FRESCO沒有做的事情慨畸,那就是當(dāng)新的機制不生效莱坎,如何進行降級的問題衣式,比如FRESCO的SO加載失敗寸士,那么FRESCO就不會顯示這張圖片,釘釘Android里即使SO加載不起來碴卧,圖片會分配到JAVA層弱卡,同樣可以顯示,還有就是byte array的降級住册,當(dāng)native突然壞了婶博,可以拷貝JAVA層,從natvie到native荧飞,從JAVA到native凡人,從native到JAVA,從JAVA到JAVA叹阔,我們做了全面的降級兼容機制挠轴,這里已經(jīng)超越了FRESCO以前的使用機制,體驗更好
建立了監(jiān)控大盤耳幢,可以清楚地看到那個模塊消耗流量岸晦、電量,更方便我們來維護釘釘?shù)恼w健康睛藻,同時也對我們線上的問題排查效率更快启上,可以看一下下邊的流量餅圖和電量餅圖。
形成性能閉環(huán)店印,在開發(fā)中進行數(shù)據(jù)收集冈在,灰度中進行數(shù)據(jù)采集,線上進行監(jiān)控按摘,形成性能閉環(huán)在開發(fā)版本包券,我們會對泄漏進行檢測,比如Activity 泄漏院峡,F(xiàn)ragment泄漏兴使,文件句柄沒有關(guān)閉的檢測等等,在同學(xué)進行開發(fā)的時候照激,就能發(fā)現(xiàn)各種可能存在的問題发魄。
在灰度版本中,我們會手機一些諸如流暢度的數(shù)據(jù)來分析我們APP的健康度
在線上正式版,我們會生成流量餅圖等數(shù)據(jù)
WEB容器引入了HPM機制励幼,從而使得我們的微應(yīng)用像native app一樣的流暢汰寓,同時我們還支持了H5的native導(dǎo)航欄
簡化了國際化字符串的復(fù)雜度,釘釘?shù)哪J自由是英文苹粟,而不是中文有滑,很多時候,我們的同學(xué)在填寫字符串的時候嵌削,只記得填寫中文的字符串毛好,而忘記了默認的字符串,從而導(dǎo)致切換到英文以后苛秕,可能由于找不到資源而崩潰肌访。這里我們采取了簡化方案,有一個字符文件艇劫,這個文件包括各種翻譯吼驶,然后通過腳本去生存英文字符集,中文字符集等店煞,同時還通過我們的美杜莎項目蟹演,可以從服務(wù)器端來下載翻譯,達到多端統(tǒng)一的目的顷蟀,下邊是我們的字符文件的一個縮略圖酒请。
建立了Trace系統(tǒng),與悟空的火眼對接衩椒,可以很方便地看到每條消息的狀態(tài)蚌父,加速了問題定位能力
建立了端上的異常處理機制,主要包括內(nèi)測不夠了毛萌,磁盤不夠了苟弛,進行磁盤釋放、內(nèi)存釋放
針對釘釘?shù)腣IP用戶阁将,我們建立了VIP報警機制膏秫,可以及時地看到VIP用戶的使用情況,更好滴服務(wù)好VIP用戶
與測試同學(xué)一起做盅,建立了4級灰度機制缤削,將90%的BUG扼殺在正式版本之前,內(nèi)部daily build吹榴,1K內(nèi)測組亭敢,5WRC組,Pre-Release图筹。內(nèi)部daily build:主要是很對釘釘內(nèi)部的同學(xué)進行使用
1K組內(nèi)測組:主要是包括共創(chuàng)用戶帅刀,這里是包括外部用戶的让腹,有1000左右的內(nèi)測用戶
5W RC組:包括1K內(nèi)測組的,同時也是包括釘釘內(nèi)部同學(xué)的扣溺,除此以外骇窍,還包括共創(chuàng)企業(yè),目前只有2W的用戶锥余,我們的目標是5W的用戶在這個組里
Pre-Release:這里主要是在發(fā)布之前腹纳,我們會推送給大概10W用戶,然后開始觀察數(shù)據(jù)驱犹,通過motu來收集crash情況嘲恍,通過我們的客服反饋來收集客服那里反饋的問題,在確定都沒有問題以后着绷,我們開始全面推送
與測試同學(xué)一起蛔钙,完善了測試體系,部分核心代碼的單測荠医、STC靜態(tài)掃墓、自動化腳本桑涎、功能測試彬向、性能測試、適配測試攻冷,這里還要提一下的就是娃胆,我們使用了test in來進行跑測試,每個迭代在代碼第一次全部集成以后等曼,就會每天到test in跑兩次里烦,每次100臺機器,更好地發(fā)現(xiàn)crash和適配問題禁谦。
** **** 就先寫到這里吧胁黑,感覺好多的東西,什么時候再回來豐富一下州泊,one more thing丧蘸,我把目前Android的一個整體設(shè)計圖,附在下邊吧遥皂,可以讓大家全方位地了解釘釘Android力喷。
多進程于样,讓App跑的更健康
非UI的代碼單測達到80%
By the way,如果有同學(xué)對我們已經(jīng)實現(xiàn)的東西潘靖,或者我們尚未做的事情穿剖,感興趣的話,我們可以來一起共同學(xué)習(xí)成長卦溢。