中兴u880刷机包包中的update-binary文件是怎么来的

享受安卓给我们带来的乐趣!
当前位置 :
> 安卓刷机卡刷包结构
安卓刷机卡刷包结构
很多安卓刷机爱好者都想自己亲手制作一个刷机包,可以随心所欲的添加与删除一些东西,但是由于对安卓刷机包的结果并不是十分的了解,导致无从下手,今天安卓后院()为大家详细介绍一下卡刷包的目录结构。
常见的安卓卡刷包结构
├─boot.img
├─splash.img
├─META-INF
│ &│ &CERT.RSA
│ &│ &CERT.SF
│ &│ &MANIFEST.MF
│ &└─com
│ & & &└─google
│ & & & & &└─android
│ & & & & & & & └─update-binary
│ & & & & & & & └─updater-script
└─system
上面既是安卓刷机卡刷包的常见的目录的树状结构,当然不同的机型会多多少少的有些增减。其实安卓刷机包中笔者认为最主要的就是system目录以及update-binary、updater-script、boot.img这几个文件,system目录中的文件会释放到手机的/system分区中,其中包含的是系统的核心文件以及一些系统自带的应用等。
boot.img是内核镜像文件。updater-script是安卓手机刷入系统时的脚本文件,由它来决定anroid需要刷入哪些内容,如何刷入,是安卓手机刷机必不可少的文件。而update-binary则是用来解释执行updater-script中的命令的二进制文件。
此外META-INF目录下的其它几个文件主要是对刷机包中的文件提供签名验证作用的,一般来说如果刷了第三方的recovery,这些文件都是可有可无的,但是建议大家使用签名工具加上,这样会显得我们做的刷机包比较正式一点。
splash.img文件有的刷机包里可能会看不到,splash.img主要包含了开机第一屏显示的图片,如果大家想要追求个性的话可以弄上,本站的安卓工具箱页面下也提供了开机第一屏制作工具。
剩下的app与data的目录也是可选的,通常情况下多数刷机包制作这会将一些想要预装的比较好的应用放到app目录下,data下则存放一些常用的数据文件等。后使用快捷导航没有帐号?
一步搞定
只需一步,快速开始
查看: 236|回复: 2
积分4328在线时间2711 小时分享阅读权限150主题UID5631994帖子精华0 战斗力0 点 技术17 点 金币8506 元 人气147 点 贡献2387 点 手机T-Mobile Vivacity注册时间最后登录
金币8506 元 手机T-Mobile Vivacity
首先来个AROMA的介绍吧
相必各位吊丝级的ROMer也对这项技术有些兴趣,毕竟比传统的recovery刷机界面,这个刷机环境可以说是革命性的。
本人因为对android源码编译方面没有什么研究,又不喜欢发一些二次定制的rom,觉得没什么意思,所以也没发过rom。
AROMA install是由XDA的大神amarullz创建的一个开源项目,这个项目主旨就是让安卓的刷机界面图形化,触摸化,用户自定义化。
自认为英文水平好的请前往XDA AROMA发布页,不用看这篇小白知识普及贴了:
关于aroma脚本:1,我们在给电脑安装系统的时候都会有很多选项可以供我们选择,为什么安卓手机不可以呢??现在我们有了aroma脚本,一切皆有可能。
2,你的recovery无需支持触摸操作,仅需含触摸驱动即可,而一般的recovery都是包含的,因此,只要你将你的设备recovery更新至最新,一般是可以无障碍支持aroma的。另外aroma仅支持ARM设备,对于X86设备无法支持。
3,对刷机者的好处,可以自己选择各种选项(前提是Rom制作者已经预设),有人需要纯净版的,有人需要完整版的,有人需要精简版的,通过aroma都可以实现。
4,对Romer的好处,好处大大滴有啊,作为一个非著名Romer,燕落也已经听厌了大家要求你在Rom中加入这个加入那个,也听厌了有人说想精简google服务包有人想精简自带软件等等,现在,有了aroma,天上霎时飘来五个字——“这都不叫事”!再有人说这个说那个,你可以自信的大声喊出来:要什么自己去选…选…选……选……选……!!!!
5,甚至,在某些情况下你还可以用一个
Rom包适配不同型号的手机,省时间、省带宽、还省了网盘空间呢不是?
6,amarullz也依照google对安卓的命名用花的名字来命名不同版本的aroma脚本,开头字母分别是ABCDE……这作者也真有意思
OK,下面就是用法了,给Romer看的
本帖隐藏的内容
1,简单地说,就是用aroma脚本换掉刷机包中的META-INF文件夹,特别需要注意的是,里面的update-binary-installer需要从你的原包中来(也就是从一个普通的这个机型的刷机包的META-INF文件夹中提取一个update-binary重命名为update-binary-installer放到aroma刷机包中)
2,根据Romer的需要来对aroma刷机脚本进行定制,包括界面文字,图标,字体等。需要修改的脚本为META-INF/com/google/android/aroma-config和同文件夹下的META-INF/com/google/android/updater-script。前者负责刷机时和用户直接交互的界面显示,后者就是负责具体执行。前者在用户做出选择时以临时文件形式保存在手机的临时目录中,选择完毕之后执行后者,后者在执行过程中读取临时文件,从而实现完整的个性化刷机过程。
我推荐使用notepad++来编辑这两个文件,其他文本编辑器亦可。
3,META-INF/com/google/android/aroma文件夹中是资源文件,界面主题、显示的图片、字体等都在里面,大家也可以按需定制,不再细说
4,不同手机的按键各异,如果想给aroma刷机包加入按键支持,需要先获取键值(默认对安卓设备标准按键都是支持的,音量键加减表示上下,电源键确认,菜单键弹出菜单,返回键返回上一级等等等,如果你需要对其他按键(比如小米手机的米键和其他部分手机的拍照键等)获取键值,可以使用原作者提供的工具。在recovery中刷入下面的包(不会刷入任何东西,不会对手机造成任何影响),刷入后会提示你按任意键获取这个键的键值,连续三次按下任意键按键则退出程序
5,获取到的键值需要按如下格式定义在aroma脚本的aroma-config中,放在最开头即可
#号后面为注释,不具有功能,不被运行
ini_set(&customkeycode_up&, &115&);#定义键值115的按键为向上选择
ini_set(&customkeycode_down&, &114&);#定义键值114的按键为向下选择
ini_set(&customkeycode_select&, &116&);#定义键值116的按键为确定键
ini_set(&customkeycode_menu&, &229&);#定义键值229的按键为菜单键
ini_set(&customkeycode_back&, &158&); #定义键值158的按键为返回键
大家根据自己的需要修改对应键值即可
6,从2.51版本开始,aroma无需校准屏幕参数了,直接是可以使用触屏的的,这里就不照顾使用2.51以下版本的Romer了,真有需要的可以单独问我,非常简单,一会儿就能给你讲清楚
7,aroma刷机过程中调用其他资源(图片、文本文件、字体)来进行显示,可以显示窗口、对话框、标题等,其中文本、图标可以使用预设主题实现,方便快捷。
8,如前所述,aroma-config和updater-script是通过临时文件进行“沟通”,临时文件目录/tmp/aroma-data/,aroma-config生成的临时文件格式为prop,
生成临时文件的命令为writetmpfile,举例如下
writetmpfile(&test.prop&,&key1=ok&);
意思是在/tmp/aroma-data/目录下生成一个test.prop文件,文件内容为
Rom制作者们都知道传统的updater-script所使用的一些命令,为了和aroma-config沟通并实现读取临时文件功能,updater-script还支持file_getprop命令,这个命令用来读取aroma-config生成的prop文件,获取其中的值来进行相应操作,
file_getprop(&test.prop&,&key1&);
就是获取example.prop这个文件中的key1等号右边的值,上例中则返回1
当然,还得用if语句以实现根据不同的值进行不同的操作。学过C语言的都知道语句结构为
其中“条件1”处自然是使用file_getprop命令获取值,执行动作1处就是传统的命令了,比如package_extract_dir、比如format等等,这个对大家都熟悉了,不在赘述
设计多个选项的可以使用多个if语句,比如
当然也可以使用if else语句,会者自会,不会的用上面的就行了,功能完全一样
9,来举一个相对完整的例子,我使用#来进行注释,#后面的内容不被运行,不具有功能
aroma-config中有如下命令
writetmpfile(& && & #创建并写入临时文件
&kernel.prop&,& && &#临时文件名称为kernel.prop
&snq =yes\n&+& && &#kernel.prop里面第一行内容为snq =yes,\n表示换行
&call.2way=no\n&& & #第二行内容为call.2way=no
对应的,在updater-script中有如下内容
file_getprop(&/tmp/aroma-data/kernel.prop&,&snq&) == &yes&&&#读取kernel.prop文件,判断snq的值是否为yes,如果为yes,则执行下面的内容
write_raw_image(&/tmp/boot.img&, &boot&); #安装内核
#语句结束(如果不为yes,什么都不做)
file_getprop(&/tmp/aroma-data/kernel.prop&,&call.2way&) == &yes&#读取kernel.prop文件,判断all.2way的值是否为yes,
Then# 如果为yes,则执行下面的内容
执行某动作
Else # 如果不为yes,则执行下面的内容
执行另一动作
这个例子大家应该都能看懂的吧
10,在aroma刷机过程中,aroma支持四种界面类型:向导界面、对话框、闪烁图片(用于显示动画等功能)、和安装界面,这四种都是可以由Rom制作者编辑的。还有菜单键弹出的选项,里面有工具、帮助和关于信息。这里是不能被修改的。
下面分别介绍
11,向导界面主要是用来给用户选择刷机选项的,这里的选项由Rom制作者提前设定。包括选项,返回键和下一步按钮。
向导界面可以使用以下几种控件实现不同功能
Checkbox:复选框,选择要或者不要
Selectbox:单选框,多选一
Textbox:文本框,用于显示文本,一般用来显示注意事项、刷机说明、更新日志等等内容,可以调用txt文件
Viewbox:显示文本,类似上面的,但是文本不可拖动,长度有限制
Agreebox:顾名思义就是同意则勾选,可以继续下一步操作,不同意则不选,无法进行下一步操作。用于刷机脚本前的安全事项说明等等
Menubox:用于多项选一,没有下一步按钮,点选后直接进入下一级菜单。通常用于安装模式的选择,比如精简模式、完整模式等。
12,对话框界面
向导界面是全屏显示的,对话框则是以弹出窗口形式显示的,何用之有??比如最后确认刷机之前进行再次询问:“你确定刷机了么?”一个确认按钮,一个取消按钮。或者显示警告“继续操作么?”。对话框界面支持一下三种控件
Alert:警告,弹窗限制文本长度,且只有一个确定按钮
Confirm:确认弹窗,有确认按钮和取消按钮。限制文本长度。确认返回值ture,取消返回值false
Textdialog:不限定文本长度,只有一个确定按钮,长文本可以滚动显示。
13,闪烁图片
显示或连续显示图片,可用作动态图片显示,图片居中排版,可以自定义图片闪烁间隔,张数等。通常放在aroma刷机包第一个界面,用于展示自己或者论坛或者团队的logo,一般用来耍帅。
14,安装界面
前面的一切都是浮云,到了这里才真正开始刷机了,也就是开始运行updater-script了,安装界面共三个部分,最上面是标题,中间是个文本框,显示刷机脚本(也就是我们通常刷机时recovery界面里刷机过程显示的文字)。最下面是进度条。
15,aroma刷机脚本支持的命令一览
setcolor – 设置界面颜色
ini_set – 设置aroma脚本的一些设定
calibrate – 校准触摸屏(如前所述,2.5.1及以上版本已经无需校准)
getvar – 获取变量
setvar – 设置变量
appendvar – Append string into variable
prependvar – Prepend string into variable
file_getprop – 读取prop文件中的值
readfile – 读取刷机包中的txt文本,根目录为刷机包zip
readfile_aroma – 读取aroma文件夹中的文本,根目录为META-INF/com/google/android/aroma
getdisksize – 获取分区总大小
getdiskfree – 获取分区剩余大小
getdiskusedpercent – 获取分区已用空间百分比
cmp – 证书对比大小( &, &, ==, &=, &=, != )
cal – 四则运算 ( +, -, /, * )
iif – Inline if#燕落没学过,sorry
if else – if else语句呗
pleasewait – 进行非常耗时的操作时用以显示等待窗口
writetmpfile – 上面都说过了这个哈哈
exit – 结束安装
17,下面分别介绍这几种命令及其用法
1)Setcolor:用处不大,我们不用单独设置,通过主题功能可以实现的,aroma-config开头可以使用theme(&miui&);这样的格式来直接使用miui文件夹内的主题
而aroma内置了四套主题,ics风格、Sense风格、miui以及miui4四种风格的主题。
2)ini_set:通过这个功能可以设定一些内容,用的时候直接调用即可,用处依旧不大,因为aroma也是预设好的,大家可以自行修改aroma/langs/cn.lang(这是中文的,同文件夹内其他lang文件是其他语言的,不予理会),实际使用时可以在aroma-config中通过loadlang(&langs/cn.lang&);来直接调用
3)Theme:上面已经讲过了,直接调用即可
4)Getvar:这个有点意思,举个简单例子,如果你在aroma-config中通过ini_set定义了rom版本变量,rom_version,比如aroma包中的例子
ini_set(&rom_version&,& & &2.56&);
那么在后面的刷机界面中需要再次提到rom版本的话,可以直接使用getvar(“rom_name”)来代替2.56,这样的好处就是,以后更新Rom需要修改ini_set(&rom_version&,& & &2.56&);
这里面的版本号就可以了,其他各处引用在显示时候都会更改。
5)setvar:这个可以自定义一些变量用来满足各位的需要,格式参照getvar,用处不大,不详述。
6)appendvar和prependvar两个我自己没有研究,希望有了解的可以一起讨论
7)file_getprop:前面已经介绍过了具体使用格式可以参照示例包,prop命令与其类似,只不过prop命令的路径根目录在/tmp/aroma-data/。也就是说file_getprop(&/tmp/aroma-data/custom.prop&, &item.1.1&)与prop(&custom.prop&, &item.1.1&)是等效的
8)zipprop:和上面类似,执行路径根目录是刷机包根目录(也就是可以读取刷机包内任意目录下的文件)
9)resprop:根目录在META-INF/com/google/android/aroma/
10)sysprop, property_get:这两条命令是读取手机当前Rom的(不是正在刷的这个Rom的)system/build.prop内的值的,举例
sysprop(&ro.product.board&)
表示读取当前手机的基带版本
11)writetmpfile前面已经介绍了,根目录是/tmp/aroma-data/,举例
writetmpfile(&test.txt&, &This is test text&);表示在/tmp/aroma-data/test.txt文件内写入”This is test text”这句话
12)readtmpfile 和上面相对,这个是读取的。
13)write 和writetmpfile类似,根目录是手机根目录
14)read 与上面相对,读取的
15)zipread 读取刷机包内的文件,根目录是刷机包zip,
16)resread 也是读取文本,根目录是META-INF/com/google/android/aroma/
zipread(&META-INF/com/google/android/aroma/text.txt&)和resread(&text.txt&)是等效的
17)ziptotmp和restotmp表示复制文件到tmp目录内,前者的根目录为刷机包zip,后者为META-INF/com/google/android/aroma/,ziptotmp(&AK/busybox&, &busybox&);表示把刷机包zip内的AK文件夹内的busybox文件拷贝到/tmp/aroma-data/目录内。restotmp(&busybox&, &busybox&);表示把META-INF/com/google/android/aroma/busybox拷贝到/tmp/aroma-data/内
18)zipexec和resexec表示从刷机包中解压文件到临时目录并赋予权限然后运行,是个连续的过程。自然只能运行sh脚本了,两者区别也是根目录不同,不做详细讨论了
19)run_program,和exec也是执行可执行文件。也不做详细讨论了。
以上只是抛砖引玉,让大家对aroma刷机脚本有个初步了解。下面大家可以直接下载原作者包刷入对比分析了,同时需要阅读分析aroma-config和updater-script,多刷几遍,多看几遍就能理解了。包中的示例非常详细,并且我已经用中文在关键处进行了注释并对部分内容进行了汉化,一边刷一边看aroma-config和updater-script这两个文件是完全可以掌握其使用的。
这里做一点小提醒,aroma-config中多选项并列时候记得最后一项后面是没有逗号的。否则会刷入失败。
另外用不到的资源,比如主题,比如lang文件,都是可以删掉的。想更美观的也可以自己替换字体、主题中的图片等等的。
说实话我也整不太明白
积分10696在线时间4445 小时分享阅读权限150主题UID6073832帖子精华0 战斗力0 点 技术99 点 金币31335 元 人气1330 点 贡献7440 点注册时间最后登录
如果遇到链接失效请私信或者给我留言哦~
金币31335 元
神器既视感
________________
积分752在线时间330 小时分享阅读权限30主题UID3581082帖子精华0 战斗力0 点 技术0 点 金币2024 元 人气0 点 贡献701 点 手机htc g21注册时间最后登录
, 积分 752, 距离下一级还需 448 积分
金币2024 元 手机htc g21
好东西,收藏了
安智版主勋章
安智版主勋章
安智帅哥勋章
安智帅哥勋章
安智全勤勋章
签到满一百天即可申请
Powered by后使用快捷导航没有帐号?
一步搞定
只需一步,快速开始
查看: 1374|回复: 35
积分1187在线时间700 小时分享阅读权限30主题UID4032669帖子精华0 战斗力0 点 技术0 点 金币1571 元 人气75 点 贡献568 点注册时间最后登录
, 积分 1187, 距离下一级还需 13 积分
金币1571 元
小白杨出品 适用于小白,高手掠过 很多人都对制作刷机包非常感兴趣,也有很大部分已经实践,也有些实践了却越不过update-binary这个槛。
为了为更多初学者解惑,写了这篇文章。
一般初学者都是从用厨房开始作rom,但往往大部分教程都说用厨房做好后,直接刷入即可,但其实我们直接刷入时,一般都会出现错误,无法刷入。这些教程不知害惨多少热血的小白。最关键的update-binary他们只字不提,这是很具有误导性的。
制作rom最关键的就是updater-script脚本和update-binary二进制可执行文件,今天就只讲update-binary,因为我发现这种教程比较匮乏。
为什么厨房制作好rom后一般会刷机失败呢,这涉及到updater-script脚本和update-binary,下面回复可见:邪恶吧,呵呵
本帖隐藏的内容笼统的说update-binary就是为updater-script脚本的解释执行提供一些函数的支持,比如format,mount等等。而update-binary提供的函数支持是以函数调用即函数名+形參的形式呈现给调用者,(学过c的都知道)。我们在updater-script脚本调用这些函数时只需根据函数名即实参即可。
简而言之,我们就可以这样理解,要做好刷机包,一定要确保updater-script脚本中语法的正确,这就必须要知道update-binary提供的函数接口。
下面以一段的update-binary源码为例进行分析,以下为注释
// format(fs_type, partition_type, location,mount_point)
// fs_type=&yaffs2& partition_type=&MTD& location=partition fs_size=&bytes& mount_point=&location&
// fs_type=&ext4& partition_type=&EMMC& location=device fs_size=&bytes& mount_point=&location&
// if fs_size == 0, then make_ext4fs uses the entire partition.
// if fs_size & 0, that is the size to use
// if fs_size & 0, then reserve that many bytes at the end of the partition
我们发现,format函数提供了4个接口,fs_type, partition_type, location, fs_size, mount_point分别代表文件系统类型如ext4,存储设备类型如emmc,位置,即类似/dev/block/mmcblk0p19,然后是挂载点,如/system,
这样在updater-script中调用就是format(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&, &0&);现在懂了吧,
但是不同源码编译出来的update-binary的函数接口不同,我只以4个接口的为例,我也碰到过只有三个接口的,比如format(&ext3&, &MTD&, &/system&);
所以问题就在这,我们一般经过厨房优化的一般情况下format函数调用由
format(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&, &0&);
format(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&);显然错误,因为update-binary提供函数调用时有如下语句
Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) {
if (argc != 4) {
return ErrorAbort(state, &%s() expects 5 args, got %d&, name, argc);
他就是用于统计接口个素的,argc != 4表示接口个素不为4,就终止。故而无法刷入。
其他函数mount,delete,set_perm等类似。
总之不同源码编译出来的update-binary接口不同,这就要根据接口修改updater-script脚本,
以上为原理部分,
下面讲讲方法,其实我们不必懂得源码,我们只关心函数接口就行了,一般用厨房定制rom后,我们需用原来的rom和定制后的rom中的updater-script脚本(用notepad++,别用记事本之类的)进行函数接口对比,然后修改即可。
下面实战,
下面是厨房优化后的部分代码,我看优化前的脚本已经知晓format有四个接口,但优化后只有三个,可做如下修改
format(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&); 修改后format(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&, &0&);
mount(&ext4&, &EMMC&, &/dev/block/mmcblk0p19&, &/system&);
package_extract_dir(&system&, &/system&);
----中间略去一部分--------------------------------------
set_perm_recursive(0, 0, , &/system&);
set_perm_recursive(0, 0, , &/system/etc/init.d&);
set_perm_recursive(0, , 0755, &/system/bin&);
set_perm(0, , &/system/bin/diag_mdlog&);
set_perm(0, , &/system/bin/iptables&);
set_perm(0, , &/system/bin/netcfg&);
set_perm(0, , &/system/bin/ping&);
set_perm(0, , &/system/bin/run-as&);
set_perm(0, , &/system/bin/tc&);
set_perm_recursive(, , &/system/etc/bluetooth&);
set_perm(0, 0, 0755, &/system/etc/bluetooth&);
set_perm(, 0640, &/system/etc/bluetooth/auto_pairing.conf&);
set_perm(, 0444, &/system/etc/bluetooth/blacklist.conf&);
set_perm(, 0440, &/system/etc/dbus.conf&);
set_perm(, 0550, &/system/etc/dhcpcd/dhcpcd-run-hooks&);
set_perm(0, , &/system/etc/init.goldfish.sh&);
set_perm_recursive(0, 0, , &/system/etc/ppp&);
set_perm_recursive(0, , 0755, &/system/xbin&);
set_perm(0, , &/system/xbin/busybox&);
symlink(&/system/xbin/busybox&, &/system/bin/busybox&);
run_program(&/system/xbin/busybox&, &--install&, &-s&, &/system/xbin&);
set_perm(0, 0, 06755, &/system/xbin/su&);
symlink(&/system/xbin/su&, &/system/bin/su&);
set_perm(0, , &/system/xbin/busybox&);
symlink(&/system/xbin/busybox&, &/system/bin/busybox&);
run_program(&/system/xbin/busybox&, &--install&, &-s&, &/system/xbin&);
set_perm(0, 0, 06755, &/system/xbin/librank&);
set_perm(0, 0, 06755, &/system/xbin/procmem&);
set_perm(0, 0, 06755, &/system/xbin/procrank&);
set_perm(0, 0, 06755, &/system/xbin/tcpdump&);
show_progress(0.);
show_progress(0.);
package_extract_file(&boot.img&, &/dev/block/mmcblk0p16&);
show_progress(0.);
package_extract_file(&splash.img&, &/dev/block/mmcblk0p18&);
package_extract_file(&qcsbl.mbn&, &/dev/block/mmcblk0p2&);
package_extract_file(&fat.bin&, &/dev/block/mmcblk0p13&);
package_extract_file(&qcsblhd_cfgdata.mbn&, &/dev/block/mmcblk0p1&);
package_extract_file(&OEMSBL.MBN&, &/dev/block/mmcblk0p3&);
package_extract_file(&EMMCBOOT.MBN&, &/dev/block/mmcblk0p15&);
show_progress(0.);
assert(package_extract_file(&boot.img&, &/tmp/boot.img&),
write_raw_image(&/tmp/boot.img&, &boot&),
delete(&/tmp/boot.img&)); assert到这里的 这部分为厨房加进去的我们将之删除,删除后为show_progress(0.);
unmount(&/system&); unmount(&/system&);
至此就可以刷入了,当然也许你会碰到一些其他问题,但这不是今天我讲的
内容。游客,如果您要查看本帖隐藏内容请或点击感谢按钮
<p id="rate_6885" onmouseover="showTip(this)" tip="热心解答,加分奖励!&金币 + 5 元
贡献 + 5 点
人气 + 5 点
" class="mtn mbn">
积分8715在线时间5162 小时分享阅读权限55主题UID5786758帖子精华0 战斗力0 点 技术20 点 金币3182 元 人气796 点 贡献4298 点注册时间最后登录
, 积分 8715, 距离下一级还需 3285 积分
金币3182 元
沙发,学习了。这个及时
&-sina_sign,,80fac744,4-&
积分1187在线时间700 小时分享阅读权限30主题UID4032669帖子精华0 战斗力0 点 技术0 点 金币1571 元 人气75 点 贡献568 点注册时间最后登录
, 积分 1187, 距离下一级还需 13 积分
金币1571 元
& && && && && & 来坐板凳
积分410在线时间92 小时分享阅读权限20主题UID7572779帖子精华0 战斗力0 点 技术0 点 金币649 元 人气9 点 贡献435 点注册时间最后登录
, 积分 410, 距离下一级还需 290 积分
金币649 元
谢谢楼主分享。
积分973在线时间330 小时分享阅读权限30主题UID6152280帖子精华0 战斗力0 点 技术1 点 金币843 元 人气29 点 贡献986 点 手机IM-A820L注册时间最后登录
, 积分 973, 距离下一级还需 227 积分
金币843 元 手机IM-A820L
。。。。。。。。。。,。
在这个薄情寡义的年代,想要别人念念不忘,只有欠钱不还
积分1187在线时间700 小时分享阅读权限30主题UID4032669帖子精华0 战斗力0 点 技术0 点 金币1571 元 人气75 点 贡献568 点注册时间最后登录
, 积分 1187, 距离下一级还需 13 积分
金币1571 元
卍卐卍卐卍 发表于
请问楼主会移植rom吗?你学会了再自己写教程吧,这样的教程能学会吗?你是好心,但是转过来没多大用啊。
,..这我还是真的不会&&我见有的人想学有找不到教程 就代找了
积分1513在线时间1051 小时分享阅读权限35主题UID3564405帖子精华0 战斗力0 点 技术0 点 金币1143 元 人气1 点 贡献769 点 手机IM-A860S注册时间最后登录
, 积分 1513, 距离下一级还需 287 积分
金币1143 元 手机IM-A860S
积分1179在线时间619 小时分享阅读权限30主题UID31967帖子精华0 战斗力0 点 技术0 点 金币4339 元 人气5 点 贡献865 点注册时间最后登录
, 积分 1179, 距离下一级还需 21 积分
金币4339 元
谢谢楼主分享。
积分1341在线时间624 小时分享阅读权限35主题UID3534218帖子精华0 战斗力0 点 技术1 点 金币1815 元 人气65 点 贡献1058 点 手机c8810注册时间最后登录
, 积分 1341, 距离下一级还需 459 积分
金币1815 元 手机c8810
积分41在线时间17 小时分享阅读权限10主题UID8646916帖子精华0 战斗力0 点 技术0 点 金币51 元 人气0 点 贡献39 点注册时间最后登录
, 积分 41, 距离下一级还需 9 积分
谢谢楼主。
双子座勋章,申请勋章需要扣除200金币
安智全勤勋章
签到满一百天即可申请
Powered by

我要回帖

更多关于 中兴u880刷机包 的文章

 

随机推荐