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…

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

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

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

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

Win8 IIS 安装和部署网站问题

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

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

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

仿新浪微盾客户端项目简介一

最经公司的项目需要实现类似于新浪微盾功能的功能,因此我把这个实战的demo的经历分享给大家。 新浪微盾是啥子玩意? 微盾是由新浪网推出的一款产生一次性动态密码的产品,可以用于新浪旗下各服务,包括新浪微博,新付通&a…

linux读取pdf文件字体,Linux有问必答:如何在PDF中嵌入LaTex中的所有字体

提问: 我通过编译LaTex源文件生成了一份PDF文档。然而,我注意到,并不是所有字体都嵌入到了PDF文档中。我怎样才能确保所有的字体嵌入在由LaTex生成的PDF文档中?当你创建一个PDF文件时,在PDF文件中嵌入字体是一个好主意。如果你不嵌…

CSS3 2D转换

CSS3 转换 通过CSS3转换,我们能够对元素进行移动、缩放、转动、拉长或拉伸。 它如何工作? 转换是是元素改变形状、尺寸和位置的一种效果。 你可以使用2D或3D转换你的元素。 浏览器支持 属性浏览器支持transform IE10、FireFox以及Opera支持transform…

然爸读书笔记(2014-5)----团队正能量

先说下题外话,今天下午吃烤肉,吃了2个小时,我擦啊,时间真心挺长,上面的图就是咯,你们嘴馋不咯。嘿嘿! 今天真的是快速阅读了一本书,很早以前买的,一直没时间来看。刚看了…

ssh密钥代理转发(ssh agent forwarding)

之前一直用SecureCRT登陆服务器A然后再跳到服务器B,某日突然需要从另一台可信任的机器C用ssh登陆,ssh的key已经复制好,所以登陆A没有问题,但是登陆B会出现Pubkey Unauthorization.仔细翻查SecureCRT的设置,发现有密钥代…

c语言程序编程线性方程,C语言编程求解线性方程

C语言编程求解线性方程 本 科 专 业 学 年 论 文题 目 : 线性方程组求解方法比较姓 名 郭 凤 专 业 计算机科学与技术专业 班 级 08 级本科(2 )班 指导教师 刘 晓 娜 完成日期:2010 年 1 月 8 日题 目 : 线性方程组求解方法比较摘 要目前在许…

EISCONN的故事

在这春风明媚的日子里,有位T同学很苦恼。忙碌了一整天,有个BUG愣是定位不出来。简单描述呢,现象是这样子的: 第一次处理是正常的,但是后续的处理就是报错。sendto()调用错误码是 EISCONN(已被连接&#xff…

c语言内循环,C语言循环控制语句

C语言循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。中文名C语言循环控制语句类 别while循环语句,do-while语句等目 地实现循环结构属 于计算机领域归 类编程语句基 …

同步,异步,多线程,你怎么看?

同步,异步,多线程,你怎么看? 原文:同步,异步,多线程,你怎么看?[原创]讲解同步与异步的帖子多如牛毛,个人的理解,简单地说同步就是串行,异步就是并…

openssl-1.0.0b - libssl 移植到ARM Linux

开发环境: ubuntu 10.04 arm-linux-gcc version 4.4.1 目标环境 友善之臂mini6410 linux-2.6.36 移植步骤 1.至官网下载最新的openssl,解压缩 2.cd进入openssl-1.0.0b目录 3.执行./Confiugre linux-elf-arm&#xff0c…

html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

JS仿QQ好友列表展开、收缩功能(第一篇)发布时间:2020-10-17 14:20:03来源:脚本之家阅读:96作者:erdouzhang效果图如下所示:html:我的好友张三李四...企业好友小明小红...黑名单哈哈...css:ul,h3 {padding: …

Visual Studio 选择相同变量高亮

前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高亮的设置,突然回来使用VS,感到各种不适应,顿时想到了一个词:矫情 呵呵,于是在网上找各种插件…

html是前段还是后端,javascript属于前端还是后端?

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。前端开发和后端开发的区别在于&#xff1a…

Linux查看设置系统时区

关于时区的概念,其实初中地理课已经涉及,很多人都多少了解一些,可能只是细节搞不太清楚。为什么会将地球分为不同时区呢?因为地球总是自西向东自转,东边总比西边先看到太阳,东边的时间也总比西边的早。东边…

SQL基础问题整理

在程序中,数据库操作是必不可少的部分,所以我们要备足数据库相关知识才能去应付程序中出现的种种问题。基于此,我特地在国外网站、博客上整理了一些问题,并附带了答案和解释、参考。为了保证“原汁原味”,我就保留了英…