Android团队的组建和管理
這個首先要從兩個大方面說起:
A、產品定位(因為產品不同導致功能不同,所面對的應用場景就不同,這個產品定位并不是市場方向的產品定位,而且是要了解所做產品的技術實現及用戶習慣等等方面,具體來說應該是產品技術實現方面的定位);
B、技術層面,最終還是要實現產品功能,讓產品達到量產階段才有意義(這個需要從Android的架構說起,畢竟Android是一個龐大的系統,單獨某個人全部做完,在產品快速迭代的今天不太現實,android架構圖如下);
1、Team Leader(一個強力的Team Leader,外加一些愿意干活的人就行了,在工作中培養人才,提升從業人員水平,有強力Team Leader的指引下,每個人都是能夠發揮出最大作用,而且不會走偏)
2、名校論不適用研發(類似于搜索之類涉及復雜算法的軟件行業,固然需要較高學歷良好背景的人去研究。但對于App應用類軟件而言,每天的開發工作大都是重復性畫UI和調用MobileAPI獲取數據,并無需名校出身)
3、面試時需要考察的幾個點
主要考察3個方面:
(1)、技術水平,主要是候選人的編程技術水平,比如C語言、C++語言、JAVA語言、腳本等等。
(2)、領域知識,主要是候選人對業務的了解程度,這個相當于是對產品功能的熟悉,有很多是針對性的產品。
(3)、軟件技能,包括溝通能力、抗壓能力、性格以及查找BUG的技能(即解決問題的能力,這個是最主要的)。
?
一般而言,面試有兩輪最重要。第一輪是Team Leader面試,考察技術水平。第二輪是用人部門的負責人面試,考察領域知識和軟件技能。
--->如何考察面試者的技術水平?對于App而言,分為3個方向:
(1)、應用類:共同特點是頁面特別多,都需要頻繁地調用MobileAPI獲取數據,都涉及到支付流程,所以這類App的開發人員需要對UI、網絡、登錄、支付流程都非常熟悉。
(2)、手機管家類:這類App雖然也算是應用類,但是很少調用MobileAPI,它更多關注的是手機系統內部數據的讀寫,所以這類App的開發人員需要對ActivityManager、Service、BroadcastReceiver之類的知識很熟悉。
(3)、游戲類:必須對動畫引擎很熟悉,比如說Cocos2d和Lua。
?
? ? ?此外,還有一類Android從業人員,是在華為、三星這樣的硬件廠商做手機系統的二次開發,包括手機系統上自帶的一些軟件,嚴格地說,不屬于App開發。
--->面試時經??疾斓膸讉€方面:
(1)、Activity的生命周期。
(2)、Activity的4的4種啟動方式及使用場合。
(3)、做過的項目中,Activity是否有基類,如果有,封裝了哪些共用的邏輯?
(4)、事件的各種使用方法及優缺點。
(5)、與HTML5頁面的相互調用。
(6)、UI線程的阻塞與解決方案(Runnable 與 Handler)。
(7)、采用什么姿勢調用MobileAPI并解析返回的數據?
(8)、怎樣做列表的分頁和刷新。
(9)、登錄的實現,包括從哪里來,到哪里去的頁面跳轉機制,記住密碼的邏輯設計。
(10)、性能調優,包括Layout調優、Activity中如何使用CONST常量、時間換空間策略、ViewHolder、圖集的優化策略、數據緩存和圖片緩存,等等。
(11)、全局變量過多怎么辦?
(12)、寫過UT沒?
(13)、是否做過自動打包?Ant、Maven或gradle任意一種都可以。
? ? ?對于TeamLeader的要求會更高一些,包括如何檢查內存泄漏,如何優化內存、多線程、自動打包、框架設計、整個android系統都應該熟悉,才能帶好整個團隊,保證每個人問題點都能把控,版本管理等諸多方面。
?
4、無線團隊必備的10份文檔
? ? ?一個團隊成熟與否的標志是文檔。文檔太多,就違反了敏捷的原則,但有幾個文檔是必須提供的:
(1)、新員工入職文檔(這份文檔包括:部門組織結構,新員工所在的團隊和將要擔當的角色;個人簡介,用于群發給部門其他成員;要加入的公司郵件組,部門內部用于溝通的QQ群或微信群;Android項目的地址,權限申請;Bug管理工具及權限申請;測試環境和仿真環境的地址;產品需求的地址;WIFI設置、VPN申請、手機郵箱配置、打印機安裝,等等。)
(2)、加強版新員工入職文檔:(這是一份更適合Android團隊的新員工入職文檔:SVN或GIT的權限申請;Android開發常用軟件下載;迭代的節奏;業務名詞解釋;Android App的項目結構;Android自動打包地址;模板<模范標準>頁面。);代碼規范。
(3)、測試機清單(測試機型號、操作系統、使用人。采購測試機可以看友盟統計)
(4)、模塊分工表:(把開發人員按照業務線<模塊>進行劃分)
(5)、頁面邏輯流程文檔
(6)、MobileAPI接口分布圖:(一般用XMind思維導圖來描述一款App所用到的MobileAPI接口。好處:定期檢查IOS和Android在做同一功能時所使用的MobileAPI是否一致;每次MobileAPI發版上線,相關的測試人員,就可以根據這張圖,找到這些MobileAPI接口改動影響了哪些頁面和功能,需要進行相應的回歸測試。)
(7)、版本管理策略文檔:(無論是使用SVN還是GIT,都要制定一套發版流程。Android團隊中要有專門的開發人員熟悉并遵守這套流程,包括:
? ? ?正常迭代的流程;開新分支做技術調研的流程;緊急上線流程。
流程一般有兩種,要么是主干開發主干上線,要么是主干開發分支上線,無論是哪一種,都要落實文檔,切記口口相傳。)
(8)、框架設計文檔:(當我們把AndroidLib這個業務無關的類庫從App中抽象出來的時候,就該有一份框架設計文檔了。)
(9)、發布流程文檔:(Android要發布到各大市場,為此,需要修改清單配置文件中的友盟渠道號,才能統計各大市場的下載量。此外發布的apk包要混淆:渠道號是否正確? ? ? 代碼是否混淆? ? 版本號是否正確? ? ?是否release包(而不是debug包)? ? ?臨時決定關閉的功能是否露出來了? ? 是否可以支付、分享、掃描二維碼? ? 升級安裝是否會引起崩潰?
? ? ?鑒于以上各點,需要制定發布流程并形成文檔,包括:
<1>、產品經理準備發版所需要的描敘文字、圖片等材料。 ??
<2>、開發人員進行批量打包工作。 ??
<3>、測試人員要隨機抽取一個apk包進行測試,包括功能點測試。
<4>、推廣人員發布到各大市場,要有郵件持續跟蹤各個渠道的版本更新進度。
<5>、在版本倉庫上打Tag,合并分支上的代碼到主干。 ?)
(10)、App啟動流程圖
? ? ?(如果要做App性能優化,最好的著手點是App從啟動到進入首頁的流程。大多數Android App的啟動Activity并不是首頁HomeActivity,而是一個叫做LaunchActivity的頁面,它的UI就是簡單的Splash動畫,同時它肩負著更多的職責,如:
<1>、注冊友盟、推送等等第三方組件。
<2>、加載Splash圖,同時下載新的Splash圖以便下次開啟時使用。
<3>、如果是首次打開,則進入引導頁。
<4>、友盟打點,統計激活數。
<5>、如果有消息推送到達,點擊消息后想不經過首頁而直接進入某個二級頁面,其實在代碼層面還是要經過LaunchActivity的,由它對推送消息進行分發,以決定該跳轉到哪個二級頁面。
? ? ?以上這些邏輯交織在一起,非常復雜,尤其是要區分升級版和全新安裝版的時候,為此我們需要用Visio之類的軟件繪制一個App啟動流程圖。在業界,我們將LuanchActivity稱為Bootstrapper。LuachActivity把上述這些事情都做完,才會進去到首頁HomeActivity。)
}
?
5、一對一溝通
{
? ? ?走簡便流程,要求:
<1>、最近一個月做了哪些事情,有什么提高?
<2>、自身想要有什么提高?需要我幫助做些什么?
? ? ?經常反饋的有:
<1>、強烈要求團建。
<2>、有的程序員想轉行做產品經理,想得到一些鍛煉的機會。
<3>、初級程序員希望分配到一些更高級的Task。他們渴望新知識,而不是天天畫UI。
<4>、有些程序員比較好學,希望團隊有大牛,能學到東西。
<5>、渴望被表揚。
}
?
6、每周技術分享
{
? ? ?技術分享是提高團隊技術水平的3個方法之一,另外兩個是Code-Review和修復線上Crash。
技術分享關鍵在于堅持。技術分享并不是天馬行空,不為所云的技術暢談,要根據團隊整體技術水平和實際項目需要,彌補團隊短板。建議可以羅列Android或IOS必須掌握的若干技術點,然后發給大家給自己打分,每個技術點都是5分制。<完全不知道:0分 ? ? ?聽說過:1分 ? 看過介紹的文章:2分 ? 親手做過demo:3分 ?項目中使用過:4分 ? ?非常熟悉:5分>,把大家的自我打分收集上來進行匯總,對團隊的整體技術水平就一步了然了。對于團隊的技術短板,在每周的技術分享上,會安排團隊成員進行講解。
}
?
7、代碼評審
{
? ? ?常規代碼審核會出現一些情況,首先在我們是個互聯網公司,App迭代的周期只有兩周,所有的開發人員都疲于奔命做需求,哪有時間去審核別人的代碼,會出現一些情況:
? ? ?<1>、能力強且責任心強的開發人員,一天大部分時間在審核別人的代碼。
? ? ?<2>、能力強且責任心差的開發人員,看都不看直接審核通過了。
? ? ?<3>、技術能力弱的開發人員,要審核別人的代碼也是心有余而力不足。
? ? ?另一個副作用是:因為每次請別人Code-Review都要等,所以開發人員傾向于每天下班前一次性提交所有改動,并沒有遵守持續開發、持續提交、持續測試的持續集成思想。
===應變解決方案為:
? ? ?<1>、對老員工不再進行Code-Review。
? ? ?<2>、對新員工和實習生、應屆生,要為他們每人指定一個Code-Review的老員工,至少3個月之內,對他們的Code-Review還是要嚴格執行的。
大致的標準為:看編碼規范或看編碼邏輯。
---->互聯公司沒有時間去搞太繁瑣的流程,可以把Code-Review的策略改為,每周一下午,技術經理從上周提交的代碼中找出10處寫的有問題的代碼片段,然后給大家進行講解和討論。在達成共識后,今后就再也不能寫類似的代碼了。
? ? ?那么對于有問題的代碼,處理方式建議,對于首頁、會員中心這種一級頁面,不能改要保證穩定性。對于二級或三級頁面,局部某個功能可以安排人員去修改。
? ? ?在進行Code-Review的同時,有一個東西可以順便搞出來,那就是模板頁面,即符合編碼規范要求、可以作為編寫其他頁面的模板頁面。對于Android應用類App而言,一個模板頁是不夠的,至少要提供Activity、Adapter、Entity、Fragment這4個模板頁,其中Acitivity要包括對MobileAPI的調用。
? ? ?有了模板頁,所有開發人員的編碼就有章可循,單純搞Code-Review和編碼規范都太抽象,一定要有能落地的東西,那就是模板頁。
}
?
8、對Android團隊Leader的定位
{
? ? ?Android團隊Leader要負責的工作羅列入小:
<1>、每次迭代把Tesk分配到具體的開發人員。
<2>、組織線上Crash的修復。
<3>、處理線上突發bug。
<4>、排查每日客人投訴的問題。
<5>、解決團隊遇到的技術難題。
<6>、組織每周Code-Review。
<7>、組織每周例會。
? ? ?團隊Leader一定要明確自己的職責,,注意以下兩點:
<1>、不要給自己分配具體的需求開發,管理工作會消耗掉你大量的時間。
<2>、努力不要使自己成為瓶頸。很消耗時間的事情,及時分配到具體的開發人員。
? ? ?哪些工作是要盡早分配給具體的開發人員呢?
<1>、Android項目的打包。
<2>、代碼混淆。
<3>、設計Android的Lib框架,交給框架組去做。
<4>、技術調研。
<5>、Monkey日志分析。
}
?
9、Android 應用開發所需技能自我評測
{
? ? ?從事Android應用的開發人員所需要精通的20個技能點,如下:
<1>、Activity相關。App應用開發,以Activity使用最多,涉及LaunchMode、onSaveInsatanceState、生命周期等技術。
<2>、Fragment相關技術。用的人不少,想明白是咋回事的人不多。
<3>、序列化技術。有Parcelable和Serializable兩種。前者是基于Service的,后者是基于Bundle的,二者實現原理不同,但是達到的效果差不多。
<4>、ImageLoader的原理和使用。類似的還可以學習Fracebook新開源的Fresco,它對圖片的處理會更好一些。
<5>、fastJSON或GSON的使用。做App不會用實體自動匹配JSON數據,相當于白做。
<6>、多線程相關。包括Handler、Looper、ExecutorService等。
<7>、Adapetr和ListView。這兩個技術捆在一起,經常容易崩潰,尤其是分頁的時候,要仔細研究深刻領會。
<8>、用戶Cookie設計。需要把登錄機制徹底搞清楚,包括在HttpRequest頭中夾帶Cookie來進行用戶身份驗證的技術。
<9>、網絡請求封裝。使用AsyncTask的網絡底層封裝,使用Handler+Runnable的網絡底層封裝。
<10>、Android與HTML5的 交互。包括Android調用HTML5的方法,以及HTML5調用Android的方法。
<11>、代碼混淆。沒用過ProGuard,不知道keep相關語法的,有待研究。
<12>、Android 打包機制。涉及Android SDK中的若干命令。對Android打包過程做的每一件事都很清楚。進一步是Android多項目依賴的打包技術。Ant、Gradle或者Maven,掌握其中任何一種打包機制即可。
<13>、線上Crash分析并修復。要具備通過分析Crash信息修復線上Crash的能力。
<14>、內存泄漏。包括內存優化、內存泄漏的場景、MAT工具的使用。
<15>、調試工具。包括DDMS、Eclipse或者Android Studio的調制功能。
<16>、Monkey機制。Android開發人員如何對一款App進行Monkey測試。
<17>、單元測試。這里指的是JUnit。對復雜的算法寫過單元測試以保證其沒有問題。
<18>、GIT的高級功能。如果項目使用的是SVN,那么要掌握SVN的版本管理策略。
<19>、插件化編程。哪怕知道一點DexClassLoader的概念也好。
<20>、設計模式。對常見的設計模式如工廠、生成器、適配器、代理、策略模式耳熟能詳。
}
總結
以上是生活随笔為你收集整理的Android团队的组建和管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Element-ui的理解
- 下一篇: Android 获取手机内存大小