批改Android镜像文件 ramdisk.img、system.img、userdata.img获取root权限


修改Android镜像文件 ramdisk.img、system.img、userdata.img获取root权限

       首先,介绍一下这三个文件。

       ramdisk.img 是你make android源代码后,生成的/out/target/product/generic/root目录下经过打包压缩而成的。

       system.img 是你make android源代码后,生成的/out/target/product/generic/system目录下经过打包压缩而成的。

        userdata.img是你make android源代码后,生成的/out/target/product/generic/data目录下经过打包压缩而成的。

       android系统起来后,会把ramdisk.img挂载为rootfs(根文件系统),system.img挂载到ramdisk.img的system文件下, userdata.img挂载到ramdisk.img的data目录下。

       当建立好了开发环境后(eclipse+ADT+SDK),启动eclipse中的虚拟设备,其默认的Android镜像文件位于SDK 目录system-images文件下,当然有不同的等级,我的目录如下:android-sdk-linux/system-images/android-15/armeabi-v7a/。其中除了3个.img文件外,还有一个kernel-qemu,它是linux内核文件,其他的文件都没有什么作用。这个3个文件都可以用你自己生成的文件代替。

        下面开始解压这三个文件,在开始修改前,提醒一下,要备份你的文件。

         首先从最难的ramdisk.img开始,你别看它和其他两个的后缀是一样,其实它跟它们不是同一样的文件格式,从后面的操作就可以看出。

解压:

         1. 新建文件夹 :mkdir tmptmp/ramdisk tmp/system tmp/userdata.

         2. 拷贝ramdisk.img到tmp,cd tmp

         3. mv ramdisk.img ramdisk.img.gz

         4. gunzip ramdisk.img.gz

         5. cd ramdisk

         6. cpio -i -F ../tmp/ramdisk.img

         这样,ramdisk的文件就都解压到ramdisk里面了。

修改:

         1. 开机用root登录系统,修改init.rc 文件中的:

                      service console /system/bin/sh
                            class core
                             console
                             disabled
                              user shell
                             group log
              user shell 改为user root。

         2. 更改为可写文件,修改init.rc 文件中的:

                       on fs
                          # mount mtd partitions
                          # Mount /system rw first to give the filesystem a chance to....
                          mount yaffs2 mtd@system /system
                          mount yaffs2 mtd@system /system ro remount
                          mount yaffs2 mtd@userdata /data nosuid nodev
                          mount yaffs2 mtd@cache /cache nosuid nodev

                       on post-fs
                          # once everything is setup, no need to modify /
                          mount rootfs rootfs / ro remount
                  将只读 ro 改为rw可读写。当然,这些有可能不在这个文件里,那肯定再xxx.rc 里面,xxx.rc有很多可以改的,它们可以配置系统的服务。修改好了后,进行压缩。

打包:

        方法一:

        1.用mkrootfs制作ramdisk.img,mkrootfs是android生成的命令:out/host/linux-x86/bin/mkbootfs,可以将此命令拷贝到tmp目录下,在tmp下执行:mkbootfs ramdisk | gzip ramdisk.img.

        方法二:

        在tmp/ramdisk执行:

        cpio -i -t -F ../ramdisk.img | cpio -o -H newc -O ./ramdisk_new.img

        gzip ramdisk_new.img
         mv ramdisk_new.img.gzramdisk.img            

这样新的img就制作成功了,可以用其代替原来的了。

        system.img 以及userdata.img,因为这两个文件是一样的格式,所以一起说明。

解压:

         它们都是yaffs2 格式的文件,要解压yaffs2文件,需要用到uyaffs,这个网上有源码,我 csdn 资源上也有,要的可以去下载。执行:

         uyaffs2 system.img

         uyaffs2 userdata.img

就会生成对应的文件夹:system、uersdata.系统预装的apk在system/app下,可以删除不需要的apk。

打包:

         使用mkyaffs2image能对yaffs2文件打包,android也会生成:out/host/linux-x86/bin/mkyaffs2image,用法如下:

                mkyaffs2image tmp/system/ system.img

                mkyaffs2image tmp/userdata userdata.img

生成img 后,就可以用它们替换原来的了。


-----------------------------------------------------

关于android模拟器取得root和修改系统apk的方法

还是要说,当我们搜索这些内容的时候,网上给的不是千篇一律的抄袭,就是直接复制老外的英文,不过相对而言,还是后者比较靠谱点
首先ROOT的方法其实很简单,以4.1SDK为例
只需要在SDK目录下的\platform-tools目录中运行adb就可以,直接输入adb rootroot成功了
然后设置系统目录的读写,直接输入adb remount就可以了
如果想替换系统程序比方说SystemUI.apk,那需要做以下工作:
0
,启动模拟器
1
,进入C:\Users\用户名\.android\avd\ics.avd目录,这里我的模拟器取名叫ics,打开hardware-qemu.ini,将disk.systemPartition.initPath =C:\Users\用户名\.android\avd\ics.avd/system.img,此时其实这个目录下并没有system.img,模拟器默认都是从SDK的安装目录中启动system.img,不过不用担心,我们后续会改
2
,命令行下输入adbshell进入android的文件目录,进入/system/app,删除下面的sdksetup.apkodex
3
exit退出,push修改后的systemui.apk,注意大小写,然后再次用adb shell进入/system/app,设置权限chmod 644 SystemUI.apk
4
,到C:\Users\UserName\AppData\Local\Temp\AndroidEmulator\下,将*.TEMP文件拷贝到C:\Users\Username\.android\avd\Emulator’sname.avd/
5,关闭模拟器
6,将C:\Users\Username\.android\avd\Emulator’sname.avd/下的.temp文件命名为system.img,删除userdata-qemu.imgcache.img.
7,正常启动模拟器即可
存在的问题就是,每次修改都必须遵行这个步骤,从某种角度来说,android模拟器不同于虚拟机,本身的system.img并不会因为用户的修改而变化,所以只能从temp文件中反复拷贝
看看下面这个模拟器,和原生有什么不一样呢?呵呵,看似一小步,其实是一大步啊

 


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值