1. 程式人生 > >使Android的system分割槽可寫及安裝apk到system/app

使Android的system分割槽可寫及安裝apk到system/app

在網上看到幾種方式記錄一下:

通過adb shell訪問Android。

有時候會在已經root的系統檔案下面進行讀寫,例如/system,但是會提示類似read only file system的資訊。
目前發現兩種方法,該方法只在自己的測試機上成功,不保證其他機子一樣。我的是Huawei U8818
下面的例子都是圍繞/system目錄。

方法一:
使用df命令檢視

  1. # df
  2. df
  3. Filesystem Size Used Free Blksize
  4. /dev       197M 64K   197M 4096
  5. /mnt/asec  197M 0K    197M 4096
  6. /mnt/obb   197M 0K    197M 4096
  7. /system    295M 245M  50M  4096
  8. /data      755M 26M   728M 4096
  9. /cache     188M 4M    184M 4096
  10. /HWUserData 2G 1024K  2G   32768
  11. /cust      59M 14M    44M  4096
  12. /mnt/sdcard 7G 753M   6G   32768
  13. /mnt/secure/asec 7G 753M 6G 32768
看到/system分割槽有295MB的大小。
接著檢視/proc下的partitions

  1. # cat /proc/partitions
  2. cat /proc/partitions
  3. major minor #blocks name
  4. 179    0    3817472 mmcblk0
  5. 179    1    20      mmcblk0p1
  6. 179    2    300     mmcblk0p2
  7. 179    3    133120  mmcblk0p3
  8. 179    4    1       mmcblk0p4
  9. 179    5    12288   mmcblk0p5
  10. 179    6    196608  mmcblk0p6
  11. 179    7    4096    mmcblk0p7
  12. 179    8    3072    mmcblk0p8
  13. 179    9    4096    mmcblk0p9
  14. 179    10   3072    mmcblk0p10
  15. 179    11   3072    mmcblk0p11
  16. 179    12   393216  mmcblk0p12
  17. 179    13   786432  mmcblk0p13
  18. 179    14   4096    mmcblk0p14
  19. 179    15   8192    mmcblk0p15
  20. 179    16   20480   mmcblk0p16
  21. 179    17   4096    mmcblk0p17
  22. 179    18   81920   mmcblk0p18
  23. 179    19   2154496 mmcblk0p19
  24. 179    32   7761920 mmcblk1
  25. 179    33   7757824 mmcblk1p1
  26. 31     0    4096    mtdblock0
看出,分割槽mmcblk012的大小最接近295MB,判斷掛載點/system就對應該它了。
(其實,可以在/proc/mounts下面看的更直接。。。)
於是,輸入以下mount命令

  1. # mount -o remount,rw /dev/block/mmcblk0p12 /system
就可以在/system下面進行寫操作。
當然,如果不打算重啟機子的話,最好還是將它恢復到read only狀態。輸入:

  1. # mount -o remount,ro /dev/block/mmcblk0p12 /system
該方法比較麻煩的是還要判斷某掛載點跟分割槽,理論上說必須要將它們對應上來,否則會出錯。
而實際上試過將不同的分割槽跟掛載點remount一下,居然還是可以的。原因暫時不明。

方法二:《此方法試過可用》
考慮到上面用斜黑體字寫的現象,嘗試用其他資訊代替”/dev/block/mmcblk0p12“,試了一下居然也是可行的!
直接輸入下列命令即可:

    1. # mount -o remount,rw [email protected] /system
  1. 第二種方法雖然也是可以的。之所以這麼寫是參考init.rc裡面的mount寫法。

不清楚這個是怎麼回事,要是原生的linux mount命令應該不會這樣的。

刪掉了內建軟體,便有了閒置的空間,這時可以用這部分空間安裝一些自己必裝的軟體。平時安裝的所有軟體,除了少數可以移到記憶體卡,其他的都安裝在data/app目錄,所以安裝到system/app可以節約手機自帶的儲存。而且,安裝到system/app目錄後,即使恢復出廠了,也不會消失。
安裝方法有三種:
第一種(適合沒有odex檔案的),正常安裝,然後用R.E.管理器到data/app目錄找到安裝包,把它剪下到system/app目錄,再用R.E.管理器進入安裝包內,檢視是否存在lib資料夾,如果存在,就要把裡面的以.so為字尾的檔案通通解壓出來,移動到system/lib,然後重啟手機,成功。
第二種,用超級終端:把需要安裝的軟體放到sdcard/a目錄,比如需要安裝b.apk(和b.odex),括號內的部分可有可無。把b.apk(和b.odex)複製或者移動到sdcard/a目錄,開啟超級終端,
1、輸入su按回車;
2、輸入mount空-o空remount,rw空-t空yaffs2空/dev/block/mtdblock3空/system按回車;空表示該處需要空格
3、輸入 cd 空/sdcard/a按回車;
4、輸入ls按回車,將會列出a資料夾內包含的所有檔案。此步不是必需的。
5、輸入cat空b.apk空>空/system/app/*.apk按回車,*表示名稱可以任你取,但是不能與已經存在於system/app目錄的軟體同名;
6、有odex的才要這一步,輸入cat空b.odex空>空/system/app/*.odex,*與上一個*內容相同。
7、輸入reboot重啟或者自己手動重啟。然後用第一步的方式處理.so檔案;
第三種,也是用超級終端,換個更簡單的命令而已。1234步不變。
5、輸入busybox回車,如果列出一大堆單詞,那麼可以繼續。
6、輸入busybox空cp空b.apk空/system/app回車;
7、如果有odex,輸入busybox空cp空b.odex空/system/app回車;沒有odex的跳下一步;

今天把玩手頭的那部Android手機時碰到一個問題,即因為許可權問題無法將檔案複製到/system/和/data/分割槽中,經過一番折騰後,算是解決了,在此記錄一筆。本方所涉及到的命令輸入,均用斜體字表示。 情況是這樣的:該臺Android手機不提供adbroot的許可權,但又不能裝破解root許可權的軟體,若要往Android手機的/system/和/data/分割槽下拷一些檔案,是否有其它方法可以將檔案複製到上述的分割槽中?當然,手機裡的檔案管理器沒有提供將檔案從儲存卡上覆制到這兩個分割槽的功能,如果有哪個Android檔案管理器提供類似的功能,在此也因為不能下載安裝而做罷。 幸好,發現手機有預留方法可以使/system和/data分割槽獲得寫許可權,而且也可以在adbshell裡執行su命令以切換使用者。能執行的su加上可寫的分割槽,意味著該分割槽的殺剮均在我們的掌控之下了(如對手機內建的運營商定製軟體不滿,那就殺之……)。廢話少說,假如要將test.mp3檔案拷貝到/system/media/audio/目錄下,可以按如下步驟執行: 1. 將目標檔案test.mp3複製到儲存卡上,/sdcard/test.mp3;  2. 開啟PC機上的命令列,輸入adb shell並按回車進入Android系統命令列模式; 3. 輸入cd system/media/audio並回車; 4. 輸入cat /sdcard/test.mp3 >test.mp3並回車。 當第4步完成後,在命令列下輸入命令ls應該就能看到test.mp3檔案了。當然,步驟3也可省略,在adbshell裡,直接敲入命令 cat /sdcard/test.mp3>/system/media/audio/test.mp3效果也是一樣的。 因為Andorid命令列裡沒有cp命令(我一直未能明白為何不將該命令整合進去?),但是有mv這一條命令,那為什麼不直接輸入mv/sdcard/test.mp3/system/meida/audio/test.mp3呢?好,那我們試一下該命令,得到答覆是:“failed on'/sdcard/test.mp3' - Cross-device link”,也就是說mv命令不允許將儲存卡中的檔案複製到/system/或/data/分割槽中,因為兩者被認為是在不同的裝置上。所以步驟4採用cat命令,查一下cat的用法:cat[選項]... [檔案]...,其作用是將[檔案]或標準輸入組合輸出到標準輸出。平常工作時偶爾會用到cat命令去顯示文字檔案的內容,然後又想到了重定向符'>',所以兩者一結合,就自然則然地想到是否可以通過將cat的檔案輸出到指定位置來代替cp的功能?通過嘗試發現確實可以,不過我不清楚Linux系統下cp命令的實現細節,回頭去查一下看。前已敘及有了su命令及可寫的分割槽,基本可以為所欲為了,所以曲線將檔案複製到/system/或/data/分割槽後,如果檔案許可權/使用者名稱/組不符合,就可以通過chmod和chown命令進行更改。當然,如果/system/沒有寫許可權,那本記錄所講述的方法就不適用了。