linux rom打包工具,Android rom解包打包工具

7180ab23729bec355839d28238de7f6e.png87e1c988131b18153433b3ee069a8ef9.png

eMMC主要是针对手机和平板电脑等产品的内嵌式存储器,由于其在封装中集成了一个控制器,且提供标准接口并管理闪存等优势,越来越受到Android手机厂商的青睐,以eMMC为存储设备的android手机,其文件系统(system、data分区)一般采用ext4格式。如小米手机的线刷包:

bf3761c1e6b735d2566e3945b53a3d28.png

一.img解包

之前我在修改小米桌面中介绍过利用rom助手解包。

这里介绍另一个更方便实用的工具:windows平台的ext4_unpacker。

3094c1a628b7f961506a4b45f801cfae.png

直接选择需要解压的img镜像文件,然后extract所有文件即可。同样,解压出来后可对rom进行精简,删除一些不需要的app。

二.img打包

这里利用make_ext4fs来对解压出来的文件进行打包。

使用说明:将下载下来的make_ext4fs.exe拷贝到C:\WINDOWS目录下,其他dll文件,拷贝到C:\Windows\System32目录下。

af3912e330c7a7385ba959bc3d0d9c05.png

主要参数说明:

-l :表示最大的文件大小,受限于system或data分区的大小。

-a :表示Android的mount点,将img文件系统挂在到安卓手机的system/data文件夹下。

-S file_contexts:表示sepolicy的file_contexts,5.0及以上安卓系统存在file_contexts文件,该文件是对selinux文件系统的说明,在手机root目录下能找到。

-s:表示对img文件进行压缩,去除img文件系统空白部分,得到数据文件占用空间的真实大小。

-T:表示Unix时间戳,对img文件设置修改时间,可用在站长之家转换需要的时间戳。

:表示输出的文件名。

:表示输入的文件目录。

补充说明:

1)-l 中limit size大小单位为M,该值的大小受限于分区大小,如果制作出来的镜像大小大于该值,将会提示失败。对于分区的大小可以通过df命令获得。

24630f3fd807b951146eb32a82b5c71e.png

2)用pull命令对手机中的file_contexts文件进行提取

先查看该系统中是否有file_contexts文件,再pull出该文件。

OK,现在我们就可以对文件进行打包了。

d10247cd81d2c9feb86cd7983a8e0f6a.png5b438bc7f822229214b3ca43aab754ab.png

make_ext4fs -S file_contexts -s -l 3072M -a system system.img ./system

7f13ba75778ef0d9ab45974c6615e7ee.png

三.批处理脚本实现快速定制rom包

也许做过rom的都知道:

1.对于4.4系统的手机,如果要打入apk到system区,只需将apk复制到system/app下,对应apk的lib文件(.so文件)复制到system/lib下即可;如果要打入apk到userdata区,只需将apk复制到userdata/app下即可。

2.对于5.0及以上系统的手机,如果要打入apk到system区,需要将apk及对应的lib文件建在同一目录下,然后复制到system/app下(具体查看system/app下其他apk的目录格式),并且,在实践中,有的手机需要打入到system/framework中apk才能正常运行,不然闪退;如果需要打入apk到userdata区,同样只需将apk复制到userdata/app下即可。

几点说明:

1.由于需要解压出apk下的lib文件,而且,用winrar带的rar和unrar并不支持apk格式,所以用了好压的解压功能。将好压的安装目录配置到系统的path环境即可。这样就可以在命令行调用HaozipC命令,在安装目录下也有命令行的说明文档,具体可自行安装查看。

2.由于有的手机需要打入system/framework中apk才能正常启动,因此在批处理时加入手动选择是否打入。

3.对于系统分区限制大小,可以先df出,存入txt列表中,让脚本自动读取。如:

3e2e6f238b4b4a63c89cbd84a2b2ae35.png

4.实践中,5.0及以上系统,打入system区的apk可能不能包含中文名字。避免频繁更改,同样可以建一个txt文件,让脚本自动更改。如:

dfdde8fb756504c0fa9b41824414f2b1.png

5.对于5.0及以上系统请先pull file_contexts文件到当前目录。

批处理脚本如下:makeRom.zip(下载)

@echo off

title 定制rom包 by 小猴子jerry

echo -------------------------------------------------------------------------

echo 注意:请务必输入正确的安卓系统和底包编号,否则做包无效

echo 安卓系统(4.4/5.0)、底包编号(01等)

echo 安卓系统5.0及以上请输入5.0

echo -------------------------------------------------------------------------

pause

set /p version=请输入安卓系统版本号(4.4/5.0):

set /p var=请输入底包编号:

if exist .\sysApk set /p is_framework=是否需要打入apk到framework中(y/n):

echo ----------------请仔细核对,若输入有误请关闭程序重新输入-----------------

pause

if %version%==4.4 (

%打包system%

if exist .\system (

echo system.img正在制作中...

if exist .\sysApk (

echo 正在解压需要的.so文件...

for /f "delims=" %%a in ('dir /b/a-d/oN .\sysApk\*.*') do (

HaoZipC x .\sysApk\%%a -o.\syslib lib\armeabi\*.* -y -sn)

copy sysApk\*.* system\app

move syslib\lib\armeabi\*.* system\lib

rd/s/q syslib)

for /f "skip=1 tokens=1,2,3" %%i in (limit.txt) do (

if %%i==%var% make_ext4fs -s -l %%j -a system ./system.img ./system

)

echo system.img制作完成)

%打包userdata%

if exist .\userdata (

echo userdata.img正在制作中...

if exist .\userApk (

if not exist userdata\app ( md userdata\app )

copy userApk\*.* userdata\app)

for /f "skip=1 tokens=1,2,3" %%i in (limit.txt) do (

if %%i==%var% make_ext4fs -s -l %%k -a data ./userdata.img ./userdata

)

echo userdata.img制作完成)

if not exist .\system (

if not exist .\userdata (

echo 找不到system or userdata文件夹,请拷贝system或userdata到当前目录))

%处理update文件%

if not exist .\update.rom (

echo 找不到update文件,请拷贝update.rom到当前目录)

if exist .\update.rom (

ren update.rom update.zip

HaoZipC d -tzip update.zip -ri!images\system images\userdata -sn

if not exist .\images ( md .\images )

if exist .\system.img ( move system.img .\images)

if exist .\userdata.img ( move userdata.img .\images)

HaoZipC a -tzip update.zip .\images\ -sn)

ren update.zip update.rom

rd/s/q system

rd/s/q userdata

rd/s/q images

echo 定制rom包制作完成!!)

rem =========================================================================================================================

if %version%==5.0 (

%前提:从手机中pull出需要的file_contexts文件%

%打包system%

if exist .\system (

echo system.img正在制作中...

if exist .\sysApk (

echo 正在解压需要的.so文件...

for /f "tokens=1,2 delims=." %%a in ('dir /b/a-d/oN .\sysApk\*.*') do (

if %%a==usbhelp ( ren .\sysApk\usbhelp.apk com.service.usbhelper.apk

md .\syslib\com.service.usbhelper

move .\sysApk\com.service.usbhelper.apk .\syslib\com.service.usbhelper)

for /f "tokens=1,2 delims=:" %%i in (AppList.txt) do (

if %%a==%%i ( ren .\sysApk\%%a.apk %%j.apk

HaoZipC x .\sysApk\%%j.apk -o.\syslib\%%j lib\armeabi\*.* -y -sn

ren .\syslib\%%j\lib\armeabi arm

move sysApk\%%j.apk syslib\%%j)))

if %is_framework%==y ( xcopy/s/y syslib system\framework) else (

xcopy/s/y syslib system\app)

rd/s/q syslib)

for /f "skip=1 tokens=1,2,3" %%i in (limit.txt) do (

if %%i==%var% make_ext4fs -S file_contexts -s -l %%j -a system ./system.img ./system)

echo system.img制作完成)

%打包userdata%

if exist .\userdata (

echo userdata.img正在制作中...

if exist .\userApk (

if not exist userdata\app ( md userdata\app )

move userApk\*.* userdata\app)

for /f "skip=1 tokens=1,2,3" %%i in (limit.txt) do (

if %%i==%var% make_ext4fs -S file_contexts -s -l %%k -a data ./userdata.img ./userdata)

echo userdata.img制作完成)

del file_contexts

if not exist .\system (

if not exist .\userdata (

echo 找不到system or userdata文件夹,请拷贝system或userdata到当前目录))

%处理update文件%

HaoZipC d -tzip update.zip -ri!images\system images\userdata -sn

if not exist .\images ( md .\images )

if exist .\system.img ( move system.img .\images)

if exist .\userdata.img ( move userdata.img .\images)

HaoZipC a -tzip update.zip .\images\ -sn

ren update.zip update.rom

rd/s/q system

rd/s/q userdata

rd/s/q images

rd/s/q sysApk

rd/s/q userApk

echo 定制rom包制作完成!!)

pause

注意:

69d43305c872a2c5f2aec63bf16c99d2.png

目录设置为如下:

a04360c7cbcdff08e194d9d9ff7e9a68.png

运行bat:

通过本文的学习,又一次复习了常用的命令行命令,同时也希望本文所述对大家也有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

winform(C#)透明方法

1.设置窗体opacity属性: 2.窗体的BackColor和TransparencyKey属性设置相同的值: 2.加using System.Runtime.InteropServices;引用然后加上以下代码: [StructLayout(LayoutKind.Sequential)]public struct MARGINS{public int Left;public int…

ssh免密码登陆

1. 先去掉root登陆密码 passwd -d root 或者修改/etc/shadow 文件,将root那行,前两个冒号之间的加密过的密码去掉 2. 修改sshd_config文件 PermitEmptyPasswords yes

linux彻底卸载xfce,Ubuntu12.04LTS下如何安装和彻底卸载xfce4?

今天将Ubuntu12.04更新完了,用的网易的源,更新速度还是很给力的,平均500多K的下载速度。发现虚拟机上unity界面还是比较卡的,想换成gnome3.6试一下,结果rangerlee说xfce和lxde桌面很清爽,并且轻量占用内存少…

分布式缓存应用(转载的)

前言 Asp.Net中使用Couchbase——Memcached缓存入门篇 见http://www.cnblogs.com/aehyok/p/3436721.html 主要讲解Couchbase服务端的安装配置和客户端的引用调用,然后通过一个零配置的代码来完成最简单的代码实现调用。那么本次课先通过简单的配置文件进行配置&…

详细解析Linux /etc/passwd文件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。这个文件对所有用户都是可读的。但是Linux /etc/passwd文件中都有些什么内容呢? 它的内容类似下…

linux eclipse 头文件路径,Eclipse CDT标准库头文件设置

使用eclipse cdt开发C/C项目的时候,从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g头文件、符号之类的,但是在我用的slackware下却不行,需要手动添加标准库头文件路径/usr/include、/usr/local/include……&…

Jquery通过遍历数组给checkbox赋默认值

需求:有一个数组:(北京菜,粤菜),checkbox如下: 现在想通过遍历这个数组,使数组里包含的值,在checkbox选中 代码: var flavors new Array([北京菜 , 粤菜]); $.each(flavors,functio…

/etc/fstab和/etc/mtab的区别!

etc/fstab文件的作用 记录了计算机上硬盘分区的相关信息,启动 Linux 的时候,检查分区的 fsck 命令,和挂载分区的 mount 命令,都需要 fstab 中的信息,来正确的检查和挂载硬盘。 /etc/mtab文件的作用:先看它的…

linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...

1.Linux 链接概念Linux 链接分两种, 一种被称作硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln 命令产生硬链接。硬连接硬链接指通过索引节点来进行连接。再Linux的文件系统中,保存在磁盘分区中的文件不管…

php模拟post提交数据,用处很多,可用来网站的采集,登陆等等

1. [代码][PHP]代码 <?php//以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port "80") {//需要提交的post数据$argv array(cookie > array(user_login > $user_login, password > $password, _wp_http_referer…

关闭SQLite3中的journal暂存档

相信很多使用SQLite3当做数据库的人都会一个现象&#xff0c;那就是当SQLite3有做写入的动作时&#xff0c;SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢? 答案是用来Rollback &#xff0c;换句话说&#xff0c;就是当数据写入数据库有…

linux中gid和groups区别,linux用户与组管理

linux安全系统的核心是用户账户&#xff0c;每个使用者使用一个账户名及与该账户关联的密码登入linux系统。使用者对系统资源的访问权限取决于其登录时所用的账户。每个账户在创建时会被分配一个惟一的标识UID&#xff0c;用户权限便是根据UID来跟踪的。每个账户可以选择加入某…

Win8 IIS 安装和部署网站问题

安装IIS 比较win7的安装来说&#xff0c;多选了几个钩钩&#xff0c;不然会报错&#xff0c;偶就遇到这样的错误。 控制面板-》程序和功能-》启动和关闭windows功能&#xff0c;钩钩图例&#xff1a; 安装好iis后 在控制面板-》管理工具 目前只用过iis 信息管理器。 6.0 大概…

sqlite3 journal

sqlite3默认会开启journal&#xff0c;为了进行rollback。但是在突然断电的情况下&#xff0c;journal文件很容易就损坏了。 目前还没有发现数据库文件本身被损坏的情况。 一旦journal文件损坏&#xff0c;就没法打开数据库文件了。但是可以把journal机制关闭。 一旦journa…

linux 计划任务 实例,计划任务 cron 的配置和实例

1、计划任务概说&#xff1b;计划任务&#xff0c;是任务在约定的时间执行已经计划好的工作&#xff0c;这是表面的意思。在Linux中&#xff0c;我们经常用到 crond服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定…

产品经理们都是怎样成为产品经理的?

一百多个回答中发现很多人的答案讲得是做产品经理之前大家是做什么的或者产品经理是做什么的&#xff0c;这样又造成恶性循环让更多的人这样回答&#xff0c;不过问题本身的描述就有误导性&#xff0c;不怪回答者。我想问问题的人其实是想知道或者说想让别人知道&#xff0c;在…

QString与中文问题

QString 与中文问题2010-07-11 17:04(更新&#xff1a;本文的姊妹篇 Qt中translate、tr关系 与中文问题 )首先呢&#xff0c;声明一下&#xff0c;QString 是不存在中文支持问题的&#xff0c;很多人遇到问题&#xff0c;并不是本身 QString 的问题&#xff0c;而是没有将自己希…

在SharePoint 2010中创建网站的权限级别

转&#xff1a;http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能&#xff0c;使我们对权限的设置又提高了一个层次。SharePoint 2010的权限级别指的是可分配给用户或用户组的单个权限组。SharePoint 2010自带的权限级别有&#…

Qt 编码问题QTextCodec

一般在Window开发环境里&#xff0c;是GBK编码&#xff0c;在Linux开发环境里&#xff0c;是utf-8编码&#xff0c;关于编码的定义&#xff0c; 我就不这里多说了&#xff0c;网上有一大堆资料可以查看。 qt对默认的是unicode编码&#xff0c;在Window开发环境里&#xff0c;比…

linux suse11 nfs,suse11 nfsserver服务安装

1概述目的&#xff1a;因为suse11的nfs服务安装和suse10安装有许多不同之处&#xff0c;为了方便以后使用suse11的人使用nfs服务&#xff0c;特写此文档2安装说明A suse11默认不会nfsserver服务&#xff0c;需要安装nfs-kernel-server此包。suse10默认安装nfssever服务&#…