Android開發在路上:少去踩坑,多走捷徑【轉】,我的保存慢慢看的

做者:gzjay,騰訊MIG無線產品部 高級工程師php

最近一朋友提了幾個Android問題讓我幫忙寫個小分享,我以爲對新人仍是挺有幫助的,因此有了這個小分享。html


1.目前, Android APP開發完成後,一般須要在哪些機型上進行測試?java


2.目前, 開發Android APP時,須要考慮的分辨率有哪些?android


這兩個問題能夠合起來回答的。git

http://developer.android.com/about/dashboards/index.htmlgithub

源自Google Play的數據,每個月都會進行update,能夠及時瞭解Android版本比例趨勢。shell



屏幕密度數據數組



OpenGL ES版本瀏覽器



也能夠參考一下國內一個第三方數據:http://www.umindex.com/#android_device安全



目前三星和小米市場佔有率是遙遙領先的,三星Note二、Note三、S三、S四、S五、小米12三、紅米必須測試,魅族也比較坑爹,加入測試名單吧。再選中小屏幕各一款(譬如華爲C8650、Moto ME511)。

Android 1.五、1.六、2.0、2.1和小屏幕的屬於古董級別的機器,市場存量也不多,新出的機器都是4.0以上的了,因此必要時須要捨棄對古董的支持,由於適配成本很高,對於新開發的應用,這個適配不值得投入。


3.目前, 開發Android APP時,適應多個分辨率的技術方案有哪些?


http://developer.android.com/guide/practices/screens_support.html

Android的屏幕適配,能夠在工程res目錄下進行處理,無需寫代碼,Android自動找最適合的資源進行顯示,相信你們都至關熟悉的了。


目前我使用的是ADT22.6,新建一個Android工程,會自動在res目錄下生成這個目錄結構。這裏有5個前綴drawable的文件夾,對應不一樣密度屏幕時所取的圖片資源或者樣式。



作一個功能正常的App,開發者須要遵循一些開發守則,與此同時,設計師也須要有一套標準來設計Android UI,全部的Android UI設計指南都在這裏了。

http://developer.android.com/design/style/devices-displays.html


9Path這個簡單易用的工具,很實用,必須推薦。


畫個圖標,都要出N種分辨率,每次機械操做實在有點弱爆,推薦一個牛X的工具:


其中的功能能夠自動切圖輸出各類屏幕密度的icon,可視化構建佈局,自動生成佈局文件。

http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html


推薦這個,設計師應該會很喜歡,秒切圖。

http://www.cutandslice.me/



實際開發中,考慮到包體積大小,不會在全部drawable中都放不一樣size的圖片資源,而是隻使用一套圖片資源,編寫不一樣的佈局。個別特殊的圖片資源就每一個drawable文件夾中放相應的size,譬如程序圖標,不按文件夾放可能會致使在Launcher顯示失真。



雖然不做任何改動也能夠在Android Pad上跑,但因爲Pad屏幕較大,操做體驗不同,建議從新設計。


4.開發Android APP時,配置文件應放在哪裏(APP本地、遠程WeB Server中)?應該如何考慮?


這個就要看需求了,若是隻是本機使用,譬如保存軟件設置,不須要聯網操做的,那首選固然是保存在本地。


若是業務須要和服務器交互,能夠作成雲配置方式。爲了跨平臺的兼容性,能夠考慮使用Google的ProtoBuf,比XML更小更快更簡單,後臺和終端定義一套協議,自動生成C++、Java或者Python代碼。https://developers.google.com/protocol-buffers/docs/overview?hl=zh-CN


5.Android APP測試方案一般考慮哪些因素?有測試方案的參考實例嗎?


機型適配:屏幕大小,這個只能人工檢驗了(程序不知道你的UI長得好很差看)


Android版本(某些API在低版本上沒有的,會Crash,推薦Lint靜態掃描)


網絡質量:聯通、電信、移動、WiFi、弱網絡等


安全性:網絡數據一定通過加密處理;本地不保存安全信息(賬號密碼等),或者加密保存


代碼中敏感信息儘可能使用byte數組而不是字符串代碼混淆處理(Proguard)


SD卡剩餘空間不多,沒SD卡,雙SD卡,飛行模式,時間有誤等。


性能:CPU、內存佔用(開發可使用Linux的top命令或者DDMS裏面的工具)


網絡流量消耗(有各類第三方流量監控軟件)


6.開發Android APP時,爲了提升工做效率,提升項目質量、一般須要抽象出一些lib出來,請列出常常用到的接口的名稱和用途。



更多精彩能夠上github搜搜,這就不班門弄斧了。

7.Android APP開發中其它須要提醒的問題


android4.4在UI線程沒法進行網絡操做不單隻android API版本不必定致使運行異常,有些機型還使用Java 1.5進行編譯,使用某些Java 1.6的函數會Crash的。


注意OOM問題,目前android手機已經有3G內存了,但並不是一個應用就能使用所有內存。瞭解一下堆內存,一個軟件至少一個進程,一個進程跑一個虛擬機,進程使用的堆內存大小,每部手機不必定同樣。


Show Dialog的問題,永遠要判斷Activity是否還在。


使用了高版本的API函數,在低版本機器上掛了。

非UI線程不能操做UI。可能有各類權限被禁的問題。


沒有瀏覽器、沒有軟件安裝器、沒有Email等發生ActivityNotFoundexception。


超快速連續點擊按鈕可能觸發跑多個線程的問題。


Android4.4短信權限設置,原生系統帶有新接口,第三方系統可能裁剪掉了。


8.什麼狀況下發生OOM,如何避免?


圖片操做(圖片縮放、bitmap生成等)、序列化反序列化數據等會消耗大量內存。合理使用數據結構(鏈表和數組),及時釋放引用,使用弱引用等能下降OOM狀況發生。


9.出現ANR怎麼辦?


若是Android程序某個操做執行等待超過5s,會出現ANR(Application Not Responding)的對話框,對於執行耗時的操做,譬如網絡操做,就不能在主線程上進行了(Android 4.4不讓你這樣作了),這些任務應該跑在主線程外,譬如新建一個線程處理,或者本身寫一個網絡引擎對全部網絡請求進行管理。


10.如何跟蹤研發質量?


Coverity接入:https://scan.coverity.com/

代碼缺陷掃描,不掃不知道,一掃嚇一跳。滿分推薦!Fro Free!若是你寫的是開源代碼,還能直接接入GitHub,超方便。


Crash是沒法避免的,咱們能作的是儘可能把Crash的狀況減小。發出去的版本,用戶發生Crash了,咱們須要把Crash數據收集起來。因此軟件須要作一個Crash上報,彙總整理。統計每一個版本的Crash率,並把Crash按優先級進行修復。


固然,版本檢查更新也少不了。


11.若是跟蹤用戶對產品的反饋?


無論你寫軟件所用的技術有多麼牛B,用戶是不知道的,也不關心的。用戶關心的是你的產品體驗到底有多牛B。加上用戶能夠輕鬆反饋的反饋功能,你會發現有時用戶的idea還不錯的。


作出來的產品好仍是很差,須要有產品數據支撐,因此加插相關數據統計上報點,哪一個功能熱門,新增用戶多少,活躍用戶多少,一目瞭然。


12.安全檢查


爲避免異常狀況的跳轉或者惡意攻擊,Android組件在啓動時都須要判斷傳入的參數是否爲空。


敏感信息須要進行權限限制或者加密處理。


能不暴露的組件就不暴露,在AndroidManifest中爲組件加上android:exported=」false」屬性。


須要暴露的組件經過自定義權限進行調用,添加自定義權限android:permission=」yourapp.permission.CALL」檢測WebView漏洞http://security.tencent.com/index.php/opensource/detail/1


13.經常使用工具備哪些:


Lint(清理資源、安全檢查、layout優化等)

通常在提測前清理一下冗餘資源,查一下有沒有用了一些高API Level纔有的接口,查一下安全問題。

Findbugs(檢查java代碼缺陷)


在開發工程中就能夠對單個文件進行檢查,有問題能夠及時處理。



MAT(內存泄漏調試工具)http://www.eclipse.org/mat/


遇到內存或者性能問題時,通常會結合幾種工具來查問題,找解決方法。

Method Profiling(統計方法耗時)

Eclipse Class Decompiler(今後Eclipse不怕看不到jar包內的代碼了)http://feeling.sourceforge.net/update


Hierarchy Viewer(查看Activity堆棧、layout加載層次、像素眼)


只能鏈接開發板手機或者模擬器,若是你的手機連不上,搜一下「Hierarchy Viewer 真機」,各類教程教你如何連上。


Activity太多,有時出問題了,但又想不起這個頁面叫什麼名字,插上去,一目瞭然。



很清晰看出Layout佈局層次, 還能顯示計算layout耗時,繪圖耗時,UI性能優化好幫手。



TinyPNG(壓縮圖片資源利器,山崩地裂推薦)https://tinypng.com/



7z(壓縮APK利器,上線前壓一下就能夠,簡單實用,五星推薦)



Apktool、Dex2jar 、jd-gui(反編譯套裝,你懂的)



Mark Man(設計師何苦爲難工程師)



Beyond Compare(各類神對比,我喜歡對比代碼)



Tcpdump(Linux dump包工具)

adb shell tcpdump -p -vv-s 0 -w /sdcard/capturenet.pcap

WireShark(查看網絡dump包)

遇到棘手問題時,仍是須要他們幫忙解決的。


CMD (很簡單的腳本卻能大大提升效率,你們多學多分享)


一些常常操做的動做,使用手工操做又耗時又麻煩還可能出錯,使用命令行去操做的話會極大提供效率。



拖放安裝應用,不用再彈出xx助手xx寶來的蝸牛速度安裝了(速度快了,心情好了):

adb install %1

pause


卸載應用:

adb uninstall com.tencent.qqpim


拉去SD卡目錄文件

adb pull /sdcard/test/log c:testlog


獲取聯繫人db

adb pull /data/data/com.android.providers.contacts/databases/contacts2.db C:contact2.db


tcpdump包

adb shell tcpdump -p -vv -s 0 -w /sdcard/capturenet.pcap


SDK裁剪打包

裁目錄:rd/s/q S:tencentsrcAGJ

裁文件:del S:tencentsrccomtencenttestTestApplication.java

相關文章
相關標籤/搜索