Android中system.img的两种格式及其相互转换方法

搞Android的同学经常会接触到system.img。但是该文件经常以两种格式出现:raw和sparse。

一种是raw ext4 image,即经常说的raw image,使用file观察它:

其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大(一般1G左右)。

$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

信息非常明确了。

另一种是sparse ext4 image,即经常说的simg,使用file观察它:

$ file system.img
system.img: data

就是说是一个非常普通的dat文件。由于它将raw ext4进行稀疏描述,因此尺寸比较小(没有全零的无效填充区,一般在300到500M之间)。

android本身提供了源代码工具在两者之间转换,源代码位于:

system/core/libsparse/simg2img.c // 将sparse image转换为raw image;
system/core/libsparse/img2simg.c // 将raw image转换为sparse image;

如果完整的进行过一次Android的编译,默认会将simg2img当作主机工具编译出来,放在out/host/linux-x86/bin/simg2img处。

但默认是不会编译img2simg的,我们可以手工进行编译:

$ . build/envsetup.sh
$ lunch aosp_hammerhead-userdebug
$ make img2simg_host

这样就会编译出out/host/linux-x86/bin/img2simg。

如果要将system.raw.img转换为system.simg:

$ img2simg system.raw.img system.simg

为了方便没有源代码的同学,这里提供img2simg的下载路径:

http://download.csdn.net/detail/howellzhu/8399215

对于simg2img,到处都可以找到了,还有windows版本的,这里就不提供了。

使用方法:

$ simg2img <sparse_image_files> <raw_image_file>
$ img2simg <raw_image_file> <sparse_image_file> [<block_size>]

欢迎转载,但是请注明出处:http://weibo.com/howellzhu

时间: 2025-01-02 06:56:20

Android中system.img的两种格式及其相互转换方法的相关文章

(原创)android中使用相机的两种方式

在社交类应用或扫描二维码的场合都需要用到手机上的摄像头 在程序中启用这一硬件主要有两类方法 1.发送intent启动系统自带的摄像应用 此应用的AndroidManifest中的intent-filter如下 <intent-filter> <action android:name="android.media.action.VIDEO_CAPTURE" /> <category android:name="android.intent.cate

在Android中如何添加menu两种方法

Android界面开发之菜单Menu用法 Android手机用一个按键“Menu”专门来显示菜单,所以,当应用程序设置了菜单,我们便可以通过该按键来操作应用程序的菜单选项. 要实现菜单功能,首先需要通过方法onCreateOptionsMenu来创建菜单,然后需要对其能够触发的事件进行监听,这样才能够在事件监听onOptionsItemSelected中根据不同的菜单选项来执行不同的任务.当然,可以通过XML布局来实现,也可以通过menu.add方法来实现.下面的示例分别采用了这两种不同的方法来

转:在android中button响应的两种方式

1. 在布局文件中添加button的监听名字 Android:onClick="buttonOnClick" 例如: <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/button1&q

Android中activity传值的两种方式

第一种:第一个Activity  /**      * 通过这个方法跳转到activity2界面*/     public void gotoActivity2(View v){      //创建一个意图      Intent intent=new Intent(this,MainActivity2.class);                //第一种传值方式      Bundle bundle=new Bundle();      bundle.putString("name&quo

Android中返回Activity的两种方法

finish返回 finish(): 在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法. 当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放.因为移出了栈,所以当你点击手机上面的返回按键的时候,也不会再找到这个Activity. onDestory(): 系统销毁了这个Activity的实例在内存中占据的空间.在Activity的生命周期中,onDestory()方法是他生

CAD图纸的两种格式如何进行互转?

CAD图纸的两种格式如何进行互转?相信专业从事CAD工作的人都知道CAD基本的两种格式是dwg和dxf格式,这两种格式在工作中也会需要对其进行相互的转换,那么我们应该如何进行操作来将这两种格式进行相互的转换呢?今天小编就来教大家使用CAD转换器来将这两种CAD图纸的格式进行转换的全部操作,希望能够帮助到大家! 第一步:首先要打开你们电脑上面的CAD转换器软件,如果你们电脑上没有这款软件的话,就需要去到官网上面进行下按在操作了,今天小编在这里使用的就是这款"迅捷CAD转换器"需要可以进行

Android模拟点击的两种方式

导论 在Android中模拟一个点击事件有两种方式是通过模拟MotionEvent来实现:一种是通过ADB来实现 第一种:模拟MotionEvent 通用方法如下: private void setSimulateClick(View view, float x, float y) { long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent = MotionEvent.obtain(downTime, dow

java中设置代理的两种方式

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import jav

android中bitmap压缩的几种方法的解读

最近在研究微信的sdk,在缩略图这遇到了一点问题. 微信的缩略图要求是不大于32k,这就需要对我的图片进行压缩.试了几种方法,一一道来. 1.质量压缩法: 代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 100; while ( baos.toByteArray().length /