搜尋此網誌

2011年2月25日

Android Application Model Lab - Android AP實驗室 (Part1)

出發點:
從不寫程式,到開始學習 Android programming ,發現上層 AP 跟以前 sequential language (C, Pascal) 的邏輯概念還真的大不相同。為了探索 Android application model 的一些特性,所以準備設計一些小實驗,希望可以解決一些思考的瓶頸。

Activity lifecycle (個人找到最仔細的,請參考附錄的 URL)


Case1: Activity lifecycle (新的 SDK 出現了 Fragments 概念,還沒有 study)


  • Test1: (Home key 作用)

    1. 開啟 AP: PID381 / onCreate1 -> onStart1 -> onResume1
    2. 回 HOME: PID381 / onPause1 -> onStop1
  • Test2: (Return key 作用)
      1. 重啟 AP: PID381 / onRestart1 -> onStart2 -> onResume2
      2. Return key: PID381 / onPause2 -> onStop2 -> onDestroy1
    • Test3: (Kill process 作用)
        1. 重開 AP: PID561 / onCreate1 -> onStart1 -> onResume1
        2. Kill AP: None
      • Test4: (Suspend / Resume / Shutdown 作用)
          1. 重開 AP: PID1596 / onCreate1 -> onStart1 -> onResume1
          2. Suspend: onPause1
          3. Resume: onResume2
          4. Shutdown down by power key: onPause2
          5. Reboot: None
        • Test5: (Suspend / Shutdown 作用)
          1. 重開 AP: onCreate1 -> onStart1 -> onResume1
          2. Suspend: onPause1
          3. Shutdown by power key: onResume2 -> onPause2
          4. Reboot: None
        • Test6: (Screen rotation 作用)
          1. 重開 AP: onCreate1 -> onStart1 -> onResume1
          2. 螢幕轉向 (Portrait -> Landscape): onPause1 -> onStop1 -> onDestroy1 -> onCreate1 -> onStart1 -> onResume1
          3. Suspend: onPause1 -> onStop1 -> onDestroy1 -> onCreate1 -> onStart1 -> onResume1 -> onPause1
          4. Resume: onResume2
          5. Suspend: onPause2
          6. 螢幕轉向 (Landscape -> Portrait): onResume3

        Case1 的觀察:
        • 在 Case1 的狀況下,PID 都會一樣,除非用 3rd party tool 把 Process kill 掉。
        • Return key 之後,Activity (Task) 被摧毀了 (onDestroy),但是 Kernel Process 一直存在 (By ps command)。除非用 3rd party 程式把 Process kill 掉才會消失,要不然會一直在系統中。
        • Press Home key 只會將程式暫時放到 onStop。
        • 螢幕轉向會重跑整個 Activity lifecycle,自然速度會變慢。
        • 從 lifecycle 路徑和各家前輩的推薦,任何要暫存的資料,都要放在 onPause,這樣進出才不會有問題。
        • AP 的 androidmenifest.xml 通常會宣告 android.intent.action.MAIN & android.intent.category.LAUNCHER, 這代表是程式的主進入點,其 activity 屬性為 singleTask & singleInstance。(預計有延伸實驗)
        • onPause() 觸發條件:
          • System shutdown by power key
          • Suspend
          • Alarm
        • onStop() 觸發條件:
          • Back to HOME
          • Phone call interrupt
          • Camera on
          • AP switch (等價於 Back to HOME)
          • Intent another Activity
        • onDestroy() 觸發條件:
          • Press Return key
          • Screen rotate

        參考資料:

        2011年2月18日

        Ways of Android key event input

        記錄幾種可以對 Android 設備進行 key event record / replay 的方法

        • By adb: (Keyevent code 請自行尋找) => http://site.douban.com/widget/notes/350758/note/130004667/
          • adb shell input [text|keyevent]
          • adb shell input text <string>
          • adb shell input keyevent <event_code>
        • 從 Framework 層自行攔截 (需要 build environment)
        • 也有一些人已經寫好了 APK 可以從網路上找 (曾經找到過,現在忘了 URL也沒花時間找)
        • By monkey: (兩種 script 執行的方法)
          • 從 PC 端執行 (Monkey source 裡面的範例)
            • 開啟 monkey port
            • adb 做 port forward to monkey's port
            • 用 telnet 連到 monkey port 
              • 方法一: 在 telnet 環境執行 key event (key down / key up...)
              • 方法二: 在 PC 端執行 cat script.txt | telnet 127.0.0.1:1234
          • 從 DUT 端執行
            • 先寫好 monkey script
            • Push script file to DUT
            • 執行: adb shell monkey -f /data/script.txt 1
        • By Sikuli (需要 root 權限)
        • By Monkeyrunner (尚未研究)

        Android Emulator 的功能

        看起來 Emulator 的可以模擬很多模式,可以模擬很多真實設備的功能。
        可以參考 Android developer 裡面 Emulator 頁面的說明:

        簡列可能的功能,很多我還沒有驗證過,測試後再 update 內容。

        Emulator hardware 選項


        自行選擇 Property


        • Key / touch event
        • Phone call (Call / Hang up)
        • Press power key (Suspend / Resume)
        • Audio volume control
        • Camera preview
        • Screen rotate
        • Cell networking on/off
        • Code profiling
        • Full screen mode
        • Trackball mode
        • Dpad
        • Enable SDcard
        • Wipe-data
        • Root shell
        • Audio playback / record / disable
        • Radio (Modem)
        • Networking (Communication / DNS / Port redirect)
        • HTTP proxy
        • Low CPU frequency 
        • GPS
        • Screen size / type
        • Specific cache image/ user-data image/ ramdisk image

        Android 模擬器無法打開 / ERROR: the user data image is used by another emulator. aborting

        Android SDK 更新到 API10 & 3.0 preview 後,開啟 emulator 曾經
        發生以下錯誤: emulator: ERROR: the user data image is used by another emulator. aborting


        找了一下別人的文章,發覺解法如下:

        1. On Windows:
          • 使用 adb kill-server 後再開啟試試看 (此方法驗證成功)
          • 清除 C:\Documents and Settings\@USER@\.android\avd 的 .lock 資料
        2. On Linux:
          • (From 網友) 刪除android-sdk-windows\.android\avd\對於版本\下的以.lock結尾的文件夾就行


        2011年2月17日

        Android 軟體下載網址 - Android market / Android AppStore

        蒐集 Android 應用程式下載網址

        • Android 中文資訊站: http://android.cool3c.com/forum/6522
        • Androidlib: http://www.androlib.com/
        • Android 中文網: http://android.tgbus.com/
        • Android freeware: http://www.freewarelovers.com/android
        • Android forum 中文討論區: http://gphonefans.net/forum.php
        • Mobile9: http://gallery.mobile9.com/c/android-software/1/
        • 機鋒網: http://bbs.gfan.com/forum-62-1.html
        • Android market: http://www.android.com/market/
        • AndAppStore: http://andappstore.com/AndroidApplications/
        • Getjar: http://www.getjar.com/software
        • Phoload: http://www.phoload.com/android
        • SlideME: http://slideme.org/
        • Phandroid: http://phandroid.com/android-applications/
        • Cyrket: http://www.cyrket.com/
        • AndroidSoftwareDownload: http://androidsoftwaredownload.com/
        • Free Android Software: http://www.freeandroidsoft.com/
        • openintents: http://code.google.com/p/openintents/downloads/list
        • 免費手機應用程序下載: http://app.cnmsdn.com/list.php?os=Android&page=1
        • AppBrain: http://www.appbrain.com/

        Android 除錯工具 - Android debug tool & Code review

        Android development IDE:
        • ANT
        • Eclipse (TPTP / UML / MAT ...)
        • Eclipse + Motodev
        • EclispeUML
        • IntelliJ IDEA
        • ...

        蒐集 Android 上層開發可能用到的除錯工具
        • ANT
        • Eclipse plug-ins
          •  http://pontiffkao.blogspot.com/2011/05/eclipse-plugins-code-analysis.html
        • Android test (Unit test)
          • http://developer.android.com/guide/topics/testing/index.html
            • JUnit / Instrumentation
            • Monkey / Monkeyrunner
            • CTS
        • Unit test utility (Instrumentation / JUnit / Robolectric / Robotium / Selenium / ...)
        • GDB
        • JDWP debugger
        • Bootchart
        • Android included tools:
          • aapt
          • dexdump
          • adb (logcat / bugreport / dmesg / kmesg)
          • ddms
          • strace
          • traceview / dmtracedump
          • Heirarchy Viewer
          • hprof-conv
          • dev tool
          • dump radio state
          • Screen capture
          • Pixel perfect
          • layoutopt
          • Monkey / Monkeyrunner
          • SL4V (ASE)
          • ProGuard
          • zipalign
          • android.os.StrictMode
          • oprofile
          • TCPdump
          • /system/sbin & /system/bin
          • log output related classes and methods


        Android code review:
        • Static / Dynamic analysis (通常要找很貴很貴的套裝軟體, such as Coverity, Parasoft, JamoSolution, ...etc)
        • Android 內建的 profiling tools (strace / oprofile / traceview / dmtracedump / ...)
        • 其他 profiling tools (gprof / Valgrind / VTune / DTrace / callgrind / massif / Codeanalyst / Google-perftools /  perf / smem)
        • EMMA on Android
        • Eclipse plugins: PMD / Checkstyle / Findbugs / Modeling tools / tptp / MAT / Jupiter / Collaborative Code Review Tool (IBM) / ReviewClipse / AgileReview / Klocwork / DS-5 / Coverity / UML /
          Android Graphic Analyzer / ...
        • Gerrit / Rietveld site
        • Hudson / Maven for Android
        參考:

        2011年2月11日

        網頁、網站、主機、瀏覽器測試 - Browser / Web site / Web server test

        目的: 出發點是要測試手機或手持裝置的瀏覽器,想定義出測試的範圍,意外發覺很多文章,可是都沒有把界線和對象定義清楚,所以想把關於測試的範圍定義出來。

        網路一堆資料,到底內容是做為什麼角色在測,都沒寫清楚,很容易混淆。

        測試路徑: Web server (HW) -> OS -> Web server (SW) -> Web site -> Browser
        (橘色: Server 端 / 藍色: Client 端)

        其實老話一句,坐什麼位置裝什麼腦袋。你要測 Web Server,那到底是要測硬體主機,還是要測軟體 Web Server,先搞清楚在什麼位置,再決定要進行什麼測試、以及如何定義 KPI。當然測到最後,什麼都會一起測到,這就是所謂的系統整合測試 - SIT (System Integrated Test),就算是 SIT 黑盒子測試,總還是會有一個"測試目的"和"測試對象"。所以搞清楚在哪個位置是很重要的。

        2011年2月8日

        Activity 之間的的通信 (數據傳遞)

        請參考


        目前蒐集到的方法有:

        • By using Intent
        • By using Adapter
        • By using binder
        • By using Context
        • By using RemoteCallbackList class
        • By using public static field/method
        • By using a HashMap of WeakReferences to Objects
        • By android.app.Application class (尚未搞懂)
        • By using a static Singleton
        • By using persistent objects
          • By file / application preference / SQLite / Content provider / Network

        一個.java裡面可以有多個 Class 嗎?

        正在找尋 Android 一個 package 裡面的 .java 到底能放些甚麼東西進去,突然發現 JAVA 的語法中有類似的討論,避免忘記先把資料放進來

        第一個網頁說明 class 之間的關係
        第二個網頁是基礎的 Java 語言概論