国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

戲說移動江湖開發歷程

移動開發
我理解的技術開發人員,除了業務和技術的熱愛,其同時也需具備獨立思考的能力。在這個高速變換的二次元移動開發時代,很多產品和公司應付追趕日新月異之變化都是爭分奪秒攻城略地,伴隨而來的移動研發也是進隨著'敲鑼打鼓開天辟地'。

大主線

細說移動開發歷程

大技術

組件化開發

  • 組件路由
  • 組件配置動態加載
  • 組件骨架架構

插件化開發

  • 靜態插件化
  • 動態插件化

細節雕琢

  • 網絡層的優化和架構
  • 動態埋點的實現
  • 技術層架構(MVP,MVVM等模式)

前言

你可能的收獲:

  • 理解整個公司移動開發的基線和主線
  • 學會移動開發組開發過程碰到問題和解決方案
  • 學會移動開發過程各個技術的細枝末葉
  • 希望能給讀者開發項目有點啟發和思索

正文

我理解的技術開發人員,除了業務和技術的熱愛,其同時也需具備獨立思考的能力。

在這個高速變換的二次元移動開發時代,很多產品和公司應付追趕日新月異之變化都是爭分奪秒攻城略地,伴隨而來的移動研發也是進隨著'敲鑼打鼓開天辟地'。

所以我們有必要分析和思索當下移動開發的周期,就個人理解則把移動開發生命周期分四大周期,這個四個周期同步伴隨著公司發展整個過程。

這個四個生命周期分別命名為:

  • 1.成長期
  • 2.混沌期
  • 3.統一期
  • 4.分化期
  • 成長期一般在公司的第1~2年;
  • 混沌期一般在公司的第2~3年;

統一和分化期在公司第3年以后;其中統一和分化期有可能多次迭代進行。

所謂的成長期,也就是傳說中的野蠻發展,此時公司主導方向快速迭代跟進市場,作為研發里程以及人員數目這塊都是從無到有的過程,其宗旨也是開發追趕產品實現快速上線過程。

此時開發技術選型都是以個人因素為走向,因此前期項目選型和架構都是個人技術喜愛占主導,自己熟悉的技術和框架才是最快最有效的,可以快速追趕上線進度。

譬如喜歡rxjava,喜歡mvp模式很快就會在這個項目就起主導方案和技術架構.甚至有些開發同仁直接從網上所謂架構好的現成項目開干懟。

此時段公司的唯一宗旨就是首戰市場產出產品,快速迭代占據每個開發人員的腦海中,細節等一切可以忽略,要啥自行車。

接下來,隨著公司業績第一槍打響,同時融資也下來了,開始招兵買馬大干一場,人員補給上來,開始出現混亂和磨合期,新來人員覺得老代碼就是一坨翔,各種心底鄙視和不爽;

老員工覺得新員工桀驁不馴啥都不懂喜歡裝逼。但是公司補給人員的目的是更加快速迭代項目,公司還動不動搞個什么敏捷開發鬼模式實現1~2周迭代一個版本(就喜歡搞事)。

需求繼續開展代碼還得迭代而新老開發人員依葫蘆畫瓢編寫代碼,慢慢的(可以N個),慢慢的過段時間發現代碼充斥各種耦合,不規范代碼,文件包混亂,業務各種穿插,

一句話混亂的一鍋粥,各種線上bug突突的冒出來;線上bug一統計,fuck指標超過5-10%,開始全組上下靜心反思,產生出版本重構迭代統一思想。

項目重構功能改善等統一口號就出現了,此時一般分兩波人馬,一撥人馬繼續業務迭代而另外一波人馬進行項目重構;此事的核心就是減少線上bug數的量級,

完成公司要求線上bug不能超過3%的指標,這個時候重構重點基于線上bug進行維度分析,通過問題按多少進行劃分,差不多這個時候的問題如下:

  1. Bug的可視化實時監控和統計;
  2. 引用內存未釋放導致crash的bug;
  3. 內存泄漏導致crash的bug;
  4. 進入市場機型問題引起的bug;
  5. 網絡訪問慢的反饋;
  6. 奇葩未知的bug;
  7. 。。。
  • 問題1的思考,引入第三方系統,例如bugly等
  • 問題2的思考,引入Eventbus解決回調地獄問題和回調引起泄漏未釋放問題;
  • 問題3的思考,引進LeakCanary內存泄漏檢測,和prof分析大法根據各個問題進行突破;
  • 問題4的思考,無解,能解決一個是一個,主要公司機型跟不上,可以通過網上機型提供商進行問題測試,貴不說而且感覺沒啥用;
  • 問題5的思考,略;

關于公司指定的線上bug指標,是否完成也是需要多版本迭代現網運行后才能統計;既然是現網bug就有輕重之分,如果重大bug一般立即發布新版本更新,輕微的bug放到下一個版本迭代修復,那有沒有現網bug熱修復方案,肯定有的,成熟的有tinker等第三方庫;

雖然以上問題加班加點的搞完后,但是隨著公司業務的發展和市場的強大推廣,多個業務線如雨后春筍一般立項開干,看著當前項目架構模式(如圖一) 

戲說移動江湖開發歷程

初期架構

 

長嘆一聲,埋在心頭的那個一個極大隱患和不安慢慢露出來,項目中依舊充斥代碼各種耦合和混亂,加上‘混亂代碼加上新代碼依舊還是混亂代碼’定理一直壓著頭頂上,這項目框架肯定無法跟上公司新業務線的發展和規劃;有壓力就有動力,深思熟慮后不知覺分層分模塊架構慢慢浮現出來,每個業務線都是一個Module模塊,接下來每來一個業務線就按照這模塊模樣復制粘貼一份接著開懟業務。一般這種情況需要持續到三個業務線后基本就會出現模塊間混亂調用,資源文件各種重復且代碼到處飛,加上權限控制不到從而每個人都有權限編寫基礎庫從而使各個業務公共代碼下沉到基礎庫導致龐大臃腫,多模塊混合編譯速度極度慢等不良問題一大堆冒出來,回過頭看看項目現狀,我去,又來了,忙不完的事。看看圖二如果你把自己當處女座,你肯定會發狂,要么炒老板魷魚要么靜下心思考分析。

戲說移動江湖開發歷程

圖二

 

分析后得出以下幾個急需解決的問題,

  • 模塊間的調用進行解耦合實現模塊熱拔式方案
  • 是時候加上代碼權限管理
  • 模塊打包AAR實現模塊間引入
  • 解決編譯速度慢問題
  • 自動化打包問題
  • 。。。。

問題1的思考,既然實現解耦合同時實現熱拔式方案,說白點就是當前模塊開關關閉,被其他引用的模塊無法感知到這個模塊被關閉,即其他模塊引用的代碼必須不能硬編碼此模塊的方法和引用類等等,方案就是組件路由,調用方通過字符串path查詢模塊的服務和功能。

問題2的思考,代碼權限管理一般通過git或者svn去實現。

問題3的思考,可以通過gradle腳本實現模塊打包上傳私服。

問題4的思考,gradle本身問題加上模塊多導致編譯速度慢,根據業務線的獨立性那我們可以通過編寫業務模塊時給此模塊實現App模式,減少其他不必要的代碼編譯和運行。實現方案大體如下:

在模塊gradle編譯腳本通過標識符來區分是模塊還是可獨立運行的App

  1. sourceSets {  
  2.         main {  
  3.             jniLibs.srcDirs = ['libs' 
  4.             if ("true".equals(FINANCE_IS_APPLICATION)) {  
  5.                 manifest.srcFile 'src/main/diff/appmodule/AndroidManifest.xml'  
  6.                 java.srcDirs = ['src/main/java''src/main/diff/appmodule/java' 
  7.                 res.srcDirs = ['src/main/res''src/main/diff/appmodule/res' 
  8.                 assets.srcDirs = ['src/main/assets''src/main/diff/appmodule/assets' 
  9.             } else {  
  10.                 manifest.srcFile 'src/main/diff/libmodule/AndroidManifest.xml'  
  11.                 java.srcDirs = ['src/main/java''src/main/diff/libmodule/java' 
  12.                 res.srcDirs = ['src/main/res''src/main/diff/libmodule/res' 
  13.                 assets.srcDirs = ['src/main/assets''src/main/diff/libmodule/assets' 
  14.             }  
  15.         } 

這樣我們需要單獨運行此模塊,在gradle.properies把FINANCE_IS_APPLICATION為true然后編譯就可以實現業務代碼編寫和運行。有人問,如果我需要實現主App里面的新業務,那你可以關閉其他無關的模塊實現快速編譯提高開發效率。

問題5的思考,隨著項目的增大和多渠道的打包,此時需要進行考慮項目周邊的業務服務,例如提供給測試人員的打包測試,正式版的發布等等自動化產出問題。

一般自動化服務可以通過搭建jenkins服務,或者配合python腳本實現自動化打包功能,其

腳本的功能因公司而異。 

戲說移動江湖開發歷程

圖三

 

所以此時迫切需要一個熟悉gradle,python等腳本的同志(gradle本身是grovvy語言)。保證新業務的開發的情況下整個過程的重構和完善至少需要半年時間(大公司除外)。

慢慢發現,組件化架構無聲無息的出現了,是不是很神奇。

回過頭發現組件化架構已經進行了一小部分,信心十足,繼續干,此時必須祭出毛爺爺的紅本子,大聲的朗讀出來,我愛編程,皮膚好好!!

我們發現已經做了業務模塊化代碼分離和模塊間路由互調通信以及gradle組件化腳本;

你的成長是建立在公司的成長上,隨著公司業務發展龐大,種種緣由業務伴隨著也會出現分支獨立,需要某些子業務線獨立出App提供專業的服務和體驗;需要撒播種子開花結果,原先的子模塊可能變成獨立App,所以發現目前的架構是沒法實現,對,走過來,請在菩提樹下思考;其根本緣由就是組件化不完全導致的。其中最大問題就是主項目模塊涉及到大量的以前最早的業務代碼和功能,現在最迫切問題是需要把主項目的業務剝離變成一個業務子模塊加一個純粹的項目骨架,其中項目骨架必須上升一級變成新的主項目模塊,此主項目模塊包含項目公共業務。說白點,把項目骨架套在其他子模塊就是一個獨立的App可以運行;

作為對比,圖四為原架構圖,圖五為主項目模塊上升一級為項目骨架的架構圖

其中主項目骨架必須包含的功能有:

  1. 項目升級降級功能;
  2. 第三方庫的引用和初始化工作;
  3. 實現子模塊加載和引入以及初始化工作;
  4. 周邊服務或插件的引入和初始化工作;例如Tinker和bugly等
  5. 。。。 

戲說移動江湖開發歷程

中期架構
戲說移動江湖開發歷程
組件化成型架構

 

這個時候組件化大體已經完整成型,現在唯一需要做的就是通過gradle腳本去做粘合器,腳本配合jenkins動態實現模塊間和主項目骨架的組合;

上面說的組件化成型是主體骨架完整了,但是需要根據自己的公司業務繼續進一步解耦和分離,一般如:

  1. 全局配置文件的分離,實現配置文件根據子模塊業務走,例如網絡地址的配置和網絡請求地址的分離;
  2. 業務配置文件的分離,配合服務端一起實現模塊化分離;
  3. 各個子模塊的公共業務動態加載塊;
  4. 耦合代碼的分離和重構;
  5. 。。。

此過程應該做到了項目模塊以及代碼的各種解耦和分離,看起來非常清爽和干凈。不知覺又開始唱起了:我愛編程,皮膚好好!!

突然有一天你聽到有人說插件化,你心里暗暗一笑,我們項目早就實現了熱拔式插件化;

一討論發現原來不是你想的插件化,他們說的插件化是把業務模塊動態存放到網上,需要的時候加載進來;

哇咔咔,原來插件化分兩種,一直靜態插件化和動態插件化;

不知覺的發現我們已經實現了靜態插件化功能,細水長流說的就是這個,哦,應該是水到渠成;

動態插件化的前提必須是項目已經具備成型的組件化后才能實現動態插件化功能。

目前已經可以獨立出各個子模塊打包成AAR、JAR、APK;接下來就是需要在主項目骨架上添加一項動態插件化功能;完美

現在動態插件化市面上有很多成熟的方案,因為這個不像組件化過程,組件化其實本身和業務和項目有很大關聯,需要根據自己的業務以及已有的業務框架進行加工和架構實現;而

動態插件化實現機制和業務體系和自身架構無關系,可以大膽的引入第三方成熟的插件;例如美團公司,阿里公司的動態插件化。

其實,回味下整個過程,發現這些都是一步步的走下去的,不可能一步到位,這才人生;

有人問是不是接下來高枕無憂,哈哈,too x too native, 這才是萬里長征前幾步而已,接下來需要細節上和技術上進一步雕琢,周邊服務的完善和安全等配套實施都需要等你去實現;路遙茫茫。。。

細節上雕琢隨便列舉幾個:

  1. 例如上面提到的bug中出現網絡性能慢,這個就可以深入挖掘各個實現,例如騰訊就這個小點實現了Mars開源框架;
  2. 業務UI框架的封裝(減少重復開發以及性能問題);
  3. 性能監控;
  4. 配置管理中心;
  5. 動態埋點;
  6. 各個業務核心點的優化;
  7. 編寫的組件化的重構和優化;
  8. 技術層架構(MVP,MVVM等模式)
  9. 分布式架構;
  10. 。。。。

最終你會發現,很多功能只有在你組件化結束后或者插件化結束后再去實施會達到事半功倍效果,實現集中優化改動分布最小化,極大減少改動的風險和bug風險;

以上過程其實是一個分久必合合久必分的過程。當項目走向做到極致的時候還是沒法應付龐大用戶群和業務群,請轉行養豬。。。

插件化路由實現,源碼詳見,覺得好請點擊star:

https://github.com/wenzhonghu/MyRouter

責任編輯:未麗燕 來源: 安卓巴士Android開發者門戶
相關推薦

2017-08-04 15:00:59

2010-05-04 17:24:57

虛擬化

2010-11-01 06:38:03

Windows Ser

2011-11-10 14:42:11

2018-01-12 05:04:34

移動支付用微信支付支付寶

2013-09-17 10:35:55

2010-10-26 10:35:05

職場

2016-04-19 14:26:00

比特網

2011-07-20 13:48:51

2009-07-28 13:02:28

asp.net

2021-09-26 09:48:55

低代碼

2015-04-01 09:35:17

2012-12-26 17:27:02

2013-09-04 14:49:10

移動Web前端開發設計理念

2011-07-07 13:19:38

Web

2013-08-14 09:26:15

2012-10-09 10:58:56

IBMdw

2016-09-29 09:22:01

移動WebHtml5

2012-08-31 11:11:18

RIA天地行廣州站

2024-12-06 15:07:42

Python開發
點贊
收藏

51CTO技術棧公眾號

高清亚洲成在人网站天堂| 黄色免费视频大全| 精品一区二区三区视频在线播放| 欧美亚洲禁片免费| 久草在线资源网站| 91一区二区在线| 国产日产欧美一区二区| 久久经典综合| 久久99国产精品99久久| 欧美伊人影院| 国产美女精品免费电影| 欧美偷窥清纯综合图区| 美女999久久久精品视频 | 久热在线中文字幕色999舞| 蜜桃视频www网站在线观看| 日韩小视频在线观看专区| 极品白浆推特女神在线观看 | 视频一区在线免费观看| 国产精品五区| 免费一区二区三区在在线视频| 婷婷激情图片久久| 成人a在线观看| 97精品国产福利一区二区三区| 欧美激情xxxxx| 伊人精品综合| 日本久久久久久久久| 欧美精品momsxxx| 91欧美精品午夜性色福利在线| 911精品美国片911久久久| 92福利视频午夜1000合集在线观看| 精品国内自产拍在线观看视频 | 2021中文字幕在线| 精品国产电影一区二区| av影院在线| 亚洲欧美制服另类日韩| 成人在线视频观看| 欧美巨乳在线观看| 偷拍视屏一区| 亚洲qvod图片区电影| av成人天堂| 国产精品jizz在线观看老狼| 不卡的电视剧免费网站有什么| 国产真实乱子伦| 尤物av一区二区| 国产资源在线看| 制服丝袜av成人在线看| 欧美私密网站| 欧美黑人性猛交| 天天综合一区| 日韩av影视| 99re视频精品| 小草在线视频在线免费视频| 欧美一区二区视频观看视频| 国产精品99| 国产精品久久久久一区二区| 国产精品久久国产愉拍| 久久久久免费看黄a片app| 亚洲欧美精品午睡沙发| 日本中文字幕视频在线| 国产亚洲精品久久久| 国产成人精品免费视| 99re6在线| 99久久免费精品高清特色大片| 韩国版免费三体| 欧美一区二区视频在线观看| 91麻豆精品| ts人妖另类在线| 成人动漫一区二区三区| 噼里啪啦在线中文观看| 亚洲精品短视频| 欧美一区二区三区红桃小说| 久久精精品视频| 国产偷v国产偷v亚洲高清| 国产一级片在线播放| 久久精品国产91精品亚洲| 欧美电影免费播放| 成人免费观看在线| 欧美午夜精品久久久久久超碰| 欧美高清影院| 激情小说综合区| 中文字幕日本乱码精品影院| 国产h片在线观看| 成人国产精品色哟哟| 97se亚洲国产综合自在线不卡| av在线资源网| 97超级碰碰碰久久久| 免费人成精品欧美精品| 二区中文字幕| 亚洲欧美另类在线观看| 欧美日本一区| 97在线免费| 亚洲精选中文字幕| 欧美视频官网| 男人捅女人免费视频| 亚洲美女自拍视频| 亚洲三级网站| 欧美激情欧美激情在线五月| 国产成人免费视频精品含羞草妖精| 亚洲自拍小视频免费观看| av成人免费| 国产日本欧美一区二区三区| a天堂在线资源| 日韩中文字幕组| 日韩电影免费一区| 中文字幕第50页| 国产精品10p综合二区| 日韩精品www| 伊人成色综合网| 色综合久久中文字幕| 看亚洲a级一级毛片| 桥本有菜亚洲精品av在线| 日韩精品在线观看av| 在线中文字幕日韩| 国产色产综合色产在线视频| 日韩电影在线免费观看| 天堂а√在线8种子蜜桃视频| 男人日女人下面视频| 国产成人精品午夜| 久久久噜噜噜久久中文字免| 偷窥自拍亚洲色图精选| 欧洲精品视频在线| 日韩三级在线免费观看| 色135综合网| 大胆高清日本a视频| yellow中文字幕久久| 韩国欧美一区二区| 欧美色图天堂| 日韩欧美一区二区三区四区 | 日本视频一区二区在线观看| 欧美日韩中文在线| 精品一区不卡| 久久久久久久久久久久久久久久久久久| 精品国产依人香蕉在线精品| 国产一区二区美女| 中文在线а√天堂| 在线丝袜欧美日韩制服| 日韩精品一区二区三区在线播放 | 激情另类综合| 成全电影播放在线观看国语| 国产精品露脸av在线| 亚洲理论在线观看| 色狼人综合干| 伦理电影国产精品| 国产精品男人的天堂| 激情成人中文字幕| 综合五月婷婷| 精品麻豆一区二区三区| 色婷婷精品国产一区二区三区| 日韩欧美二区三区| 国产中文一区二区三区| 日韩美女在线| 亚洲成人av免费看| 国产99在线|中文| 欧美日韩一区二区免费视频| 欧美日韩精品一本二本三本| 国产精品一级伦理| 视频一区亚洲 | 久久91亚洲人成电影网站| 26uuu久久天堂性欧美| 亚洲视频三区| 日日躁夜夜躁人人揉av五月天| 国产日韩中文字幕在线| 欧美在线免费视屏| 久久在线精品| 色999久久久精品人人澡69| 国产三级三级看三级| 成人国产亚洲精品a区天堂华泰| 欧美色成人综合| 精品一区二区三区在线播放| 国产精一区二区| 91短视频在线观看| 色婷婷精品国产一区二区三区| 中文字幕av一区| 亚洲婷婷在线视频| 在线成人av| 亚洲成人一区在线观看| 视频在线观看免费高清| 成人自拍爱视频| 亚洲欧美综合区自拍另类| 中文字幕不卡在线观看| 欧美色一级片| 欧美日韩激情电影| 在线看片免费人成视久网| 日本一区视频在线观看| 久久这里只有精品99| 午夜国产不卡在线观看视频| 蜜臀av在线播放一区二区三区| ccyy激情综合| 黄网页在线观看| 在线观看av网页| 国产一区二区三区奇米久涩| 日韩亚洲欧美成人| 懂色av影视一区二区三区| 国产一区二区三区高清播放| 九九久久婷婷| 偷拍视频一区二区三区| 中文字幕av在线播放| 青青青青草视频| 国产精品久久久久免费| 欧美激情aaaa|