使Android的system分区可写及安装apk到system/app

来源:互联网 发布:linux 开机进入text 编辑:程序博客网 时间:2024/06/07 22:00

在网上看到几种方式记录一下:

一、如何在adb shell下mount Android下的分区

通过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 mtd@system /system
  1. 第二种方法虽然也是可以的。之所以这么写是参考init.rc里面的mount写法。

不清楚这个是怎么回事,要是原生的linux mount命令应该不会这样的。


二、android 安装软件TOsystem app

删掉了内置软件,便有了闲置的空间,这时可以用这部分空间安装一些自己必装的软件。平时安装的所有软件,除了少数可以移到内存卡,其他的都安装在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系统上cp命令的替代方法

今天把玩手头的那部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/没有写权限,那本记录所讲述的方法就不适用了。

原创粉丝点击