Android開發在路上:少去踩坑,多走捷徑

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  最近一朋友提了幾個Android問題讓我幫忙寫個小分享,我覺得對新人還是挺有幫助的,所以有了這個小分享。

  1. 目前, Android APP開發完成后,通常需要在哪些機型上進行測試?

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

  這兩個問題可以合起來回答的。

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

  源自Google Play的數據,每月都會進行update,可以及時了解Android版本比例趨勢。

  屏幕密度數據

  OpenGL ES版本

  也可以參考一下國內一個第三方數據:http://www.umindex.com/#android_device

  目前三星和小米市場占有率是遙遙領先的,三星Note2、Note3、S3、S4、S5、小米123、紅米必須測試,魅族也比較坑爹,加入測試名單吧。再選中小屏幕各一款(譬如華為C8650、Moto ME511)。

  Android 1.5、1.6、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


2015-05-19 00:41:43

[新一篇] Android學習系列(33)--App應用之提交到各大市場渠道 - 謙虛的天下

[舊一篇] Android手機主流屏幕分辨率有哪些? - ganzhijie
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表