联想x2-to上出现extmodemlog该怎么办 我手机也不能extjs3升级extjs4了!

查看: 30013|回复: 98
史上最全安卓扫盲及进阶教程【持续建设中,十楼连发】小白、小菜必看,老鸟更应该看
该用户从未签到
本帖最后由 鱼儿哥帅 于
19:34 编辑
& && &虽然现今安卓系统已成为众多手机以及平板电脑的主流操作系统,市场占有率已跃居全球首位。但仍有许多机油才刚刚接触和使用安卓系统产品,因此特为大家作一个安卓扫盲教程。而许多早已接触和使用过安卓系统的机油,可能限于时间或技术局限,长期想对系统进行DIY而苦求无门,只能被动刷一些自己并不是非常喜欢的ROM,因此,也在这里为大家尽可能的多介绍一些系统DIY的技术和方法。
& && &其中一些是我个人研究过的,可以为大家解答一些细节问题,也有些自己不是很懂,是转贴来的,如果机油有疑问,我尽量想办法找大神为大家答疑。也欢迎各路大神和机油交流、讨论!
对系统DIY有基础和各方面有经验的朋友们,也热烈欢迎指导和开贴讨论!
想了下,大致把教程分为以下几部分:
第一部分:安卓系统的起源及发展介绍;
第二部分:安卓系统的构架及功能介绍;
第三部分:安卓系统boot部分DIY介绍;
第四部分:安卓系统system部分DIY介绍;
第五部分:安卓系统其他介绍(汉化和美化等教程)。
& && && && && && && && && && && && && && && &&&第一部分&&安卓系统起源及发展介绍
  中文名:(非官方) 安致 (官方)注:Google 日收购Android公司得到手机巨头摩托罗拉的支持,摩托罗拉2010年放弃其他的(包括自家的Linux和UIQ)只支持Android。Android的特色业务是,之后Google在其基础上发展了Android业务。在Android发展的过程中,摩托罗拉付出的是核心代码,Google付出的是公关和品牌效应,当然还有它的google app,但是Google掌握了Android Market以及通过android google apps获得的大量用户。Android一词最早出现于作家在1886年发表的科幻小说《未来夏娃》中。他将外表像人的机器起名为Android。
   Andy Rubin创立了两个手机操作系统公司:Danger和Android。Danger 5亿美元卖给微软,2010年成为了Kin,Android4千万美元卖给Google。 Android是Google于日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,是基于Linux开放性内核的操作系统,是Google公司在日公布的。早期由原名为&Android&的公司开发,谷歌在2005年收购&Android.Inc&后,继续对Android系统开发运营它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。 Google通过与软、硬件开发商、设备制造商、电信运营商等其他有 关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。 Android 作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正在使用各种基于 Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。
  2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括的HTC(第一台谷歌的手机G1由HTC生产代工)、三星、韩国原道、美国摩托罗拉、索尼爱立信等,厂商如:首派(A101、A100、A80、A60S及未上市的A70),魅族(M9),华为、中兴、联想、蓝魔等。
Android操作系统版本Android 1.1  日,由HTC代工生产T- Mobile定制的HTC G1正式面世,Android系统终于面向世人。作为全球首款使用Android操作系统的手机,该机支持WCDMA/HSPA
网络,并支持Wi-Fi。
1.jpg (23.6 KB, 下载次数: 131)
09:33 上传
Android 1.5  该版本又叫 “Cupcake”, 这是第一个主要版本,发布于 2009 年 5 月. 这个升级之后,Android 表现出来的能力才真正吸引了开发者的目光。 用户界面得到了极大的改良,并且增添了以下功能:
2.jpg (15.5 KB, 下载次数: 127)
09:33 上传
Android 1.6  搭载Android 1.61.5 的 HTC Hero 获得了意想不到的成功。Android 最终获得了非 Android 用户的关注,并且也让竞争者苹果和微软更加警惕了。Android 1.6 “Donut” 2009 年 9 月发布。 这个版本包含了:
3.jpg (19.85 KB, 下载次数: 130)
09:33 上传
Android 2.0/2.1  Android 2.0/2.1: 2009 年 10 月 26 日,又一个主要版本升级以创纪录的速度放出。这次,大版本升级到了Android 2.0/2.1 “Eclair.” 它包含:
4.jpg (20.35 KB, 下载次数: 120)
09:33 上传
Android 2.0.1 SDK 于 2009 年 12 月 3 日 发布,之后是2010 年 1 月 10 日的 2.1 版本。很多用户和围观群众可能会奇怪:“为什么 Android 会用甜点作为它们系统版本的代号?”,这个命名方法开始于 Andoird 1.5 发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照字母数序:小蛋糕,甜甜圈还有松饼。之前人们预计 2.2 版本的代号会是“馅饼”,但这个被最终证明是错误的,“FroYo”(冻酸奶)才是 Android 2.2 这个伴随 Google Nexus One 发布的新版的最新代号。
Android 2.2  该版本名字叫 “Froyo”,中文代号称“冻酸奶”,这一版本包含大量让其他手机用户垂涎三尺的更新,包括了:
5.jpg (61.22 KB, 下载次数: 121)
09:33 上传
Android 3.0 (Honeycomb)
谷歌在日发布了专用于平板电脑的android
3.0系统,它带来了很多激动人心的新特性。这是首个
基于Android的平板电脑专用操作系统。新功能如下。
1. 多任务处理:可在桌面中方便使用所有开放
性应用软件。
2. 桌面工具:可建立在数据合成基础上,正如
在桌面小窗口中可以同时设置多种应用软件。此外,
还有不同的桌面工具,包括竖屏,横屏以及滚动屏。
3. 通知系统:在屏幕右下方会跳出通知短消息
。消息短信中可包括多种数据,例如用户朋友通过
Iming发送消息时的头像照片。此外用户还可以通过该
功能快速访问应用软件,如媒体播放器等。
4. 硬件加速:通过简单添加一行代码,2D硬件
加速可被使用在现在的Android应用软件上。
5. 3D功能:有新的3D图像引擎功能
Renderscript,该功能由3D公司War Drum Studios负
6. 视频通话:设有前置摄像头。可通过Google
Talk工具支持视频通话。
8)Android 3.1
日在Google I/O开发者大会宣布发布。新
版本最大的改变是将Android手机系统跟平板系统再次
合并,从而方便开发者。具体更新内容如下。
1. 支持基于android Market的电影租赁业务,
可以通过自身的显示器或在更大的屏幕上进行观看。
2. 全面支持的Adobe Flash Player 10.2,提升
网页Flash的显示性能。
3. 支持调整部件大小,方便用户进行自定义主
4. 支持键盘,鼠标,游戏手柄,数码相机等USB
外围设备和配件。
5. 支持蓝牙扩展功能,可以通过Google talk
进行视频通话。
6. 支持图片传输协议,支持多种USB设备直接导
入数据到平板中,而无需电脑支持。
9)Android 3.2
谷歌日发布了Android 3.2操作系统,
Google为Android3.2增加了屏幕分辨率缩放兼容的新
功能。Android 3.2不会带来许多的新功能,只是一个
BUG修复更新,让平板机运行更稳定。3.2也将会成为
Honeycomb的最终版本。跟新内容包括。
1. 错误修复和硬件加速优化
2. 新版本的movie studio,Movies和Music
3. 桌面小部件自由缩放
4. 手机应用缩放兼容,SD卡支持,7英寸平板和
高通处理器获得支持。
众所周知,安卓4.0版本(冰淇淋)即将全面问世,目前已经有部分手机发布并搭载了该版本,不过貌似目前还不完善。有待考验
Android系统优势
  (1)开放性
  在优势方面,Android平台首先就是其开放性,开
发的平台允许任何移动终端厂商加入到Android**中
来。显著的开放性可以使其拥有更多的开发者,随着
用户和应用的日益丰富,一个崭新的平台也将很快走
  开放性对于Android的发展而言,有利于积累人气
,这里的人气包括消费者和厂商,而对于消费者来讲
,最大的受益正是丰富的软件资源。开放的平台也会
带来更大竞争,如此一来,消费者将可以用更低的价
位购得心仪的手机。
  (2)挣脱束缚
  在过去很长的一段时间,特别是在欧美地区,手
机应用往往受到运营商制约,使用什么功能接入什么
网络,几乎都受到运营商的控制。自从iPhone上市,
用户可以更加方便地连接网络,运营商的制约减少。
随着EDGE、HSDPA这些2G至3G移**络的逐步过渡和提
升,手机随意接入网络已不是运营商口中的笑谈。
  (3)丰富的硬件
  这一点还是与Android平台的开放性相关,由于
Android的开放性,众多的厂商会推出千奇百怪,功能
特色各具的多种产品。功能上的差异和特色,却不会
影响到数据同步、甚至软件的兼容。好比你从诺基亚
Symbian风格手机一下改用苹果iPhone,同时还可将
Symbian中优秀的软件带到iPhone上使用、联系人等资
料更是可以方便地转移。
  (4)开发商
  Android平台提供给第三方开发商一个十分宽泛、
自由的环境。因此不会受到各种条条框框的阻挠,可
想而知,会有多少新颖别致的软件会诞生。但也有其
两面性,血腥、暴力、**方面的程序和游戏如何控
制正是留给Android难题之一。
  (5)无缝结合的Google应用
如今叱诧互联网的Google已经走过10年度历史。从搜
索巨人到全面的互联网渗透,Google服务如地图、邮
件、搜索等已经成为连接用户和互联网的重要纽带,
而Android平台手机将无缝结合这些优秀的Google服务
Android系统在手机上表现出的缺陷
  每一款手机都有缺陷,每一个操作系统也不是没
有BUG。即使是IPHONE4也有许多不尽如人意的地方。
  一、Android系统手机泄密 信息时代很严重
  二、拨号后自动挂断电话 通话BUG频繁出现 
  三、对硬件配置要求高 制造成本增加 
四、系统费电严重 安卓手机续航不足 
五、系统计算器计算有偏差 
国内Android系统手机生产商
HTC 魅族M9 天语W700 华硕 联想 HKC Pearl(唯一正
式销售的Windows和Android系统双系统手机)华为 中
该用户从未签到
本帖最后由 鱼儿哥帅 于
11:48 编辑
& && && && && && && && && && && && &&&第二部分:安卓系统的构架及功能介绍
Android是基于Linux内核的手机操作系统,它的系统构架主要分为三个层面。内核层、系统库、应用。我们从最下方的底层往上方**开始分析。
一、Linux Kernel内核层
&&包含了显示驱动、摄像头驱动、蓝牙驱动、闪存驱动、IPC管道通讯驱动、USB串口驱动、键盘驱动、Wifi无线驱动、音频驱动和电源管理驱动,当然最下层是Linux系统核心驱动主要协调CPU处理和内存管理。
&&二、Libraries系统库
Surface Manger管理库、媒体播放库、SQLite数据库引擎、OpenGL ES图形引擎、FreeType引擎、Webkit浏览器引擎、SGL图形引擎、SSL安全套接字层引擎、Libc库以及Android Dalvik虚拟机运行库。
三、应用框架库
&&这个层面主要是系统管理类库,设计Activity Manger显示管理、Windows Manger窗口管理、Content Providers内容提供、View System显示系统基类、Notification Mnager消息通知、Package Manger程序包管理、Telphony Manger电话管理、Rescource Manger资源管理、Location Mnager定位管理和XMPP服务。最终通过这些管理类开发出实际的,如Home桌面、Contacts联系人、Phone拨打电话、Browser浏览器等
&&最终的Android系统框架图如下:
842.jpg (43.34 KB, 下载次数: 123)
11:46 上传
该用户从未签到
本帖最后由 鱼儿哥帅 于
12:02 编辑
& && && && && && && && && && && && && &第三部分:安卓系统boot部分DIY介绍
由于不同的机型的boot.img各不相同,本文仅以N600+的boot.img举例,但其他机型如何打包,也会有所涉及。总之,在看完本文后,诸位完全可以自行修改各机型的boot.img。毕竟,android都是同根同源的。正如四则运算数学题,原理在手,任它千变万化,也无非是加减乘除,结果不同罢了。
&&废话不说,正式开始。
&&一如本人风格,在完成一件事之前,先要对它有一定的了解,然后才会下手,不然就是狐狸抓刺猬--无从下手了。
&&1.要修改boot.img,那么就需要了解它的格式。在各种查阅之后,确定了android系统的boot.img格式如下: +-----------------+| boot header& &&&| 1 page+-----------------+| kernel& && && & | n pages+-----------------+| ramdisk& && && &| m pages+-----------------+| second stage& & | o pages+-----------------+n = (kernel_size + page_size - 1) / page_sizem = (ramdisk_size + page_size - 1) / page_sizeo = (second_size + page_size - 1) / page_size0. all entities are page_size aligned in flash1. kernel and ramdisk are required (size != 0)2. second is optional (second_size == 0 -& no second)
解释一下,以上一大段代码的意思是什么呢?
就是说boot.img文件分成4大块,第一块占1页大小,存放的是boot头部信息。
第二块,是kernel(即内核)部分,占n页,这个n是多大呢?这得由系统内核(kernel)的实际大小而定。算式是n=(kernel_size+page_size-1)/page_size。
这个算式为什么是kernel长度加上页长(page_size)再除以页长呢?很简单,问个问题,一个盒子装10张卡片,那么,11张卡片需要多少个盒子呢?答案是2个。
第三块,是ramdisk(即内存盘)部分,系统在启动时,会把这部分先加载到内存中执行,继而完成整个系统的加载。占m页,同样,m由ramdisk的实际大小而定。
第四块,这个应该是绝大部分手机android系统都不需要的,略过。当然,即便有,同样对待就行了。
最后,可能有人会问了,在上面多次提到了页长(page_size),那么这个页长究竟是多少?抱歉,在分析之前,具体多少我也不知道。
唯一可以确定的是,它会是1K(即1024个字节的整数倍),
首先是我们的目的是什么?是要开启app2ext。从android系统的方面来说,用户安装的程序,是安装到/data目录下的(普通程序是/data/app),程序产生的缓存数据,也是存放在/data目录下。
很多童鞋们,总喜欢安装很多很多软件啊游戏什么的,不管用得着用不着,这样一来,问题来了。
手机是有成本的啊,手机的“硬盘”是有限的,不可能大量安装软件。那么怎么办呢?就有聪明人(显然NOT ME)想了,为什么不将/data目录下的重要目录挂载到SD卡中呢?&&
系统中依然有着/data目录,/data目录下的文件结构也不变。
只是存放的位置,从手机的“硬盘”改成了SD卡。这样,只要SD卡足够的大(笑),那么,理论上就可以无限装软件了。
显然,对于大多数知足的童鞋们来说,只需要一定的空间,来安装一定量的软件就够了。
其次是,我们需要修改什么?说起来其实很简单,我们需要“欺骗”android系统,让它把你的SD卡的ext分区当成/data下的目录。现在,可能很多童鞋们,都想到了一个名词--“快捷方式”。& &正如WIN下有快捷方式,在LINUX下,支持另一种叫链接的强大工具。它可以为我们达成所需的目的。
&&这样一来,问题就简单了。我们只要在android启动过程中,将sd卡中的ext分区挂载到内存盘中的某个目录下(总不能挂载到内核里吧?笑~)。然后,将它链接到/data目录下就行了。然后,系统在安装程序的时候,就会不知不觉的,将程序存放在EXT分区中了。并且我们可爱的系统永远不会发现,它被骗了~
再次是,改哪?各种查阅,查什么?android挂载ramdisk下的各文件系统是在什么时候进行的?答案出来了,init.rc。那就改它吧。
3.我们从第一步的结构可以知道,boot.img的主体是kernel和ramdisk。而kernel是最核心的东西,是不能乱改的(除非你知道你机器的硬件参数)。
它只负责让shell和硬件正常交流,命令上传下达。
那么,只剩下ramdisk可以改了,我们要求很低,只需要将几行代码加进入,让/data/app的实际存放地址稍稍的变化一下。要改,先得解压吧?工具是现成的,ANDROID的WIKI上有,地址:
PS:话说E文鸟语学得比较好的,可以略过我的废话。直接去上面的地址中查看。里面解压、打包、BOOT.IMG结构都有。免得看完哥的连篇废话之后,怨念无限,那可就冤枉我SJ哥了。
4.下载附件中(或WIKI中)的split_bootimg.zip,解压之,并放到四楼所述的数据空间文件夹中(本人是F盘)。
然后用如下命令,将之移动到BIN目录下,并赋予可执行权限: mv /mnt/shared/split_bootimg.pl /bin/chmod +x /bin/split_bootimg.pl
5.从你下载好的ROM包中,提取boot.img放到数据空间文件夹中(本人是直接放在F盘下)。输入命令解压之(为方便LINUX新手,本人命令基本使用绝对路径): & &&&mkdir /mnt/shared/boot& & mv /mnt/shared/boot.img /mnt/shared/boot/& && &cd /mnt/shared/boot& && && && &split_bootimg.pl boot.img
& && && &&&这时你发现BOOT目录下多了几个文件,boot.img-ramdisk.gz 和boot.img-kernel6.
& && && && &创建一个新的名叫ramdisk的目录,用于存放ramdisk盘中的文件。然后,提取出ramdisk文件。
& && && &&&命令如下: & && && && && && &cd ramdisk& && && && && && &gzip -dc ../boot.img-ramdisk.gz | cpio -i
& && && & 7.这时,ramdisk中的文件已经解压出来了,可以修改了。不过修改之前,我们还是备份一下吧。备份是个好习惯。 mv /mnt/shared/boot/boot.img /mnt/shared/boot.img.backup
& && && && && & 我们即将要修改的init.rc也备份一下吧,万一出现问题,可以直接还原,重新修改而不需要再次解压boot.img-ramdisk.gz cp ./init.rc ../init.rc.backup
& && && && &&&8.用编辑器打开init.rc,查找到mkdir /data/app的行。
& && && && && &再次解释一下/data目录的结构,/data/app是普通应用程序存放的地方,/data/app-private是加密程序的存放地点(一般用不到)/data/dalvik-cache 是程序执行缓存(android系统会将JAVA代码转换成其自创的dalvik虚拟机可执行的代码,后缀是.dex,再执行,缓存就放在这里)。
& && && && && &此三个目录,系统并不会经常调用,而且对SD卡的速度要求不高。所以可以链接到SD卡的EXT分区中。
& && && && & 而/data/data这个目录,请诸位就不要乱链接了。为什么呢?因为它是存放程序在运行过程中,经常要访问的数据。如果你放进去了,而且你的SD卡的速度不够(class 4以下,即每秒SD卡读\写速率低于4M/s),那么你的系统会很卡很卡。打电话,显示通话记录卡一会。查看联系人又卡一会。看信息又卡一会。严重了还会死机。基本(有些人可能可以忍受)没法用。& && && && && &&&
& && && && && & 首先在mkdir /data/local ... mkdir /data/local/tmp mkdir /data/data mkdir /data/app这一大段mkdir代码之前,加入如下代码: #mount a dir for app2sd by sjssd,oops,it's rw now& && && && &mkdir /system/app2sd& && && &&&#此为注释,逐行解释给诸位听的,不要加入init.rc。创建挂载目录,用于挂载ext分区。可换名字& && & if [ -e /dev/block/mmcblk0p2 ];& &#判断,如果SD卡中存在第二个分区(即ext分区)& && & #解释一下,/dev/block/mmcblk0p1 是指SD卡中第一个分区。mmcblk0p2则是第2个分区。如果SD卡未分过区,则不会有mmcblk0p2& && &then& && &mount ext2 /dev/block/mmcblk0p2 /system/app2sd& && &#结合上文,如果存在ext分区,则挂载到/system/app2sd目录下& && & chown system system /system/app2sd #更换用户组,将之还给system& && & chmod 6775 /system/app2sd& & #修改权限。& && && & #这是结束判断语句,不用说了吧?& && &#swap on by sjssd, if Mem &20,then use swap& && &&&if [ -e /dev/block/mmcblk0p3 ];& &#如果存在第三个分区,即swap分区& && &&&then& && && && && &&&echo 20 &/proc/sys/vm/& &#向SWAP配置文件中写入,使用SWAP的条件。当可用内存低于20M时,才使用它& && && && && && & swapon /dev/block/mmcblk0p3;& && && &#开启SWAP分区& && &&&& & #这段开启swap可不添加,没什么用处。N600+的手机内存有七八十M,一般不需要用。如果是其他内存低的手机型号,可以添加
9.把原来的mkdir /data/app&&... mkdir /data/app-private ... mkdir /data/dalvik-cache三行剪切掉,在第8步的代码后面加入如下代码:
& && && &&&#if the ext2 exists,mkdir the dir in SDCARD EXT2 partition& && && &&&if [ -e /dev/block/mmcblk0p2 ];& & #如果EXT2分区存在& && && && &then& && && && && &&&mkdir /system/app2sd/data/ 6775 system system #在ext2分区中创建一个data目录,来存放我们需要修改的三个目录。可换其他名字& && && && && &&&mkdir /system/app2sd/data/app-private 6775 system system& && && && && &&&mkdir /system/app2sd/data/app 6775 system system& && && && && && &mkdir /system/app2sd/data/dalvik-cache 6775 system system& && && && & #以上代码是在ext2分区的data目录下,分别创建三个需要to ext的目录。& && && && &&&#link for app2sd& && && && && &#以下代码是链接代码& && && && &&&symlink /system/app2sd/data/app-private /data/app-private& &#让/data/app-private目录实际链接到ext分区中的app2sd/data/app-private& && && && && &symlink /system/app2sd/data/app /data/app&&#链接/data/app& && && && && &symlink /system/app2sd/data/dalvik-cache /data/dalvik-cache&&#链接/data/dalvik-cache#if ext2 partition Not exists& && && &&&else& && && && && && &#do nothing& && && && & #如果ext分区不存在,那么,一切按照原来的官方ROM的工作方式做。请将刚才剪切出去的三行,复制到这里& && && && && && &&&mkdir /data/app-private 0771 system system& && && && && && &&&mkdir /data/app 0771 system system& && && && && && &&&mkdir /data/dalvik-cache 0771 system system& && && && & #结束
10.顺便提一下如何用添加服务的方式,实现app2sd吧。注意,第10步和第8.9步无法共存。它们是达到同一个目的的两种方式。
& && && && &&&app2sd.sh sample代码:
& && && && & & && && && &&&mount rootfs rootfs / rw remount& & #说声抱歉,这句直到今天3.22 检查帖子的时候才发现忘了加上。不加上是不能进行下面的步骤的& && && && &&&if [ ! -e /system/app2sd -a -e /dev/block/mcblk0p2] ;&&#如果具备开启app2sd的条件(即存在ext分区),且system/app2sd目录不存在(即尚未开启app2sd),则删除原来存在的目录并在SD卡中创建目录,以备开启& && && && && &then& && && && && && && && &busybox rm -rf /data/app& &&&#删除原来的目录,等会需要将其链接到SD卡中的EXT分区上& && && && && && && &&&busybox rm -rf /data/app-private& && && && && && && && &busybox rm -rf /data/dalvik-cache& && && && && && && && & mkdir /system/app2sd #创建挂载目录& && && && && && && && &mount -t ext2 /dev/block/mmcblk0p2 /system/app2sd rw&&#挂载ext分区& && && && && && && && &mkdir /system/app2sd/data& &#在SD卡中创建目录& && && && && && && && & mkdir /system/app2sd/data/app& && && && && && && && & mkdir /system/app2sd/data/app-private& && && && && && && && &&&mkdir /system/app2sd/data/dalvik-cache& && && && && &&&#结束上一个if& && && && &&&if [ -e /system/app2sd -a -e /dev/block/mmcblk0p2 ];&&#如果存在app2sd目录,且存在ext分区,则说明上一步已经执行完毕,EXT分区中已经存在app目录了,那么我们要做的是链接它& && && && && &then& && && && && && &&&busybox ln -s /system/app2sd/data/app-private /data/app-private& && && && && && &&&busybox ln -s /system/app2sd/data/app /data/app& && && && && && &&&busybox ln -s /system/app2sd/data/dalvik-cache /data/dalvik-cache& && && && && && && && && && & if [ -e /dev/block/mmcblk0p2 -a -e /dev/block/mmcblk0p3 ] ; #挂载swap,内存较大的机子,可不要这段& && && && &&&then& && && && && && && && &echo 20 &/proc/sys/vm/& && && && && && && && &&&swapon /dev/block/mmcblk0p3;& && && && && && && && && &&&#do nothing& && && && & #####如果没有ext分区,即mmcblk0p2,则不做任何事情。
& && && && &&&创建好app2sd.sh好后,我们给它加上可执行权限,在虚拟机linux中输入命令: chmod +x app2sd.sh
& && && && && &&&再将移动到sbin目录下: mv app2sd.sh /mnt/shared/boot/ramdisk/sbin/
& && && && &&&依然,需要修改init.rc文件,使之成为一个服务,每次开机都执行一次。
& && && && && & 如何修改init.rc?如下:搜索class_start default。在之一行之前,加入两行代码: & && && && && & start app2sd& &&&#这里的app2sd应该是前面app2sd.sh的前面的文件名,如果你是a2sd,请用start a2sd.其他类推。此注释不要加入到文件中& && && && && && &on property:cm.filesystem.ready=1
& && && && & 然后,在init.rc文件的最末尾,加入
& && && && && & service app2sd /system/bin/logwrapper /system/bin/sh /system/sbin/app2sd.sh #中间有一个logwrapper是指日志转移到系统日志文件中,可以以logcat查看& && && && && &&&disabled& && && && && && &oneshot #oneshot指仅开机的时候运行一次。
& && && && &11.下载附件中的打包工具,解压之并复制到数据空间中。运行命令以复制之到bin目录中并赋予可执行权限: & && && && && &mv /mnt/shared/mkbootimg /bin/ && chmod +x /bin/mkbootimg& && && && && && &mv /mnt/shared/mkbootfs /bin/ && chmod _x /bin/mkbootfs
& && && && &&&12.正式打包吧。按WIKI所说,应执行: & && && && && &cd ../ mkbootfs ./ramdisk | gzip & ramdisk-new.gz& && && && && &mkbootimg&&--kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot.img
& && && && && &然后,复制到刷机目录中,替换原来的boot.img,刷机之。就万事OK了。
& && & 13.好吧,说笑的。我只是检查一下大家会不会看完。
& && && &&&如果诸君按照12步打包完,刷机,无论你是什么手机,十有**是会卡在开机界面,屏幕一闪一闪啊黑屏啊之类的症状层出不穷。
& && && && &很可惜,我当初就是这么做的,结果开不了机。然后没办法啊,潜心研究。
& && && && && & 结果发现,在刷机过程中未停电且未断开数据线的情况下,开不了机普遍有两种可能。
& && && && &&&一、boot.img是加过密的。各位手机出产的公司,在做ROM的时候,以他们独自的加密算法,对整个文件进行CRC验算,然后将验算值添加到boot.img的最末尾。刷机的时候,手机的硬件BIOS就像一名尽职的士兵,对此进行验算,对不上口令的,那么对不起,请君离开,不离开我报警了~~呃,报不了警,那反正我不让你进门~~
& && && && & 二、boot.img还有一个重要的参数,基址 base,用于告诉手机从哪个地址开始,是准备给内存盘的入口,哪个地址是给kernel的入口。如果你对不上号,对不起,不能非法入室的。& && && &&&
& && && && & 如果是第一种,我只能望风而逃,罢手了。
& && && && &&&本人加密解密不到境界,无法解决如此高深的问题。鬼知道为官方开发手机ROM的开发人员,用的什么加密方式。那么只能向第二种方式上想了。
& && && && & 好吧,虚拟机中下载一个十六进制编辑器,ghex2.命令如下:apt-get install ghex2
& && && && & 也可以在WIN下下载 ultra edit。
& && && && && &下完继续看吧。没想到本文这么长,推荐在看之前买杯茶。呃,在快到文末才说,是不是邪恶了些?
& && && & 14.各种查阅,终于发现,在ROM的boardconfig.h中存在地址偏移的define。。虽然本人手机 的ROM中不存在这文件,但各android系统这个偏移是通用的,一般没吃错药不会去改。
偏移DEFINE如下:
#define PHYSICAL_DRAM_BASE& &0x&!--IWMS_AD_BEGIN--&& &//基址,各不相同,我们的目的是为了获得这个基址,但由于没有ROM源代码,这貌似是不可能的。&!--IWMS_AD_END--&#define KERNEL_ADDR& && && & (PHYSICAL_DRAM_BASE + 0x)#define RAMDISK_ADDR& && && &(PHYSICAL_DRAM_BASE + 0x)#define TAGS_ADDR& && && && &(PHYSICAL_DRAM_BASE + 0x)#define NEWTAGS_ADDR& && && &(PHYSICAL_DRAM_BASE + 0x)
15.还记得WIKI中有这句话吧?
For Nexus One : Add --base 0x to mkbootimg command-line.&&翻译一下,如果是nexus one手机,那么需要在mkbootimg命令中加入 --base 0x。。现在是不是很熟了?原来基址写在这里,mkbootimg会自动为你加入偏移量,并写入boot.img。。
好吧,我们现在需要知道,这些值是在哪个位置的。
为什么需要呢?在第14步,我们已经知道了偏移量了,那么如果我们再从官方ROM的boot.img中获取 kernel_addr,再用kernel_addr -偏移量0x,不就可以得出基址了吗?
16.没辙,需要知道mkbootimg工具把它们写到哪了,只能查看mkbootimg的源代码(幸好mkbootimg作为一个典型的LINUX工具,是开源的。若换成WIN,哥就真悲情了)。
& && &&&各种查找,找到mkbootimg.c文件,看吧。
& &&&header + padding + kernel + padding + ramdisk + padding + ...(padding是补全,还记得上面所说的,一个盒子装10张卡片,11张卡片需要几个盒子的事情吧?第二个盒子由于只放了一张卡片,所以需要9张空白卡片来填充位置,即padding)
4 * 2, magic,固定为&ANDROID!&
4 * 1, kernel长度,小端unsigned类型
4 * 1, kernel地址,应为base + 0x
4 * 1, ramdisk长度,小端unsigned
4 * 1, ramdisk地址,应为base + 0x
4 * 1, second stage长度,小端unsigned,为0
4 * 1, second stage地址,应为base + 0x00f00000
4 * 1, tags地址,应为base + 0x
4 * 1, page大小,小端unsigned, 为2048或者4096
4 * 2, 未使用,固定为0x00
4 * 4, 板子名字,一般为空
4 * 128, 内核命令参数,一大串
4 * 8, id,不知道啥玩意,0x00
给亲爱的16进制帖张图吧,看图说话,下图是N600+官方2.1ROM的16进制图片,如下:
从图中我们可以知道:
41 4E 44 52 4F 49 44 21 就是Magic Number ,内容是固定的ANDROID!。一一对应
kernel_size就是0x。注意,小端读法。是Byte内,顺读,整个类型中,逆读。故70 74 23 00 的确切数字是0x 00 23 74 70
kernel_addr即0x 。这时有人就问了,那用这个减去上面获取的kernel偏移,0x,那么base是不是0x?好了,我知道了,我就用--base 0x来打包。那么,恭喜你,在N600上,这样写依然是不能启动的,为什么,请继续看。
ramdisk_size是:B9 66 03 00 --&0x 00 03 66 B9。
ramdisk_addr即00 00 A0 03 --&0x 03 A0 00 00。减去偏移0x,base=0x02a00000
second_stage size:
second_stage addr:00 00 90 03--&0x 03 90 00 00.减去偏移0x00f00000,base=0x02a00000
tags_addr:00 01 a0 02--&0x 02a00100.减去偏移0x,base=0x02a00000
page_size:00 80 --&0x0800.这是页长。记得我前面说过的页长一般都为1K(1024)的整数倍吧?此处页长是0x0800,转为十进制,则是2048
好吧,我们来看下base吧, 嗯,kernel的base是0x,ramdisk和second_stage及tags_addr的基址都一样啊,是...是0x02a000000。。我了个去~~4个base竟然有不一样的~是的,我当时就是这么骂的。
我就想,还好本人闲着无事算了4个base,如果有只算第1个,然后用0x来打包的,基本就是悲剧的结果,可能还摸不着头脑,以为这个boot.img是CRC校验的,而非基址弄错。
好吧,以少数服从多数的原则,我们在打包的时候,把基址填为0x02a00000。然后把第一个地址kernel_addr,手动修正。
那么,正确的命令如下:
mkbootfs ramdisk |gzip &ramdisk-new.gzmkbootimg --kernel boot.img-kernel --ramdisk ramdisk-new.gz --base 0x02a00000 -o boot.img
然后用ghex2打开boot.img,忽略前面的4*2Byte,41 4E 44 52 4F 49 44 21,这是magic number,固定不变的。
再跳过4*1Byte,在我这是70 74 23 00。这是kernel_size,程序生成,不需要手动改。
其后的4*1Byte才是kernel_addr,现在是00 80 A0 02,修改成 00 80 00 03。保存之。
17.好了,将它放到刷机包目录中,打开刷机工具,刷之。快乐的启动吧。
18.其他机型的ROM,只要不是采用CRC校验方式的,如果修改boot.img后出现问题的话,也可以按照本文方式查找基址。
& & 解释一下。boot_kitchen下的workfolder目录里的1.bat是解压的批处理,2.bat是打包的批处理,请注意:不同的手机的base不同,请在获取后,修正2.bat里面的mkbootimg命令。
3.bat是flashboot刷机的。
另外,WIN需要另外安装perl,以支持split_bootimg.pl。
19.申明一点,如果有看了本文 之后,配出一个生活不能自理的ROM的话,请不要提我SJ的名字,会败坏哥的名号的哇哈哈~~哼哼,如果还有销赃不及,被抓个正着的~~请说日语~~说笑~~
该用户从未签到
本帖最后由 鱼儿哥帅 于
12:09 编辑
& && && && && && && && && && && && && &第四部分:安卓系统system部分DIY介绍
一直觉得自己这种自学成材的ROM修改是不正宗的,一直期待有正宗的人能发个帖子,结果貌似上帝睡着了。那么,这个任务就由我这个杂牌ROM修改者来做吧。
& && && & 在开始工作之前,你需要一个LINUX系统,可以是虚拟机,也可以是实装系统。本人采取虚拟机,作完就可刷机检测问题。推荐LINUX新手,如果虚拟LINUX的话使用YLMF OS,万一需要安装什么软件,不需要配置源。
& &&&先说system.img吧,这个文件呢,是android的系统工具、APP应用、设置等的集合体。有人问,我刷了一个ROM包,不错是不错,就是有一些软件我不喜欢,想删除,那怎么办呢?改system.img;也有人问,我刷了一个ROM包,界面不喜欢,怎么办呢?改system.img;还有人问,有一些软件我想换掉,怎么办呢?还是改system.img。
& &&&system.img解压后(如何解压后面会讲,以下介绍请不会的仔细看完,免得到时出了问题不知道是出在哪块),有文件一个。文件名叫buid.prop。顾名思议,是ROM在中兴编译的时候的一些信息,没啥实际用处。也就改一下“设置”-“关于手机”中的显示。
& &&&有文件夹若干,列如下:
& && && &&&app
& && && &&&fonts
& && && &&&lib
& && && &&&wifi
& && && &&&bin
& && && &&&etc
& && && &&&framework&&
& && && &&&media
& && && &&&usr
& && && &&&xbin
& &&&解释一下,app文件夹内放的就是内置软件,有不想要的,直接删除之。请在删除之前先弄清楚它能不能删除。有些官方内置的软件,删除了ROM就废了。当然,你也可以在没弄清楚的情况下乱删一气,只要在刷机完发现问题之后,把删除的软件,一个个放回去排查,刷个十遍八遍,大约也就搞定了。
& &&&fonts文件夹放的是手机的字体,如果没有美术细胞的人就不要乱改(包括很多有美术细胞的ROM高手,都没有改过字体),改字体有时候会死人的,刺眼、字形不协调、大小一一致等等诸如此类。
& &&&lib文件夹顾名思义,是内置软件的库文件。有些软件需要动态库支持才能正常使用的。所以,如果你向一个原本可以正常使用的ROM中加入了新的软件之后,反而出现 某程序意外关闭 某程序意外结束的情况后,那么基本上就是你忘了把库文件给它移动过去。
& &&&wifi文件夹中放的是无线WIFI的内核模块及一些支持文件。没事不要动它。
bin文件夹中放的是系统内置的工具,像什么busybox,su之类的都在里面,没事不要删除它,可以添加,但不要删除。
etc文件夹中放置的是系统的设置,诸如无线、GPS、DHCP、拨号、APN列表之类的设置。这个目录中,如果你改了重要的CONF文件,则可能系统出问题。也可以改一部分不重要的东西(比如说APN列表)而不出现问题,但貌似APN列表没必要改。
& & framework目录就是系统的UI了,想改界面的人应该改这个目录中的文件。。呃,无美术细胞,不会细说的。大约也就是替换一些什么图片,换掉界面框架什么的,以达到改换界面的目的。这个的修改,等候其他人来细说吧。
& & media目录是系统内置的媒体文件,如开机音乐,内置的通话铃声、信息铃声、闹钟铃声,可以改,但格式是OGG的,可以自己去搜索如何换格式。
& & usr目录是系统的部分使用配置,包括键盘映射表什么的,没事不要改。。。
& & xbin目录,好吧,这个目录可以放一些工具,而且貌似官方本身在里面放了一个tcpdump,,是截获网络数据包的(不知道拿来干什么,监视我们的上网数据?说笑~~)。没试过删除它,推荐有冒险精神的可以删除之,再将结果告诉我们。
& & 好吧,介绍完成,正式开始吧(实在没有linux基础的童鞋们,可能要说抱歉了):
& & 一.诸君的YLMF OS下载好了吗?开始用虚拟机安装了吗?推荐使用Virtual BOX虚拟机。好吧,实装LINUX也可以,只需要你有耐心,每次修改完成后,重启到WIN下刷机,出问题后再切换回LINUX下修改,那么,这就不能影响到我们以下的操作。安装好后,再继续吧。
& & 二.这时大家已经有一个能用的虚拟LINUX了。在之前还需要做一些准备工作,那就是把WIN下的目录或磁盘挂载到虚拟LINUX下,实现共享数据,方便修改及刷机工作。
& && & &一& 1.如果你如我所说,使用的是Virtual Box虚拟机的话,进入系统后,点击“设备”下的“安装增强功能”,安装之。(PS:我忏悔,这里不应该精简的,现在补上。日期:3.24)
& && && & 在点击 安装增强功能后,LINUX的桌面上会多出一个 光盘图标 来,请双击它。
& && && &&&再在新弹出来的窗口中,找到autorun.sh文件,双击它,选择“在终端中运行”。
& && && &随后会有一个 权限验证“输入您的密码以执行管理任务”,输入密码后,确定。
& && && & 再稍等一会,等终端窗口中显示,press enter to close this window就已经安装好增强功能了。
& && & 2.安装好后重启一次虚拟机LINUX,请点击“设备”下的“分配数据空间”。
& && & 3.在新弹出来的窗口中,点击右边的+号图标,在新弹出的窗口中的数据空间位置下拉框中选择“其他”,选择你准备共享的文件夹,如本人是选择了共享“F盘”,数据空间名字是&ZTE“,一路确定。这时,你已经有一个可以共享给linux使用的数据空间了,名叫ZTE。
& && & 4.挂载数据空间。在linux中,选择开始-》附件-&终端,在终端窗口中输入命令sudo su,密码是你的当前用户密码,就可以切换到root用户下了。
& && &&&5.创建一个目录用于挂载:mkdir /mnt/shared
& && &&&6.挂载之:mount -t vboxsf ZTE /mnt/shared
& && & &二& 可能有些人使用的是VMware 虚拟机,那么数据空间操作如这个链接,不详述:
& & 三.在WIN下去下载(迅雷速度快)一个ROM包,把其中的system.img提取到数据空间文件夹(本人是F盘)。
& & 四.下载附件中的解压工具及打包工具。解压后也放到数据空间文件中。
& & 五.切换到linux,ROOT状态下输入命令: & && && && && && &&&mv /mnt/shared/unyaffs /bin/& && && && && && &&&mv /mnt/shared/mkyaffs2image /bin& && && && && && && &chmod +x /bin/mkyaffs2img& && && && && && &&&chmod +x /bin/unyaffs
& & 六.解压system.img。新建一个system文件夹,并将它解压进去。
& && && && && && && & & && && && && && && & mkdir /mnt/shared/system& && && && && && && & mv /mnt/shared/system.img /mnt/shared/system& && && && && && && & cd /mnt/shared/system& && && && && && && & unyaffs system.img
& && &解压后删除原来的system.img
& && && && && & rm /mnt/shared/system/system.img
&&七.现在开始修改吧。进入app文件夹,把想删除且能删除的文件删除掉。
& && && &&&也可以向里面添加新软件。过程大致如下:
& && && &&&1.&&在制作ROM之前你的手机尚能正常使用的吧?不能当我没说。在你的手机里安装你想内置到ROM中的软件。
& && && &&&2.安装好后,请在/data/app目录下找到新安装的软件文件(文件名应该和软件名有一些关系,比如说baidu输入法,文件名中就应该有baidu字样。),将它复制到SD卡,再转移到数据空间中。
& && && &&&3.有些软件是需要库支持的,上面也有说过。你就需要在/data/data下,寻找该软件的配置目录,进去并复制出里面的lib目录内,复制到SD卡,转移到数据空间。
& && && &&&4.将它们分别复制到system/app和system/lib目录中。
& && && && & & && && && &&&mv /mnt/shared/com.android.baiduinput.apk /mnt/shared/system/app& && && && &&&mv /mnt/shared/lib/* /mnt/shared/system/lib/
& &八。修改UI(自己去查,各ROM都一样的,无非是改framework文件夹下的文件。安卓2.3以后,状态栏单独由systemUI.apk程序控制了)。& && && && && && && && &&&
& & 九,修改后赋予可执行文件并打包:
& && && & & && && & cd /mnt/shared/system& && && & cd ../& && && &&&mkyaffs2image system system.img
& && && && &
& &十.用打包完成的system.img,替换刷机目录下的system.img,快乐的刷机吧。
该用户从未签到
本帖最后由 鱼儿哥帅 于
12:26 编辑
& && && && && && && && && && && && &&&第五部分:安卓系统其他介绍——odin刷机包制作
本教程取材于XDA论坛,本版测试机型I9000,测试版本I9000NEJVK,测试内核为lidroid 1.7.0。个人推测适用于三星所有机型,不信可验证。
& && && & 对于三星的android爱好者而言,odin刷机还是简单实用的方法,不管你信不信,反正我信了,我爱用。
& && && & zip包的精髓在于脚本的编写,而odin包就像是ghost一样,本制作方法也类似于此,导出手机中的rom做出镜像,并通过linux命令打包成常见的一体包。
& && && & 必备工具:adb、linux环境(ios也可以的)。linux环境可以使用ubuntu或者其他linux系统,我就不卖弄了;同时也可以使用模拟的linux环境,比如常用的Cygwin。
& && && & 接触过厨房的童鞋就应该认识Cygwin,我就简单传送介绍以及安装的帖子:【black-snowflake】安卓Rom定制厨房汉化版0163倾情奉献,下面有Cygwin的下载地址和安装方法,省略。而adb这个东西呢,更是常见,我这里就给大家来个方便
(504.11 KB, 下载次数: 520)
12:17 上传
点击文件名下载附件
。建议解压到C盘,这样cd起来方便。
& &&&工具齐了,就开工吧:(我使用的是win7+adb+Cygwin)
& & 1、清理手机中的私人信息,最好双wipe,防止你的信息出现在你的粉丝手机里。建议在修改整个rom后双wipe,然后开始第二步。& &
& & 2、保证你的手机root,运行CMD,然后进入到adb的目录;手机开启调试模式【程序管理》开发》USB调试】连接PC;输入命令 adb shell。如图:
11.jpg (24.13 KB, 下载次数: 114)
12:23 上传
3、在最终出现的/#后输入su,如果你的手机root过后,执行会无提示;接着挂在文件系统,命令:mount -o remount,rw /dev/block/stl9 /system,执行后会重新显示一次该命令,不解释,看到#表示结束,可执行下一个命令
12.jpg (31.71 KB, 下载次数: 104)
12:23 上传
4、执行导出命令,分别为:
& & dd if=/dev/block/stl9 of=/sdcard/factoryfs.rfs bs=4096& && & 重要部分,整个文件系统。
& & dd if=/dev/block/stl11 of=/sdcard/cache.rfs bs=4096& && && & 重要部分,缓存
& & dd if=/dev/block/bml7 of=/sdcard/zImage bs=4096& && && &&&重要部分,内核& &&&
& & dd if=/dev/block/bml12 of=/sdcard/modem.bin bs=4096& & 重要部分,基带
13.jpg (78.56 KB, 下载次数: 99)
12:23 上传
。【备注:PIT自己命名】。至此四个文件已经打包完成,可以进自己的nand里查看了,或者sd卡。
14.jpg (12.3 KB, 下载次数: 100)
12:23 上传
5、现在转战Cygwin,刷过一体包的童鞋知道,文件不止这些的,所以需要相同级别的其他文件,直接借来用即可。在这里我不多说,可加可不加。将四个文件拷贝到D盘。打开Cygwin,进入D盘目录:cd D:&&要注意,这里无法粘贴了。不确定是否进入c盘的童鞋可以执行下 ls命令看看显示的文件与你的盘内是否相符。
15.jpg (35.01 KB, 下载次数: 105)
12:23 上传
6、执行tar打包命令:tar -H ustar -c factoryfs.rfs cache.rfs modem.bin zImage & QinSMY-v1.0.0.tar,需要等待片刻。重新显示光标即完成打包。
7、如果你不想别人随便动你的odin包【比如改名】,可以加上md5验证,连续执行:
& &&& md5sum –t QinSMY-v1.0.0.tar && QinSMY-v1.0.0.tar
& && &mv QinSMY-v1.0.0.tar QinSMY-v1.0.0.tar.md5
16.jpg (54.69 KB, 下载次数: 98)
12:23 上传
结束。现在你可以去D盘查看是否有该文件了。至此你的odin包已经打包完成,直接上软件刷机都可以哦,pit文件通用的,随便换。
17.jpg (49 KB, 下载次数: 100)
12:23 上传
18.jpg (76.68 KB, 下载次数: 98)
12:23 上传
好了,整个教程结束了,是不是很简单啊。确实很实用哦,适用于修改基于xda上的一些zip rom,本地化后直接做个odin包。
& &&& 给点辛苦支持吧,特别是要回贴哦,来吧!!!!
该用户从未签到
本帖最后由 鱼儿哥帅 于
14:42 编辑
第五部分:安卓系统其他介绍——刷机补丁和CWM刷机包ROM的制作
“卡刷”或CWM刷机就是用手机里安装的ClockworkMod程序来在Recovery模式下进行刷机。刷机包为单个签名的zip压缩包。在刷机包中有一个脚本文件,里面有一系列命令,规定好把不同的文件内容复制的手机的指定分区,从而达到刷机目的。那么怎样来制备这种zip刷机包呢?那个脚本文件又是什么呢?
本讲的内容包括两个部分:
& &1.制作刷机补丁
& &2.制作完整刷机包ROM
通常,两者都称作刷机包。在本文中,我们说“刷机补丁”是指ROM的补充内容。例如:在英文底包上刷中文文件,或者替换字库,替换主题或桌面等等。它们不构成可使手机运行的全部文件,它们仅仅是ROM的一部分。以前,常用update.zip来传播。当我们说“完整刷机包ROM”时,我们是特指一个独立完整的ROM,包含一个刷ROM所具有的所有必要刷机元素。
1. 制作刷机补丁
我们都知道,ROM发布者通常发布刷机补丁来升级ROM。ROM发布后,需要增加、刷新、更改ROM内容或功能时,没有必要重新安装整个ROM。只要把需要更新的部分写成一个“刷机补丁”,刷进手机与已有的系统合并就行了。
在介绍如何制作刷机补丁之前,先让我们来看一个实例:用刷机补丁来更新两个主题文件,把TouchWiz30Launcher.apk和SystemUI.apk复制进手机的/system/app目录。刷机包补丁文件名为:CWM_Update.zip。
用WinRAR打开刷机补丁文件CWM_Update.zip,看到有两个目录:
& &META-INF& &&&刷机脚本文件和签名
& &system& && && &要复制的补丁内容
继续打开/system就看到文件夹/app,再下去在 /app下看到要复制的两个主题文件TouchWiz30Launcher.apk和SystemUI.apk(见截图)。从/system目录开始,所有的目录结构和akp文件放置的位置都必须与手机里的内容一一对应。
21.gif (91.25 KB, 下载次数: 109)
12:34 上传
然后进入META-INF目录(见截图),我们看到有三个文件和一个字文件夹com。这三个文件是签名文件,是签名操作产生的。在Android手机里,所有要刷入手机或在手机里运行的程序都必须经过签名。从com继续向下走,在/META-INF/com/google/android目录下看到有两个文件:
& &update-binary 刷机包用的二进制文件
& &updater-script 刷机包脚本文件
这个刷机包脚本文件updater-script规定了要刷什么,刷到哪和怎样刷。
22.gif (75.02 KB, 下载次数: 113)
12:34 上传
从这个具体的例子,我们可以总结制作刷机补丁的步骤如下:
1)创建一个工作目录:先假定它是CWM_Update。
2)在CWM_Update下产生两个子文件夹:META-INF和system
& &CWM_Update/META-INF
& &CWM_Update/system
3)再在CWM_Update/system下产生下一级子文件夹,存放补丁的内容。目录结构和文件放置要与手机里的文件结构完全一致。apk应用程序放在/app下,字库放在/fonts下,主题放在/framework下,触摸键定义放在/usr/keylayout下,库文件放在/lib下,等等。
4)在CWM_Update/META-INF下再产生
& &/META-INF/com/google/android
到其它的刷机包里去把现成的update-binary和 updater-script复制进/android目录。
我的做法是把META-INF的整个目录内容都一起复制过了,里面已经有了三个签名文件和刷机包用的二进制文件update-binary,一次搞定,省事。不要碰再它们了。
5)现在来编辑脚本文件updater-script,它规定了要复制什么、怎么复制、复制到什么地方。用文本编辑器打开updater-script,看到内容如下:
& &mount(&MTD&, &system&, &/system&);
& &ui_print(&Updating system...&);
& &show_progress(0.);
& &set_progress(1.000000);
& &package_extract_dir(&system&, &/system&);
& &show_progress(0.);
& &ui_print(&Update complete!&);
& &unmount(&/system&);
对脚本文件updater-script内容解释如下:
mount(&MTD&, &system&, &/system&);
挂载MTD、system、/system(system是CWM_Update.zip里的/system文件夹,/system是手机空间上的文件夹)
ui_print(&Updating system...&);
手机屏幕显示提示信息 Updating system...
show_progress(0.);
是控制进度条状态(进度条当操作完成后前进10%)
set_progress(1.000000);
把进度条手动设置到100%
package_extract_dir(&system&, &/system&);
将CWM_Update.zip的system文件夹下的内容复制到手机的/system
show_progress(0.);
同上,是控制进度条状态(进度条当操作完成后前进90%)
ui_print(&Update complete!&);
手机屏幕显示提示信息 Update complete!
unmount(&/system&);
卸载手机/system文件系统,刷机到此结束。
注意:在unmount之后必须有一个空行!这是规定。
6)在CWM_Update目录下,把META-INF和system两个目录打包成一个压缩文件CWM_Update.zip。
23.gif (49.08 KB, 下载次数: 99)
12:34 上传
7)最后,用签名程序Auto-Sign对CWM_Update.zip进行签名。制作过程结束,刷机补丁就做好了。
注释:如果你打算制作一个刷机补丁的话,原样使用这个脚本文件就行了,不用做任何修改。在实际制作时,可以直接从已有的刷机补丁中把META-INF目录完全复制过来,连签名过程都省了。但是注意检查一下updater-script的内容,以防造成错误后果!
2. 制作完整刷机包ROM
有了上面如何制作刷机补丁做基础,你也不难制作出一个完整的“卡刷”刷机包 ROM。与制作Odin刷机包相比,这里没有复杂的RFS解包和打包过程,不需要Linux环境,所有操作在Windows下就搞定了。编辑 /system目录下的内容直截了当,删减和添加内容都方便。
24.gif (25.95 KB, 下载次数: 110)
12:35 上传
META-INF目录在上一节介绍过了,存放的是签名文件和重要的刷机脚本文件updater-script。
system目录下的内容就是你手机里/system目录下的内容,一模一样。
与上一节相比,这里多了一个目录updates。它是干什么用的呢?打开就一目了然了。updates目录里面有三个文件:modem.bin,zImage和redbend_ua。大家对modem.bin和zImage不陌生吧?它们分别是基带和内核文件。另一个文件 redbend_ua是刷机用的,不用管它,但是,不能删掉。
最后一个文件installbusybox也不要动它。
现在再回过头来看看刷机脚本文件updater-script。由于现在要刷进手机的内容多了,所以updater-script的内容也就更复杂了。完整的脚本文件给出如下:
show_progress(0.);
set_perm(0, 0, 0777, &/sbin/mount&);
run_program(&/sbin/mount&, &/system&);
set_perm(0, 0, 0777, &/sbin/mount&);
run_program(&/sbin/mount&, &/dev/block/stl10&, &/dbdata&);
set_perm(0, 0, 0777, &/sbin/mount&);
run_program(&/sbin/mount&, &CACHE:&);
set_perm(0, 0, 0777, &/sbin/mount&);
run_program(&/sbin/mount&, &/dev/block/mmcblk0p2&, &/data&);
delete_recursive(&/system&);
delete_recursive(&/dbdata&);
delete_recursive(&/cache&);
delete_recursive(&/data/dalvik-cache&);
delete_recursive(&/data&);
mount(&MTD&, &system&, &/system&);
package_extract_dir(&system&, &/system&);
package_extract_dir(&updates&, &/tmp&);
show_progress(0.);
symlink(&toolbox&, &/system/bin/cat&);
symlink(&toolbox&, &/system/bin/chmod&);
symlink(&toolbox&, &/system/bin/chown&);
symlink(&toolbox&, &/system/bin/cmp&);
symlink(&toolbox&, &/system/bin/date&);
symlink(&toolbox&, &/system/bin/dd&);
symlink(&toolbox&, &/system/bin/df&);
symlink(&toolbox&, &/system/bin/dmesg&);
symlink(&toolbox&, &/system/bin/getevent&);
symlink(&toolbox&, &/system/bin/getprop&);
symlink(&toolbox&, &/system/bin/hd&);
symlink(&toolbox&, &/system/bin/id&);
symlink(&toolbox&, &/system/bin/ifconfig&);
symlink(&toolbox&, &/system/bin/iftop&);
symlink(&toolbox&, &/system/bin/insmod&);
symlink(&toolbox&, &/system/bin/ioctl&);
symlink(&toolbox&, &/system/bin/ionice&);
symlink(&toolbox&, &/system/bin/kill&);
symlink(&toolbox&, &/system/bin/ln&);
symlink(&toolbox&, &/system/bin/log&);
symlink(&toolbox&, &/system/bin/ls&);
symlink(&toolbox&, &/system/bin/lsmod&);
symlink(&toolbox&, &/system/bin/mkdir&);
symlink(&toolbox&, &/system/bin/mount&);
symlink(&toolbox&, &/system/bin/mv&);
symlink(&toolbox&, &/system/bin/nandread&);
symlink(&toolbox&, &/system/bin/netstat&);
symlink(&toolbox&, &/system/bin/newfs_msdos&);
symlink(&toolbox&, &/system/bin/notify&);
symlink(&toolbox&, &/system/bin/printenv&);
symlink(&toolbox&, &/system/bin/ps&);
symlink(&toolbox&, &/system/bin/reboot&);
symlink(&toolbox&, &/system/bin/renice&);
symlink(&toolbox&, &/system/bin/rm&);
symlink(&toolbox&, &/system/bin/rmdir&);
symlink(&toolbox&, &/system/bin/rmmod&);
symlink(&toolbox&, &/system/bin/route&);
symlink(&toolbox&, &/system/bin/schedtop&);
symlink(&toolbox&, &/system/bin/sendevent&);
symlink(&toolbox&, &/system/bin/setconsole&);
symlink(&toolbox&, &/system/bin/setprop&);
symlink(&toolbox&, &/system/bin/sleep&);
symlink(&toolbox&, &/system/bin/smd&);
symlink(&toolbox&, &/system/bin/start&);
symlink(&toolbox&, &/system/bin/stop&);
symlink(&toolbox&, &/system/bin/sync&);
symlink(&toolbox&, &/system/bin/top&);
symlink(&toolbox&, &/system/bin/umount&);
symlink(&toolbox&, &/system/bin/vmstat&);
symlink(&toolbox&, &/system/bin/watchprops&);
symlink(&toolbox&, &/system/bin/wipe&);
symlink(&/system/bin/dumpstate&, &/system/bin/dumpmesg&);
symlink(&/system/bin/debuggerd&, &/system/bin/csview&);
set_perm_recursive(0, 0, , &/system&);
set_perm_recursive(0, , 0755, &/system/bin&);
set_perm_recursive(0, 0, , &/system/etc&);
set_perm_recursive(, , &/system/etc/bluetooth&);
set_perm_recursive(0, , 0755, &/system/vendor/bin&);
set_perm_recursive(0, , 0644, &/system/vendor/etc&);
set_perm_recursive(0, , 0644, &/system/vendor/firmware&);
set_perm_recursive(0, , 0755, &/system/xbin&);
set_perm(0, , &/system/vendor&);
set_perm(0, , &/system/vendor/firmware&);
set_perm(0, , &/system/vendor/bin/launch_gps.sh&);
set_perm(0, , &/system/vendor/bin/gpsd&);
set_perm(0, , &/system/etc/bluetooth&);
set_perm(0, , &/system/bin/netcfg&);
set_perm(0, , &/system/bin/ping&);
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(0, 0, 06755, &/system/bin/su&);
symlink(&/system/bin/su&, &/system/xbin/su&);
set_perm(0, 0, 06755, &/system/xbin/busybox&);
set_perm(0, 0, 755, &/tmp/redbend_ua&);
show_progress(0.);
set_perm(0, 0, 0777, &/system/xbin/busybox&);
run_program(&/system/xbin/busybox&, &--install&, &-s&, &/system/xbin&);
show_progress(0.);
set_perm(0, 0, 0777, &/tmp/redbend_ua&);
run_program(&/tmp/redbend_ua&, &restore&, &/tmp/modem.bin&, &/dev/block/bml12&);
show_progress(0.);
set_perm(0, 0, 0777, &/tmp/redbend_ua&);
run_program(&/tmp/redbend_ua&, &restore&, &/tmp/zImage&, &/dev/block/bml7&);
show_progress(0.);
set_perm(0, 0, 0777, &/tmp/redbend_ua&);
run_program(&/tmp/redbend_ua&, &restore&, &/tmp/zImage&, &/dev/block/bml8&);
show_progress(1.);
set_perm(0, , &/system/xbin/busybox&);
package_extract_file(&installbusybox&, &/tmp/installbusybox&);
set_perm(0, 0, 0777, &/tmp/installbusybox&);
run_program(&/tmp/installbusybox&);
unmount(&/system&);
感兴趣的机友可以其它地方去学习脚本文件里的语句和语法,这里不作介绍。值得要提的是下面这两句,用run_program语句把基带文件modem.bin复制到bml12分区,把内核文件zImage复制进bml7分区。
& &run_program(&/tmp/redbend_ua&, &restore&, &/tmp/modem.bin&, &/dev/block/bml12&);
& &run_program(&/tmp/redbend_ua&, &restore&, &/tmp/zImage&, &/dev/block/bml7&);
现在给出制作完整刷机包ROM的步骤:
1)创建一个工作目录:先假定它是JVP-ROM。
2)在JVP-ROM下产生三个子文件夹:META-INF,system和updates:
JVP-ROM/META-INF
JVP-ROM /system
JVP-ROM /updates
3)去找一个现成的卡刷刷机包ROM,例如我6月22日发的卡刷包ROM:JVP2.3.4_SunnyOK_CN-2.zip。把解压后得到的 META-INF和installbusybox都复制进JVP-ROM目录,把redbend_ua复制进/updates文件夹。
4)在JVP-ROM/system下准备好所用相应的内容。这个不用教你,自己看一下手机里的/system就清楚了。另外,定制ROM必须会修改和编辑/system。
5)把选好的基带和内核文件放到JVP-ROM/updates目录下。
6)在JVP-ROM目录下,把META-INF,system,updates和installbusybox一起打包成压缩文件JVP-ROM.zip。这就是完成了的完整刷机包ROM了。
1)以上没有说签名步骤,原因是在第3)步里已经把签名文件都复制过来了,不需要再签名。
2)如果没有借用以前的签名,最后一步就要用签名程序Auto-Sign对JVP-ROM.zip进行签名。
3)以上的制作过程借用了已有卡刷ROM的某些元素,使制作过程大大简化,达到自己的目的。
3. 补充内容:如何单刷基带和内核
1) 单刷基带
当单刷基带时,在/updates文件夹内放基带文件modem.bin和复制文件bmlwrite。刷机脚本文件的内容写为:
&&ui_print(& &);
&&ui_print(& &);
&&ui_print(&Flashing I897 modem. Please wait...&);
&&ui_print(& &);
&&package_extract_dir(&updates&, &/tmp/updates&);
&&set_perm(0, 0, 755, &/tmp/updates/bmlwrite&);
&&run_program(&/tmp/updates/bmlwrite&, &/tmp/updates/modem.bin&, &/dev/block/bml12&);
&&ui_print(&Successful! Please reboot.&);
2) 单刷内核
当单刷内核时,在/updates文件夹内放内核文件zImage和复制文件bmlwrite。刷机脚本文件的内容写为:
&&ui_print(& &);
&&ui_print(& &);
&&ui_print(&Flashing I897 kernel. Please wait...&);
&&ui_print(& &);
&&package_extract_dir(&updates&, &/tmp/updates&);
&&set_perm(0, 0, 0755, &/tmp/updates/bmlwrite&);
&&run_program(&/tmp/updates/bmlwrite&, &/tmp/updates/zImage&, &/dev/block/bml7&);
&&ui_print(&Successful! Please reboot.&);
工具附件:
1. 签名程序: 游客,如果您要查看本帖隐藏内容请或者点击
2. 刷机补丁模板: 游客,如果您要查看本帖隐藏内容请或者点击
3. 完整刷机包ROM模板: 游客,如果您要查看本帖隐藏内容请或者点击
4. 单刷基带模板: 游客,如果您要查看本帖隐藏内容请或者点击
5. 单刷内核模板: 游客,如果您要查看本帖隐藏内容请或者点击
该用户从未签到
本帖最后由 鱼儿哥帅 于
13:18 编辑
& && && && && && & 第五部分:安卓系统其他介绍——程序汉化
现在随处都可以找到功能强大的汉化工具,操作简单,上手快,汉化不再是件麻烦事。
想学汉化的朋友只要你用心,你也可以自己汉出优秀的作品,因为汉化根本没啥技术含量,要的只是持之以恒。
不要再羡慕别人会汉软件有多么多么牛X了,只要你有些不差的英语功底,有着热爱汉化、分享资源的热情,你也能成为“汉化达人”,一切皆有可能!
汉化工具(帖子已提供附件):
AndroidResEdit(arsc/xml汉化、签名工具)
汉化狂人(arsc/xml汉化工具)
Notepad++ Portable(dex汉化、文本编辑工具)
APKTool(反编译/编译工具)
smali/ baksmali(dex解包/打包工具)
WinRAR(apk安装包打包/解包工具)
* 基础知识:
1、apk安装包的文件结构
以知名桌面软件“LauncherPro”为例,apk安装包文件目录如下图:
31.jpg (64.69 KB, 下载次数: 102)
13:03 上传
文件目录如下:
- META-INF
&&- drawable
&&- drawable-hdpi
&&- drawable-land
&&- drawable-land-hdpi
&&- drawable-mdpi
&&- drawable-port
&&- drawable-port-hdpi
&&- layout
&&- layout-land
&&- layout-port
- AndroidManifest.xml
- classes.dex
- resources.arsc
- 多数情况都要汉化的是resources.arsc、classes.dex和res文件夹里的***.xml文件。
- META-INF文件夹里面存放的是证书文件,软件修改后需要将里面的证书文件删除(***.RSA、***.SF、***.MF三个文件)再重新签名,否则软件无法安装。
- res文件夹里存放的大部分是软件所需的资源及布局文件(drawable存放资源、layout、xml存放布局文件***.xml),部分需要汉化的单词、语句会在这些***.xml文件里。
- AndroidManifest.xml文件里包含了软件名称、版本、权限、引用的库文件等信息。极少数软件在这个文件里会有单词、语句需要汉化。
- classes.dex文件是Java源码编译后的代码文件。通常该文件里都有单词、语句需要汉化。
- resources.arsc文件是编译后的资源文件,大多数情况下,需要汉化的单词、语句绝大多数都在这个文件里,汉化的时候首先就要看这个文件。
* 另外,一些需要汉化的***.png图片文件、***.html文件、***.txt文件可能会在assets文件夹或res/raw文件夹内。图片文件需要用Photoshop修改,html、txt文件可以直接用Notepad++ Portable文本编辑工具修改(不建议用系统自带的记事本,这东西杀伤无数...)。
2、打包/解包
apk安装包其实就是zip格式的压缩包,只是文件扩展名改成了apk而已,所以可以直接用解/压缩软件WinRAR打开,若你的系统没有关联apk文件,请先安装WinRAR,打开WinRAR——选项——设置——综合,在“用户自定义压缩文件扩展名”处填上apk,点“确定”保存即可。之后就可以直接双击以WinRAR打开apk安装包文件。
汉化软件的时候,不需要把整个apk安装包解包,对于需要汉化的文件,如resources.arsc、classes.dex等文件,直接用鼠标拖出来,汉完后再拖进apk安装包后重新签名就行了(签名问题下面会讲到)。
Android的软件也需要签名,不过和Symbian相比,却要简单方便得多,首先是不需要自己去申请证书,下载个签名工具就可以签名了。另外,我们从电子市场、软件官网下载来的软件都是已经签好名的,可以直接安装,这里讲到的签名,是针对软件安装包被修改过的情况(如汉化需要修改安装包内的文件,原来的签名文件就不能用了,所以要重新签名软件才能正常安装。),正常情况下不需要签名。
现在Android可用的签名工具很多,想方便点的话可以用汉化浪子出品的AndroidResEdit,这个软件自带签名包(工具在帖子附件有提供)。
签名方法很简单,删除原证书文件后(META-INF 文件夹内的***.RSA、***.SF、***.MF三个文件),打开AndroidResEdit——签名——签名apk文件,选择需要签名的apk安装包后点击“立即签名”即可。
4、安装Java
这个是最基本的,汉化相关的软件都需要用到Java,必须要安装,否则汉化过程中出现各种奇奇怪怪的问题不要问我。
安装地址:
1、arsc/xml汉化、签名工具:
(741.29 KB, 下载次数: 815)
12:59 上传
点击文件名下载附件
2、arsc/xml汉化工具:
(599.27 KB, 下载次数: 1033)
13:08 上传
点击文件名下载附件
3、dex汉化、文本编辑工具:
(4.95 MB, 下载次数: 586)
13:04 上传
点击文件名下载附件
4、 反编译/编译工具:
(2.43 MB, 下载次数: 528)
13:00 上传
点击文件名下载附件
5、dex解包/打包工具:
(5.26 MB, 下载次数: 595)
13:07 上传
点击文件名下载附件
6、apk安装包打包/解包工具:
(1.39 MB, 下载次数: 577)
13:08 上传
点击文件名下载附件
该用户从未签到
本帖最后由 鱼儿哥帅 于
13:27 编辑
一、强制汉化
- 上面已经讲过,强制汉化是Android软件比较早的汉化方法(方法和Symbian软件汉化方法类似,熟悉Symbian软件汉化的朋友对这方法可以直接上手。),主要是用汉化工具在原语言(英文、或软件原带的其它语言)的基础上将单词和语句强制修改成中文。
好处是操作方便,通俗易懂,上手快,汉化速度比较快,比较适合刚接触汉化的人。缺点就是汉化的文字长度受字符限制,中文文字字符量不能超过原文的字符量(对翻译用词的准确性有一定影响),强制汉成中文后软件运行可能会不稳定(不过这种情况也比较少)。
- 通常需要汉化的文件有resources.arsc、classes.dex、***.xml这三种类型的文件,其它类型的文件稍后单独列出来讲解。
1、下面以知名桌面软件“LauncherPro”为例,讲解resources.arsc的汉化过程:
① 用WinRAR打开LauncherPro的apk安装包,将resources.arsc文件拖出来,用汉化狂人打开。
注:resources.arsc用汉化狂人、AndroidResEdit都可以汉化(两者均为汉化浪子出品),不过汉化狂人有搜索功能,支持保存字典,比起AndroidResEdit来要方便很多,建议用汉化狂人汉化。另外,汉化狂人在完成汉化保存好文件后,再次修改文件时字符量会限制为当前的中文字符量,例如把Save这个单词汉化成了“保存”,把resources.arsc文件保存后,想要将“保存”修改为“另存为”是不行的,这时字符量已经限制为了2个字符。这时就可以用AndroidResEdit来修改,不过字符量限制仍然为原英文单词Save的4个字符限制。
② 打开resources.arsc文件后,可以通过搜索栏搜索要汉化的单词、语句。双击要汉化的单词、语句即可在弹出的对话框中填写中文,完成后点击“OK”即可。
32j.jpg (83.6 KB, 下载次数: 96)
13:20 上传
* 需要注意的事项:
- 有路径的不需要汉,如图:
33.jpg (97.34 KB, 下载次数: 102)
13:20 上传
- 类似单词间没有空格、单词间有_等没有实际语义的不用汉,如图:
34.jpg (86.64 KB, 下载次数: 121)
13:21 上传
* 类似不用汉的部分很容易就能辨认出来,这个需要积累一段时间,对这些节点有一定的了解后,很自然地就能判断出来。
③ 将所有需要汉化的单词、语句汉化完成后,点击文件——保存汉化文件即可,如图:
35.jpg (88.36 KB, 下载次数: 93)
13:21 上传
* 对于经常更新的软件,为了节省每次汉化的时间,在第一汉化后,我们可以利用汉化狂人保存字典,打开汉化——字典汉化——导出字典,如图
36.jpg (92.92 KB, 下载次数: 101)
13:21 上传
等软件更新后,再汉化时,直接打开汉化——字典汉化——导入字典,导入之前保存的字典即可,汉化狂人会自动帮你汉化,若软件有更新新的选项,新的单词、语句则需要自己动手查找,总体来说节省了相当多的时间。
- 完成resources.arsc的汉化并保存后,可以先把resources.arsc放一边了,下面进行***.xml文件汉化。
2、***.xml文件汉化
- ***.xml文件汉化其实和resources.arsc文件汉化方法一样,这里不做过多阐述,详见上面的resources.arsc文件汉化过程讲解。下面说明一些要注意的地方。
① ***.xml文件基本都在res目录里
&&- drawable
&&- drawable-hdpi
&&- drawable-land
&&- drawable-land-hdpi
&&- drawable-mdpi
&&- drawable-port
&&- drawable-port-hdpi
&&- layout
&&- layout-land
&&- layout-port
为了方便汉化,可以把res整个文件夹从apk安装包中拖出来,再逐个打开res文件夹里的***.xml文件,查找需要汉化的单词,语句。
② 大多数情况下,需要汉化的单词、语句都在res\layout以及res\xml目录中的***.xml文件里。
③ 完成汉化保存***.xml文件后,将整个res文件夹拖回apk安装包中即可。
3、classes.dex文件汉化
* 完成resources.arsc文件和***.xml文件的汉化后,可以先将这些文件拖回apk安装包中,签名,传到手机安装,看看还有没有单词和语句漏汉,若有的话,且在resources.arsc文件和***.xml文件中找不到,那么这些单词和语句基本就在classes.dex文件里,此时需要对classes.dex进行汉化。
- 汉化classes.dex文件,首先需要将classes.dex文件解包,这时需要用到解包工具smali/ baksmali(帖子附件有提供),下载解包工具附件,解压,里面分别有WinXP和Win7对应的版本,按自己使用的系统选择。解压后,将Xtemp文件夹复制到D盘根目录。
- 准备好解包工具后,将classes.dex文件从apk安装包里拖出来,放到刚刚的Xtemp文件夹内,若是WinXP用户,用鼠标将classes.dex文件拖到undex.bat文件上,会弹出CMD命令窗口自动解包classes.dex文件,完成会提醒按任意键关闭窗口;若是Win7用户,双击dex.bat文件,按提示操作即可。解包成功后,Xtemp文件夹内会多出classes文件夹。
- 要对解包出的classes文件夹里的文件进行汉化的话,需要用到文本编辑工具Notepad++ Portable(帖子附件有提供),下载附件,解压,运行Notepad++ Portable文件夹内的Notepad++ Portable.exe,打开Notepad++ Portable.exe程序。(若软件打开后为英文,打开——Settings——Preferences,在Loclization处选择中文即可。)
* 下面开始讲解classes.dex文件的汉化:
① 先确定需要汉化的单词,以LauncherPro为例,软件中有“Please wait ...”在classes.dex文件中。在Notepad++ Portable中按Ctrl+Shift+F键调出文件查找窗口,在“查找目标”处输入要搜索的“Please wait ...”,将“目录”定位至Xtemp文件夹的classes目录(就是刚刚解包出来的classes文件夹),点击“全部查找”,如图:
37.jpg (37.5 KB, 下载次数: 86)
13:21 上传
搜索结果:
38.jpg (54.75 KB, 下载次数: 99)
13:21 上传
② 双击搜索结果中的黄颜**域,即可跳转至该单词、语句的字段,进行修改,如图:
39.jpg (63.21 KB, 下载次数: 98)
13:21 上传
- 修改完成后,点击“保存”图标保存,如图:
40.jpg (45.89 KB, 下载次数: 107)
13:21 上传
* 以此类推,所有需要汉化的单词、语句都可以通过“文件查找”搜索到。汉化完成并保存后,就可以重新打包classes.dex文件了。
③ 重新打包classes.dex文件。若是WinXP用户,右键Xtemp文件夹内的redex.bat文件,选择打开,之后会弹出CMD命令窗口自动重新打包,如图:
41.jpg (32.09 KB, 下载次数: 99)
13:21 上传
完成后按任意键退出窗口即可,此时Xtemp文件夹内多出了out.dex文件,这是重新打包后的classes.dex文件,将其文件名重命名为classes.dex,再拖进apk安装内,签名后就可以安装了。
- 若对软件的汉化熟悉后,用“文件查找”搜索要汉的单词、语句时,可以直接输入“const-string”,因为基本上这些单词、语句都在const-string后面,如图:
42.jpg (51.95 KB, 下载次数: 104)
13:21 上传
- 对于刚刚接触汉化的人,dex汉化这部分最好先在汉完arsc和xml文件后,把软件装上去查找没有汉完的单词、语句,然后再到dex里查找汉化,软件上没有的单词,就不要多汉,不然出问题了很难查找,dex重新打包后,那些中文是搜不出来的,所以很难修改。切记,宁可少汉,也不要多汉,即使少汉了,日后还可以补汉上去。
* 传统的汉化方法大致就这样,难度并不大,万事都是熟能生巧。
4、其它文件类型汉化
- 除了resources.arsc、***.xml、classes.dex这三中常见的文件类型需要汉化外,有些软件还有另外一些文件需要汉化,例如txt、html、png等文件。
* 下面对这类文件的汉化作下讲解:
① txt汉化,txt之类的文本文件可以直接用Notepad++ Portable打开,难度不大,将里面的内容修改成中文后保存即可。这类文件大部分用作显示关于信息、帮助信息等,所以基本上都是一些整句句子。另外,若保存后在手机上这些内容显示乱码的话,可以尝试将文件格式更改为UTF-8格式(在Notepad++ Portable中打开格式——转为UTF-8编码格式)。
②html文件的汉化也和txt文件类似,可以用Notepad++ Portable汉化,完成后保存即可,需要注意的格式问题也和txt文件一样。另外要注意的是这类文件里面有代码,熟悉汉化后对这些代码自会有相应的了解,例如&p style=&color:red& align=&center&&,表示这段代码后的文字内容以红色、居中显示。
③ png图片文件通常都是用Photoshop来修改的,部分软件是通过调用图片来达到显示选项的目的,而单词又在图片上,所以需要通Photoshop将图片上的单词修改成中文,保存后再拖回apk安装包中替换原文件即可。这个只需要Photoshop上的一些最基本的操作,难度并不大,就不作过多阐述了。
该用户从未签到
本帖最后由 鱼儿哥帅 于
13:33 编辑
二、APKTool汉化
- 自从有了APKTool后,Android的软件汉化就迎来了一次革命。
通过APKTool,不仅可以对软件进行汉化,还可以精简软件语言、去除广告(后面会讲到)。相较于传统的强制汉化方法更有灵活性。
* APKTool汉化优点如下:
- 反编译软件安装包,直接修改语言包或添加语言包,大大减少软件汉化后出问题的几率
- 可精简无用的语言
- 可用来去除广告
1、下面讲解下APKTool汉化的基本知识
* 解包/打包
- 先下载APKtool工具包(帖子附件有提供),解压,将APKTool v1.3.2文件夹放至D盘根目录。
- 将需要反编译的apk安装包放至APKTool v1.3.2文件夹内(以LauncherPro为例,文件名为LauncherPro.apk)
- 打开CMD命令行窗口(开始——运行,输入cmd,确认),如图:
43.jpg (16.8 KB, 下载次数: 93)
13:31 上传
在命令窗口中输入命令,定位至APKTool v1.3.2文件夹,如图:
44.jpg (29.75 KB, 下载次数: 105)
13:31 上传
输入命令反编译apk安装包,如图(红色方框部分为反编译命令):
45.jpg (52.35 KB, 下载次数: 98)
13:31 上传
* 命令说明:apktool d LauncherPro.apk launcherpro
- apktool d为反编译命令,其中d代表decode
- LauncherPro.apk为被反编译的apk安装包的文件名(可以自己定义)
- launcherpro为存放反编译后的文件的文件夹(可以自己定义)
2、下面开始讲解APKTool的汉化方法:
① 添加、汉化语言包
- 反编译完成后,进入launcherpro文件夹(在D:\APKTool v1.3.2路径下)
多数情况我们只需要修改launcherpro\res目录下的文件
- 在res文件夹中,我们可以看到有很多values-***的文件夹,这就是语言包。
- values是英文语言包,values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地区的语言包都是精简的对象,可以不过多了解。
- 在values文件夹里,通常有arrays.xml、strings.xml等语言文件,要汉化这些文件,可以用Notepad++ Portable打开,如图:
46.jpg (148.45 KB, 下载次数: 111)
13:31 上传
- 我们只需要将&*****&/string&间的*****内容改成中文就行了。
* 若要汉的软件没有中文语言包,可以自己在res目录下新建values-zh-rCN和values-zh-rTW文件夹,再把values文件夹内的原arrays.xml、strings.xml语言文件复制到values-zh-rCN和values-zh-rTW文件夹,然偶将语言文件内的单词、语句修改成中文并保存即可。
② 汉化解析
- 了解清楚语言包的问题后,大家也就会明白,APKTool的操作步骤其实也很简单,反编译——修改或添加语言包——重新打包而已,但费时的就是在修改、添加语言包这一块,比传统的汉化方法要更费时间,但所带来的好处是传统汉化方法无法相比的。
- 另外,除了res文件夹内有语言包需要汉化外,在res文件夹内的layout和xml文件夹内也会有文件需要汉化,同样是用Notepad++ Portable打开,这些文件里面都是代码语句,需要通过搜索功能找到需要汉化的单词来汉化,所以这里建议大家先把原版的软件装上去,再对照单词,边搜索,边汉化。
③ 重新编译打包
- 用Notepad++ Portable修改、添加好语言包后,就可以重新编译打包了。
- 方法如图下:
在刚才的命令窗口输入如下命令,如图:
47.jpg (57.72 KB, 下载次数: 97)
13:31 上传
* 命令说明:apktool b launcherpro
- apktool b为重新编译命令
- launcherpro为需要编译的目录(就是存放刚刚反编译后的文件的文件夹,名称可以自定义)
- 重新编译完成后,launcherpro文件夹内会新增一个dist文件夹,里面的LauncherPro.apk文件就是重新编译好的apk安装包,签名后即可安装。
* APKTool的汉化流程大致就这样,还是那句话,熟能生巧,多多练习。下面是其它说明。
- 精简语言,这个很简单,只需要将res目录内非values、values-zh-rCN、values-zh-rTW的其它values-***语言包文件夹删除即可。
4、注意事项
- 部分情况下,在精简语言后,重新编译打包时,命令窗口会提示public******错误,这是由于values语言包文件夹下的public.xml文件给非values、values-zh-rCN、values-zh-rTW的其它values-***语言包文件里的语言文件定义了字段,但这些语言包都被精简了,定义不了,所以会出错。解决方法有两个:
* 一是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),到相应的语言包里找到那行未定义的代码,复制到values-zh-rCN、values-zh-rTW语言包文件夹内的strings.xml语言文件中。
* 二是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),直接到values语言包文件夹下的public.xml文件中删除没有定义的那几行代码。
该用户从未签到
本帖最后由 鱼儿哥帅 于
13:41 编辑
三、去广告
- 先了解下软件的广告原理
一个软件若要显示广告,需要先导入SDK,并在AndroidManifest.xml中注册。
res\layout目录内的xml文件就包含有广告界面的配置代码,修改这些代码就可以去除广告界面。
另外还要屏蔽广告下载源,不然只是单单不显示广告界面而已,软件还会下载广告所需的数据,耗费流量。
目前Android的广告供应商有两个,一个是Admob,一个是Google Ads,前者已被后者收购,但两者SDK依然独立。
- 广告代码
Admob的广告代码为:
&com.admob.android.ads.AdView
android:id=”@+id/ad”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” /&
Google Ads的广告代码为:
&com.google.ads.GoogleAdView
android:id=”@+id/adview”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” /&
- 广告下载源
Admob的广告下载源:
Google Ads的广告下载源:
* 去广告步骤:
1、去除广告下载源
- 解包classes.dex(方法上面已讲过),用Notepad++ Portable搜索广告下载源地址(若不知道软件用的是哪个供应商的广告的话,最好两家的下载源都搜索下),如图:
48.jpg (38.23 KB, 下载次数: 111)
13:40 上传
- 搜索结果如下:
49.jpg (34.34 KB, 下载次数: 95)
13:36 上传
- 将广告下载源地址修改成无效的地址(例如0.0.0.0、192.168.1.1等),如图:
50.jpg (60.13 KB, 下载次数: 110)
13:35 上传
- 完成后保存,重新打包classes.dex,拖回apk安装包替换原文件。
2、去除广告界面
① 将刚刚已经替换了classes.dex文件的apk安装包用APKTool反编译。
② 用Notepad++ Portable搜索广告代码(上面已列出)
- 如图,将搜索路径定位到res文件夹(就是反编译后的res文件夹),代码只搜索开头就行了,如:com.admob.android.ads.AdView 和 com.google.ads.GoogleAdView。
51.jpg (37.03 KB, 下载次数: 101)
13:35 上传
- 搜索结果:
52.jpg (101.42 KB, 下载次数: 111)
13:36 上传
③ 双击黄颜**域,修改下图上方的代码
android:layout_width=&fill_parent& 修改为 android:layout_width=&0.0dip&
android:layout_height=&wrap_content& 修改为 android:layout_height=&0.0dip&
53.jpg (82.96 KB, 下载次数: 93)
13:36 上传
54.jpg (68.85 KB, 下载次数: 107)
13:36 上传
- 将所有搜索到的代码按照上面修改,完成后保存,用APKTool重新编译打包,可签,安装即可。
* 再作下解释:
android:layout_width=&fill_parent& 修改为 android:layout_width=&0.0dip&
android:layout_height=&wrap_content& 修改为 android:layout_height=&0.0dip&
之所以这么修改,是因为要让广告窗口不显示,android:layout_width定义的是广告窗口的宽度,android:layout_height定义的是广告窗口的高度,0.0dip代表0像素,将两者后面的值修改为0.0dip,那么高和宽都是显示0像素,等于不显示,达到了去广告窗口界面的目的。
今日推荐 /1
点击图片,扫码关注『喂diu』微信看妹子每天耍宝卖萌播报新闻,还有更多爆笑视频节目!参与互动送移动电源!每天都送!你拿不拿?}

我要回帖

更多关于 modem log is stopped 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信