2014年3月19日 星期三

Shell script Auto factory reset and adb logcat

這個Script 用來重覆紀錄 factory reset 的 log

Script 存成 .sh 檔 之後,記得 chmod +x 給予執行權限 
例如我把檔名叫做 factory_reset.sh 

$  chmod +x factory_reset.sh

要用的時候的也很簡單~

$  ./factory_reset.sh | tee log.txt

會把所有輸出在螢幕上的文字同時存成log.txt

#!/bin/bash

# for loop 1~10000, i++
for (( i=0; i<100000; i=i+1 ))
do
    echo "Run $i times"
    adb root
    # sleep 一下 (單位是秒)
    sleep 5

    # 清除 /data 下所有資料 
    adb shell wipe data

    # 沒有東西的話,清除時間不會太久,反正也是要睡一下
    sleep 10

    # 清完後reboot, 就是factory reset了
    adb reboot

    # sleep 一下隨意
    sleep 20
    
    adb wait-for-device 

    # 後面加個 & ,等等才可以中止adb logcat
    adb logcat &

    # 這邊sleep比較久是因為factory reset後的第一次開機時間都比較長
    # 當然也是每家手機時間長短不一,請自行調整
    sleep 300 
    
    # Kill 剛才的 adb logcat (就是模擬按 Ctrl+C )
    kill $!

done


--
P.S. 這個供開發使用,一般使用者手機若不能 adb root 不在此文解決範圍

2014年3月12日 星期三

dvm_lock_sample @ Android event log

關於 Android event log 裡各個 log 格式定義在 
android_codebase/system/core/logcat/event.logtags

那現在要來講的是 dvm_lock_sample
dvm_lock_sample 用來表示某process的某thread為了等另一個人釋放lock,而耗了多少ms


For example:
dvm_lock_sample: [system_server,1,ActivityManager,18285,ActivityStack.java,288,ActivityManagerService.java,13056,100]
dvm_lock_sample: [system_server,1,main,16710,ActivityManagerService.java,5760,-,13056,100]
dvm_lock_sample: [system_server,1,Binder_7,15333,ActivityManagerService.java,12911,-,13056,100]
dvm_lock_sample: [system_server,0,android.bg,108,ActivityManagerService.java,1731,-,13056,21]

在 system/core/logcat/event.logtags 裡可以看到
dvm_lock_sample (process|3),(main|1|5),(thread|3),(time|1|3),(file|3),(line|1|5),(ownerfile|3),(ownerline|1|5),(sample_percent|1|6)

這後面一長串是啥鬼? 請見該檔案上方…

# Tag numbers are decimal integers, from 0 to 2^31.  (Let's leave the
# negative values alone for now.)
#
# Tag names are one or more ASCII letters and numbers or underscores, i.e.
# "[A-Z][a-z][0-9]_".  Do not include spaces or punctuation (the former
# impacts log readability, the latter makes regex searches more annoying).
#
# Optionally, after the tag names can be put a description for the value(s)
# of the tag. Description are in the format
#    (<name>|data type[|data unit])
# Multiple values are separated by commas.
#
# The data type is a number from the following values:
# 1: int
# 2: long
# 3: string
# 4: list
#
# The data unit is a number taken from the following list:
# 1: Number of objects
# 2: Number of bytes
# 3: Number of milliseconds
# 4: Number of allocations
# 5: Id
# 6: Percent
# Default value for data of type int/long is 2 (bytes).


對照一下 dvm_lock_sample…
(process|string),(main|int|id),(thread|string),(time|int|ms),(file|string),(line|int|id),(ownerfile|string),(ownerline|int|id),(sample_percent|int|%)

好吧,我知道還是有些亂…對照一下例子好了…

dvm_lock_sample: [system_server,1,ActivityManager,108,ActivityStack.java,288,-,13056,100]

(process|string)       system_server (process name)
(main|int|id)          1 (yes)
(thread|string)        ActivityManager (thread name)
(time|int|ms)          108 (lock time 單位:ms)
(file|string)          ActivityStack.java (file name)
(line|int|id)          288 (對應 file 的行數)
(ownerfile|string)     - (owner file name,- 表示和 file name 一樣)
(ownerline|int|id)     13056 (對應 owner file 的行數)
(sample_percent|int|%) 21 (lock time/500的百分比,佔用500ms以上皆為100%)

2014年3月3日 星期一

快速設定fcitx內建的嘸蝦米輸入法,適用於 Ubuntu12.04 / Debian 7 以上版本

前陣子在套件庫裡發現了有個套件名稱叫 fcitx-table-boshiamy
裝來試試後,有些問題讓我用得不太方便,所以一直沒有分享給大家。
原以為是字碼表的問題,檢查了一下它內建的字碼表是正確的,
才懷疑是我自己在設定上的問題,總之好不容易解決了,
依照慣例,寫個簡單上手又容易成功的文章。
最近工作忙,就不勤勞的擷取操作畫面放上來,
若有問題可直接留言,我會收到E-mail通知的。
如果你很急,我又剛好都不去收信(有時我會這樣…Orz)
Google一下應該是找得到我個人FB,用FB傳訊息給我也是個方法。
但FB非朋友的訊息會被歸在另一個收件匣,也是有可能造成我沒即時看到…XD
(而且我曾發生因工作太累,連FB都可以一整週不去看...XD)


OK, 正文開始 。

Step 1. 請先安裝該套件 。

$sudo aptitude install fcitx-table-boshiamy (也可以使用apt-get)

  相依性關係下,系統會告訴你它還會安裝fcitx fcitx-bin ......
  反正就是給它裝下去

Step 2. 執行 im-config (一個選擇/設定輸入法的套件 ,剛剛應該有順帶幫你裝進去了)

 $im-config

  會跳出視窗,請把預設輸入法改成fcitx

Step 3. 嘸蝦米設定及輸入法全域設定
 你可以使用圖形化介面,從Dash主目錄搜尋fcitx 或是在終端機下指令叫它出來
  $ fcitx-configtool

 但我好懶得貼圖~加上圖形化介面可以會一直改來改去,
 之前也有發生過在GUI上更改的結果並沒有被寫入Configure file裡
 所以,我們要修改下面2個檔案

  $ vim ~/.config/fcitx/table/boshiamy.conf
  $ vim ~/.config/fcitx/config

 若不喜歡 vim,也可以使用gedit

  $gedit ~/.config/fcitx/table/boshiamy.conf
   $ gedit ~/.config/fcitx/table/boshimay.conf

 一定要更改的有:拼音鍵,可能有預設是Z,一定要取消,
否則你會發覺Z怎麼跟失效沒啥兩樣
其他改了更方便的有輸入順序、碼表順序 (輸入法順序 )、快速鍵等

首先來取消拼音鍵,但不能取消使用拼音 (我就是這樣搞丟中文鍵盤配置的)
在 boshiamy.conf底下,你可能會需要關心以下參數

# 輸入順序  (幫你調整同字碼的排列順序,我不想要它幫忙變更)
# Available Value:
# AdjustNo
# AdjustFast
# AdjustFreq
AdjustOrder=AdjustFreq
# 碼表順序 (設為1即為預設第一個,設為0等於不使用)
Priority=1
# 使用拼音 (一定要使用拼音哦 )
# Available Value:
# True False  
UsePY=True
# 拼音鍵 (但不要拼音鍵)
#PYKey=(開頭有#就等於沒有設定)

在 config file 底下,你可能會想要關心以下參數
[Hotkey]
# 切換啟用或非啟用輸入法
#TriggerKey=CTRL_SPACE(開頭有#就等於沒有設定)
# 只在用額外切換鍵取消啟動後才使用它進行切換
# Available Value:
# True False
#UseExtraTriggerKeyOnlyWhenUseItToInactivate=True(開頭有#就等於沒有設定)
# 額外的啟用輸入法快捷鍵
# Available Value:
# R_CTRL
# R_SHIFT
# L_SHIFT
# L_CTRL
# ALT_L_SHIFT
# ALT_R_SHIFT
# CTRL Both
# SHIFT Both
# L_ALT
# R_ALT
# ALT Both
# Left Super
# Right Super
# Super Both
# Ctrl+Left Super
# Ctrl+Right Super
# Super+Left Ctrl
# Super+Right Ctrl
# Disabled
# Custom
SwitchKey=R_CTRL

[Program]
# 在視窗間共享狀態 (我設成相同程式間共享)
# Available Value:
# No
# All
# PerProgram
ShareStateAmongWindow=PerProgram
# 預設輸入法狀態 (我設成預設啟動)
# Available Value:
# Inactive
# Active
DefaultInputMethodState=Active

[Appearance]
# 切換輸入法時顯示輸入法提示 
# Available Value:
# True False
#ShowInputWindowAfterTriggering=True(開頭有#就等於沒有設定)
# 獲得輸入焦點並且輸入法變化時顯示輸入法提示
# Available Value:
# True False
ShowInputWindowWhenFocusIn=True
# 輸入法提示只在啟用狀態顯示
# Available Value:
# True False
#ShowInputWindowOnlyWhenActive=True(開頭有#就等於沒有設定)


Step 4. 執行/啟動輸入法 (如果你剛剛是啟動的,要重新啟動輸入法)

$fcitx