压缩system文件夹成可刷入的system.img镜像方法

需积分: 31 6 下载量 191 浏览量 更新于2024-10-26 2 收藏 92KB RAR 举报
资源摘要信息:"将system文件夹打包成system.img镜像" 知识点: 1. 镜像制作与修改的概念 镜像通常指的是一个包含完整文件系统的文件,它可以完整地复制某个分区或存储设备的所有数据。在Android系统刷机过程中,经常需要制作和修改镜像文件。镜像文件的制作涉及到将文件系统中的数据打包成一个文件,而修改则涉及到调整这个文件的大小或结构来适应不同的设备需求。 2. system.img的含义 system.img是Android操作系统中一个非常重要的镜像文件,它包含了系统的核心文件和应用程序。在刷机或系统升级时,经常会涉及到对system.img的处理。由于不同设备的系统分区大小不一,直接刷入一个大于设备系统分区容量的镜像是不可行的,这就需要对镜像文件进行大小调整。 3. 分区与分区镜像大小调整的原因 在刷机或进行系统恢复时,常常会遇到镜像文件大小与目标分区容量不匹配的问题。如果镜像文件大于目标分区的大小,那么这个操作将无法完成。因此,有时候需要调整镜像文件的大小,使其能够在目标分区中被成功刷入。 4. 使用小软件改变分区镜像大小的方法 有专门的软件工具可以帮助用户对镜像文件的大小进行调整,例如通过压缩或剪切镜像中不重要的部分来减小其大小。这类软件通常具有图形用户界面,操作简单,用户可以通过选择不同的压缩或调整选项来控制最终镜像文件的大小。 5. 刷机前的准备工作 在进行刷机操作前,用户需要确保已经下载了正确的刷机包和相应的镜像文件。同时,备份现有系统中的重要数据也是一个重要的步骤,以防在刷机过程中出现数据丢失的情况。在刷机之前,还需要确保手机的电量充足,以及已开启USB调试等模式,以便于与计算机连接。 6. 刷机的注意事项 刷机有一定的风险性,操作不当可能会导致设备变砖。因此,在进行刷机操作之前,用户需要仔细阅读刷机指南和教程,了解操作步骤,并且确保使用的是正确的刷机工具和固件。刷机过程中必须保证操作的连贯性和正确性,不能中途断电或断开连接。 7. 实际操作步骤 将system文件夹打包成system.img通常涉及到使用特定的命令或软件工具。例如,在Linux环境下,可以使用mkbootfs工具来创建一个可启动的文件系统镜像,而Windows环境下可能需要用到类似WinImage之类的工具。打包成img镜像后,用户需要使用刷机工具(如fastboot)来将制作好的镜像刷入设备。 8. 对文件夹内容的考量 在打包成img镜像的过程中,需要考虑到哪些文件是必须的,哪些文件可以省略。例如,部分设备的缓存文件夹可以不包含在镜像文件中,因为它们可以在系统首次启动时重新生成。这样可以有效减小镜像文件的大小,避免超出了目标分区的容量限制。 9. 版本兼容性与设备特定性 制作的镜像文件需要与目标设备的操作系统版本相兼容。不同版本的Android系统可能对文件系统的格式和结构有不同的要求,因此在刷机前需要确认镜像文件是否适用于当前设备。此外,一些特定的设备定制可能会涉及到额外的驱动程序或配置文件,这些都需要在打包镜像时考虑进去。 10. 具体的刷机流程 刷机流程通常包括解锁bootloader(如果设备需要)、安装相应的驱动程序、进入特定的刷机模式(如fastboot模式),然后使用刷机工具将镜像文件刷入设备。这个过程中,正确的命令和参数是非常关键的,错误的操作可能会导致设备无法启动。 在进行上述操作之前,请确保用户已经清楚理解了整个过程,对可能出现的风险有充分的准备,并做好了必要的数据备份。只有在完全理解了这些知识点之后,才能安全、有效地完成刷机操作,将system文件夹打包成合适的system.img镜像,并成功地刷入目标设备中。
2013-09-17 上传
使用方法:http://blog.csdn.net/asmcvc/article/details/11770851 工具: unyaffs,mkyaffs2image 其中unyaffs有windows版本和linux版本,mkyaffs2image只有linux版本。 windows版本的unyaffs用法: 把system.img复制到unyaffs的相同目录下,cmd命令下cd到unyaffs的目录下,然后执行命令:unyaffs system.img unyaffs会把system.img解压到其目录下。 linux版本的unyaffs用法: 把unyaffs复制到/usr/bin目录下,并修改权限为可执行。 然后cd到system.img目录下(假定目录为system目录),执行命令:unyaffs system.img 然后对system目录下的文件进行修改。 注意:修改完后的文件要修改一下权限,尽量和其他文件的权限保持一致。例如:chmod 644 framework-res.apk mkyaffs2image用法: 复制到/usr/bin目录下,并修改权限为可执行。 这里以打包system目录为system.img为例,执行命令: mkyaffs2image system system.img 然后把新生成的system.img复制替换掉原:adt-bundle-windows-x86\sdk\system-images\android-17\armeabi-v7a\system.img 执行bat批处理命令启动模拟器: D:\adt-bundle-windows-x86\sdk\tools\emulator-arm.exe -avd AndroidVM -partition-size 128 这里以修改android系统启动画面为例: 打开解包目录下的\framework\framework-res.apk 替换图片:framework-res.apk\assets\images\android-logo-mask.png为下图: 然后对\framework\framework-res.apk文件重新签名,复制到linux下后修改文件权限和原来一致。 然后mkyaffs2image system system.img打包生成新的system.img,替换原来的system.img,并启动模拟器,效果图如下: 修改代码: 工具:odextools(参考:《一键odex批量合并工具odextools的重新整理与使用》)、dexopt-wrapper 其中odextools.bat的代码: 批处理有一处bug:每打包一次会把odex文件删除掉,导致在后面的打包过程中会出现找不到:system/framework/core.odex类似的错误,因此只需要在打包完后不删除odex文件即可,找到del /f !apkx!.odex 1>nul 2>nul改为:::del /f !apkx!.odex 1>nul 2>nul,也就是注释掉这一行代码。 具体使用方法(操作在windows下): 在odextools\romdir目录下创建文件夹:system 利用unyaffs解包system.img后,把所有文件复制到system目录下。 然后运行odextools.bat,如图: 选择一个需要整合odex的目录选项即可。odextools.bat会自动设置环境变量,使用baksmali.jar来反编译odex为smali,然后再调用smali.jar打包为classes.dex, 然后再打包到相应的apk包(framework目录下对应的是jar后缀的,实际上也是个apk包),最后再重新签名。 如果要修改代码,则需要把上面重新打包生成的apk文件,利用常规方法反编译后修改smali代码,例如插桩输入log信息。然后再回编译并重新签名。 最后一步:因为system.img中的apk是优化过的,apk主目录下是没有classes.dex文件的,而是一个被优化过的odex文件,用于优化启动速度。 因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,然后删除apk包里的classes.dex,并在相同目录下放置与apk包同名的odex文件。 按照原system目录的文件结构组织好后,目录复制到linux环境下使用mkyaffs2image重新打包成system.img。