Android-system.img格式ROM的定制教程(转载)

准备工作
1,在PC上 安装linux 或Ubuntu操作系统【个人推荐Ubuntu】

2,系统安装好后最好用ROOT用户定制ROM
以下是开启ROOT 用户的方法;
执行:sudo passwd root 接着输入密码和root密码,重复密码。再重新启动就可以用root登陆
以上搞定了 ,我们可以开始定制ROM了
先给上 分解 与合成工具
分解工具

合成工具

把以上这2个工具放到linux 下面
现在开始做ROM
1、例如 我 在ROOT 文件里面建立一个文件夹 命名为 AND 把 unyaffs 和mkyaffs2image 、system.img 放到里面
接着又在 AND 文件夹下面建立一个 system 【这文件夹 用来放 分解得到的文件】
分解方法
分解前先给 unyaffs 赋予777权限
输入如下命令 sudo chmod
777
unyaffs(赋予unyaffs
执行权限)
开始分解
把终端定位到所要解压到的目录 cd /root/and然后打命令/root/and/unyaffs system.img
分解得到的所有文件 放到刚刚建立的 system文件下面 【除 unyaffs 和mkyaffs2image、system.img外】
分解出来后,你就可以开始XXOO它了【跟你把MM 的衣服脱掉,然后XXOO擦不多】
XXOO玩后总得把人家衣服穿上去把
下面执行合成 命令
/root/and/mkyaffs2image -f /root/and/system Newsystem.img
开始打包 (如果ROM中存在zImage,intrd.gz不需要-f)
最后合成得到 Newsystem.img 这就新ROM了
有些ROM里面 没有 APP和framework 文件夹
因为被 压缩到 squashed.sqsh里面去了
以下是 squashed.sqsh 的分解 与合成命令
分解
unsquashfs squashed.sqsh
合成
mksquashfs squashed squashed.sqsh


ROM制作基础教程:如何创建一个刷机包
目前有好几种方法来安装软件或是库文件到你的Android手机上。你可以使用市场程序来查找并安装软件,也可以使用adb命令行工具来安装或是发送文件到你的Android文件系统中。这些方法对于操作单个文件来说都挺方便的,但是如果你需要一次性安装多个软件或是库文件时,那么最为方便的方法大概就是使用update.zip(也就是刷机包)文件了。Android系统使用恢复工具(recovery)来安装这个update.zip文件中的软件或库文件到Android文件系统中。而一个ROM或是主题开发者通常都是使用这个方式来发布他们的作品(刷机包)。
创建一个update.zip文件是很简单的事情,你所需要做的就是将文件放置到与Android文件系统中相对应的文件夹中,然后编写一个用来复制这些文件到手机对应位置的update-script文件。作为举例,本文会安装Calculator.apk到system/app文件夹,复制libsec-ril.so文件到system/lib文件夹:
新建一个空文件夹(本文例:C:\goapk)

新建用来放置Calculator.apk的文件夹C:\goapk\system\app以及用来放置libsec-ril.so的文件夹C:\goapk\system\lib。

创建用来放置update-script文件的文件夹C:\goapk\META-INF\com\google\android。

创建一个名为update-script的文件,其内容如下(高亮部分):

1 show_progress 0.1 0
2
3 copy_dir PACKAGE:system SYSTEM:
4
5 show_progress 0.1 10
6

行1和行5:显示进度条
行3:复制刷机包中的system文件夹到Android的/system
注意:你应该在文件的最末尾多添加一个空行(也就是行6)

将C:\goapk压缩中的所有内容压缩为zip包(千万记住:是压缩goapk这个文件夹中的内容,不是goapk文件夹本身)

为goapk.zip签名
签名命令:java -jar signapk.jar certificate.pem key.pk8 goapk.zip update.zip
注意:你可以在这个帖子中找到为刷机包签名的教程和工具

将update.zip文件复制到SD卡中,然后手机进入recovery界面来刷入这个刷机包

进阶学习:(以下仅作参考,因实际情况不同,可能会有一定的出入。但是极度推荐学习本部分)
update-script 语法参考(在Android源码的recovery.c文件中定义):

copy_dir
语法:copy_dir <源目录> <目标目录> [<时间戳>]
描述:复制<源目录>中的内容到<目标目录>中。如果<源目录>中没有同名文件进行覆盖,那么<目标目录>中的原始内容会仍然存在不变。
示例:copy_dir PACKAGE:system SYSTEM:,这个命令会把刷机包中的system文件夹复制到手机的/system文件夹中

format
语法:format <根目录>
描述:格式化一个分区。
示例:format SYSTEM:,这个命令会格式化整个/system。注意:格式化时所进行的数据删除操作是不可逆转的。

delete
语法:delete <文件1> [... <文件N>]
描述:删除文件。
示例:delete SYSTEM:app/Calculator.apk,这个命令会删除手机system/app文件夹中的Calculator.apk文件。

delete_recursive
语法:delete_recursive <文件或目录1> [... <文件或目录N>]
描述:删除一个文件或递归删除某个文件夹(也就是包括该文件夹中的所有内容)
示例:delete_recursive DATA:dalvik-cache,这个命令会删除/data/dalvik-cache文件夹以及该文件夹中的所有内容。

run_program
语法:run_program <执行程序> [<参数> ...]
描述:运行一个刷机包中的外部程序。
示例:run_program PACKAGE:install_busybox.sh,这个命令会执行刷机包中的install_busybox.sh脚本(命令行)。

set_perm(本命令中涉及的数值,如有疑惑,请自行Google。uid=user id,gid=group id)
语法:set_perm <uid> <gid> <属性> <路径> [... <路径N>]
描述:设置某个文件或是指定的整个目录树的所有者和权限,就像是一个‘chmod’、‘chown’、以及‘chgrp’命令的集合体。
示例:set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh,这个命令会设置手机上system分区中etc/init.goldfish.sh文件的用户组为:shell;用户为:root;权限为:所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限。

set_perm_recursive(本命令中涉及的数值,如有疑惑,请自行Google。uid=user id,gid=group id)
语法:set_perm_recursive <uid> <gid> <文件夹属性> <文件属性> <路径> [... <路径N>]
描述:递归设置某个文件夹中所有内容的所有者和权限
示例:set_perm_recursive 0 0 0755 0644 SYSTEM:app,这个命令会递归设置手机上system/app文件夹以及其所有内容的用户组为:root;用户为:root;app文件夹的权限为:所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作;app文件夹下的所有文件的权限为:所有者可以进行读写操作,其他用户可以进行读取操作。

show_progress
语法:show_progress <小数> <持续时间>
描述:为下一个操作在屏幕上显示一个进度条,自动的根据<持续时间>指定的秒数来递增进度条状态(如果实际上进度条的推进是可以确定的,那就会更加迅速)。
示例:show_progress 0.1 0,这个命令是指,操作完成后,进度条前进0.1(10%)

symlink
语法:symlink <链接目标> <链接所在路径>
描述:创建一个符合链接(就像是 ‘ln-s’)。<链接所在路径>的格式类似于这样:根目录:路径, 但是<链接目标>则是指目标文件(而且位置可能是相对与链接所在路径的)
示例:symlink /system/bin/su SYSTEM:xbin/su,这个命令会为/system/bin/su在手机system分区的xbin文件夹下创建一个符号链接,名为su

对于根目录以及分区的定义(在Android源代码的root.c文件中定义)
根目录: Linux 块设备 /挂载点/ 文件系统 大小 描述
BOOT: /dev/mtdblock[?] / (RAM) Raw 内核、内存盘和引导配置。
DATA: /dev/mtdblock5 /data/ yaffs2 91904kb 用户、系统配置,软件配置以及软件(没有a2sd的话)
CACHE: /dev/mtdblock4 /cache/ yaffs2 30720kb OTA缓存,recovery/更新配置及临时文件夹
MISC: /dev/mtdblock[?] N/A Raw,[?]kb (等待添加)
PACKAGE: (相对于刷机包) N/A 刷机包的伪文件系统。
RECOVERY: /dev/mtdblock[?] / (RAM) Raw,[?]kb recovery和更新环境的内核和内存盘。类似于BOOT:。
SDCARD: /dev/mmcblk0(p1) /sdcard/ fat32 32MB-32GB TF卡。通常刷机包就放在这里。
SYSTEM: /dev/mtdblock3 /system/ yaffs2 92160kb 系统分区,静态且是只读的。
TMP: /tmp/ (RAM) 标准的Linux临时文件夹 在关机/重启时清空。

转载于:https://www.cnblogs.com/sdphome/archive/2011/09/23/2186298.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法: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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值