2011年9月25日 星期日

android 調校二

通常 android 手機留給使用者額外安裝程式的空間並不多,像我這台 garmin asus A50 就只有 510M 的空間,再加上很多程式或遊戲都要下載資料檔才能用,有的資料檔一下載就是 100M,所以很快的就滿了。而且這台是 android 2.1 以前的,所以無法 app2sd,常常要裝新的軟體,就要想辦法砍掉現有 app,可是每次都花很多時間在想說要砍什麼軟體比較方便,因為軟體砍了後,下次再裝回來,資料和設定檔都會消失,很麻煩。

所以如果沒內建 sdcard 的機子,就要趕快去買來用才是,至少可將資料檔放到 sdcard 上。但是 android 2.2 以上的機子,才能將 apk 放到 sdcard 上,而且不是每一個程式都可以,那 android 2.1 以前的不就玩完了。

幸好找到了 link2sd 這個 app,可以讓 android 1.6 - 2.1 的手機也能將 apk 放到 sdcard 上。作法是先將 sdcard 在 pc 上分割成二個 partition,第一個弄成 vfat,第二個最好弄成 ext3(vfat 也可以啦),第二個 partition 留個 1G 就很夠了,其他都給第一個 partition,拿來存資料用。

link2sd 會使用 sdcard 的第二個 partition,掛載在 /data/sdext2 下,將原本 /data/app/example-1.apk 搬到 /data/sdext2/example-1.apk,然後再將之 link 回 /data/app/,所以使用者安裝的 apk 都會放在 /data/sdext2 下,不佔用原本的 510M 的/data 目錄的容量。除了 apk 以外,dex and lib 也可以放到 /data/sdext2 下。

就算是 android 2.2 以上的,也可以用 link2sd,因為不是每個程式都可以用 app2sd 的,但是用 link2sd 就可以。

2011年9月24日 星期六

android 調校

在玩了一陣子 android 後,發現很多 app 都會開機就自動啟動,然後在背景一直跑,佔住記憶體和 cpu,砍掉又自動跑起來。難怪 market 裡有那麼多 kill 程式的軟體,不過這個都是治標而已,砍完過一會兒又會自動起來,真頭痛。

不管是什麼功用的都可能會如此,明明我裝一個計時器,可能一天只用一次,用完十分鐘就關掉了,可是得付出的代價是一天24小時都得讓這個計時器耗掉不少的資源,為什麼,寫程式的人真的不知道頭殼在想什麼? 不知道我的手機 cpu 才 600MHz,記憶體才 180M,一個計時器就要佔掉我10幾M的記憶體,若是要用時裝上,用完後就移除是可以,但很麻煩,最主要是移除後,設定都會不見,下次再裝,又得再設定一次。

幸好最近找到方法可解決這問題,這方法是治本的方法,直接讓這 app 消失,不過要先取得 root 才行。由於使用者自己安裝的程式是放在 /data/app/ 裡,拿 "生活計時器" 來當例子,apk 位於 /data/app/com.luckyxmobile.timers4me.apk,寫了一個 script,將這個檔案改成 .apk.disable 即可,/data/app/com.luckyxmobile.timers4me.apk.disable,這樣 android 系統會認為這個 app 沒安裝,而且原本在背景跑的程式,會立即關掉。等到想用計時器時,再用另一個 script 將 .apk.disable 改成 .apk,這樣計時器 app 又回來了,隨時可用,而且設定檔都還留著喔。

那你說,為什麼要用這個“生活計時器",換另一套計時器就好啊。是沒錯,但是就喜歡這一套啊,別套用完就可關掉,偏偏喜歡的這個就一定要在背景跑,所以只好想辦法囉。另外,這招除了可以用在 user app 以為,system app 也可以喔,只是,通當 /system/app/ 是唯讀的,但是有了 root 以後,就什麼都可以動。

那如果有 20 個 app 都要用,不是要寫 20 個 script,而且,執行 script 不是很麻煩,還要開終端機,太麻煩了啦。還好有一個 app 叫 "script manager" 的,可以用來執行 script,不只是點個二、三下就可執行 script,不用打一堆字,更方便的是,還可以設定成開機就執行某個 script,或網路啟動就執行等等,非常的強大,配合 root 使用,真是天下無敵啦。當然,寫 script 也有方法啦,像我目前是只有一個 script,靠檔名來分辨啟動或關閉、以及哪一個程式、是系統 app 或使用者 app。例如 enable-timers4me,前面的 enable 表示是要將計時器 enable,執行後會自動改名成 disable-timers4me,這樣子一目瞭然的知道目前此 app 是啟動或關閉的。後面的 timers4me 則是自己定義的,在另一個檔案可以查表 packagelist.lst,內容如下:
com.luckyxmobile.timers4me.apk          timers4me
在執行 disable-timers4me 時,會分析自己檔名的前半部為 disable 表示要做 disable 的動作;後半部 timers4me 則會去 packagelist.lst 裡查表,查到檔名為 com.luckyxmobile.timers4me.apk,然後再去 /data/app/ 找到 com.luckyxmobile.timers4me.apk 改名為 com.luckyxmobile.timers4me.apk.disable,這樣這個 app 就暫時消失了,收工。

若是系統 app 則會在 /system/app/ 裡,拿瀏覽器來當例子,在 packagelist.lst 裡為:
Browser.apk        system_browser

script 則為 disable-system_browser,只要查到 system 就會自動到 /system/app 去找,反之則到 /data/app/ 找。但通常 /system 都是唯讀的,所以在改名前要先將 /system 給改成可讀寫  mount -t remount,rw /system,改完名後,再改回唯讀即可。

用了這個方法後,現在手機好用多了。像有些手機,如中華電信的,一買來就給你裝了什麼 kkbox 的,煩死了,而且砍掉又再起來,用這個方法就可以達到 "想用時才開“,呵呵,太完美了。