編輯:關於Android編程
抱著5年的HTC G7這個古董,一直沒有想法去換換。
最近微信、支付寶什麼的apk應用都開始走程序巨型化,一次性就來個50MB的空間占用,讓還是Android 2.2的手機如何吃的消?
看看100多MB的空間,這家裡家外都用微信,得裝一個吧;大家一起出去吃飯,一人付賬,AA結得有支付寶;還有12306火車票啦,手機銀行什麼的;
加上pm setInstallLocation 2也沒有解決dex cache占空間的問題。
於是隨著需求的日益強烈,終於要想辦法把Android的存儲空間擴展下了。網上好多刷機的教程啊,我個人倒不喜歡刷機,刷錯一次還得再改再重新刷,太麻煩。
所以准備好環境:
- 玩具筆記本Acer一台,裝有Ubuntu,Android SDK和NDK
- HTC G7手機,裝有原版Android 2.2
首先,我們簡單過一下存儲擴展的原理:
- Android 2.2中,app應用分別裝在兩個地方,一個是/system/app中,一個是/data/app中。
- 官方的app都帶有odex文件加速應用啟動,一般在/system/app裡;以後下載安裝的app一般在/data/app,手機啟動到桌面後apk應用程序(apk實際就是個zip,16進制看下magic是PK便是)裡的內容會被解壓,其中最重要的就是dex文件,會被放入/data/dalvik-cache中,程序的數據會放入/data/data中。
為了所有程序的穩定,決定不動/data/data;轉而進攻的方向就是/data/app和/data/dalvik-cache,它們是在手機內置存儲裡的,目標就是把這兩個目錄指向sdcard,這樣以後安裝的apk就直接進sdcard了。
這裡就不多敘述如何ROOT了,其實你不ROOT,手機關機,按住音量減開機就進入recovery模式,這時連上電腦用adb shell進去就是root。當然一鍵ROOT方便了不少。
大家還可以學習一下ROOT相關的代碼:https://github.com/ChainsDD/su-binary
其實改改那個su.c,用NDK編譯一下,扔進/system/bin,chmod 6777,就可以隨時ROOT了,只是把驗證把關去掉不太安全,還是加個apk,過一下列表比較好。
網上一堆格式化磁盤分區的做法,把sdcard變為ext2等格式,那我還得備份數據啊,太討厭。
在Ubuntu上建一個磁盤文件,用loop設備就比較輕松(這裡給它們總共500MB,應該能裝不少應用了吧,改天Hack下看怎麼在arm上編LXC玩,順便把以前編譯好的vim也放進去,後面就可以隨時編輯文本了):
dd if=/dev/zero of=app.img count=1 bs=300MB dd if=/dev/zero of=cache.img count=1 bs=200MB mkfs.ext2 app.img mkfs.ext2 cache.img
手機USB連接,把那倆img文件放進sdcard裡,比如放在/sdcard/extraspace/app.img /sdcard/extraspace/cache.img:
adb shell mkdir /sdcard/extraspace exit adb push app.img /sdcard/extraspace/ adb push cache.img /sdcard/extraspace
(話外:順便提一下,最好在recovery模式下把busybox取出來放到/system/bin裡,HTC G7 Android 2.2那個toolbox實在是太…
adb reboot recovery # 等待手機啟動到recovery模式 adb shell mount /system cp /sbin/busybox /system/bin cd /system/bin # 下面兩個工具很重要 ln -s busybox mknod ln -s busybox losetup # ls -l 看看哪些常用命令經常用,把toolbox替換為busybox rm cat ls cp mount umount mv df ln -s busybox cat ln -s busybox ls ln -s busybox cp ln -s busybox mount ln -s busybox umount ln -s busybox mv ln -s busybox df)
下面就是寫個腳本從內置存儲切換到sdcard模式:
#!/bin/sh #loop的0和1被占用了,從2開始用,這裡我用3 4 mknod /dev/loop3 b 7 3 mknod /dev/loop4 b 7 4 losetup /dev/loop3 /sdcard/extraspace/app.img losetup /devv/loop4 /sdcard/extraspace/cache.img mount -o loop -t ext2 /dev/loop3 /data/app mount -o loop -t ext2 /dev/loop4 /data/dalvik-cache # 記得給權限,如果保留為root:root,升級程序,它還是原來的,刪除apk程序,重啟手機又回來了 chown system:system /data/app chown system:system /data/dalvik-cache # 重新加載一遍所有apk程序,關了好多程序,終於給我逮著了 PID=$(ps | grep "/system/bin/servicemanager" | grep -oE "system +[0-9]+" | grep -oE "[0-9]+") kill -9 $PID要是想切換回去:
umount /data/app umount /data/dalvik-cache losetup -d /dev/loop3 losetup -d /dev/loop4 rm /dev/loop3 /dev/loop4 PID=$(ps | grep "/system/bin/servicemanager" | grep -oE "system +[0-9]+" | grep -oE "[0-9]+") kill -9 $PID以上的腳本是要在ROOT下運行的,就是su過了
su cd /data/local/tmp sh app2sd.sh啟動畫面結束後,使用一下:adb install com.tencent.mm-1.apk,OK安裝完畢,內置容量幾乎不減少了,登錄下瞬間又少了8MB(我暈,騰訊,你是要吃我磁盤的麼;阿裡支付寶也是如此…),因為沒有把/data/data也映射到sdcard,據說手機會變很慢,所以有空間用就好了,下面裝了一堆應用,貌似那個100多MB的植物大戰僵屍也可以安裝了。 今天就玩到這裡了,昨天二號玩具TP-LINK來了,看看OpenWRT,想想怎麼hack DIY自己的路由器吧。哈哈,下礼拜從亞馬遜買的其他玩具也要陸續來啦。
貝塞爾曲線開發的藝術一句話概括貝塞爾曲線:將任意一條曲線轉化為精確的數學公式。很多繪圖工具中的鋼筆工具,就是典型的貝塞爾曲線的應用貝塞爾曲線中有一些比較關鍵的名詞,解釋如
寫在前面通過上一篇文章的分析,基本已經了解當樂游戲詳情頁面的思想思路了,本篇文章主要是實現頁面的基本效果。頁面布局通過上一篇文章分析,已經知道,當樂游戲詳情頁是通過3個不
本文實例講述了Android編程開發之NotiFication用法。分享給大家供大家參考,具體如下:notification就是通知的意思,安卓中指通知欄,一般用在電話,
找到個不錯的開源項目:https://github.com/jfeinstein10/JazzyViewPager Android ViewPager 動畫效果