实例解说怎样修改和反编译ROM定制教程.docx
- 文档编号:9875122
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:19
- 大小:898.88KB
实例解说怎样修改和反编译ROM定制教程.docx
《实例解说怎样修改和反编译ROM定制教程.docx》由会员分享,可在线阅读,更多相关《实例解说怎样修改和反编译ROM定制教程.docx(19页珍藏版)》请在冰豆网上搜索。
实例解说怎样修改和反编译ROM定制教程
这篇文章仅在向新手介绍入门方案,如果您已入门,请Google解决您需要的资料。
欢迎大家跟帖讨论,并丰富本文,但请不要用顶,等纯粹无意义的回复。
作者不喜欢。
如果是修改CM的apk很简单,修改原始代码使用命令单独编译该apk就可。
这篇文章主要讲那该死三星闭源系统是如何在有限的环境下最大化修改你的东西。
本人不是什么高手,只是接触android的时间比较长(从G1就开始用起),爱好收集andorid历史上比较有代表性的机器,时常爱摆动手机,倒腾ROM,因为个人时间问题,一直没制作完整的作品(我比较懒XD),就连自己使用的ROM还停留在CMbeta3中文化版本。
个人关注aosp比较多点,很高兴我编译的中文版能将CMfori9000推到大家面前,让更多的I9000用户了解到CM,当然从G1时代开始刷CM的兄弟们自然会知道CM的优秀。
CM发展至今,已经不仅仅是手机ROM,他代表了一种精神,开源和共享(国内论坛有多少?
),以及无所不能——这是我欣赏和推崇的。
如果将CM放大到无限的时间和个人团体集合,android会支持理论上一切可以运行它的设备。
一:
基本准备!
准备工具:
AndroidSDK
java,下载适合您系统的版本。
您需要的是apktool或者apkmanager4.9(貌似最新版本了)。
推荐用apkmanager4.9,下面主要介绍该工具使用方法。
以上工具Windows和Linux下都有。
三星I9000FROYO系统应用软件在/system/app同大多数Android系统一样。
但注意三星有着自定义的framework,在/system/framework/twframework-res.apk。
如果您要修改三星的systemapp就需要用到他。
首先我们要提取出系统软件。
有两种方法,第一刷完机,获取root权限之后用以下命令:
1. windows和linux下面的命令同样:
2. adbpull/system/ > 3. //将手机system目录copy到您电脑的某个路径中 复制代码 或者解压缩三星官方刷机包: 挂载factoryfs到某路径: 然后拷贝所有文件。 1. linuxonly: 2. mount-oloop,rwfactoryfs.rfs > 复制代码 二: 反编译apk文件 对于三星i9000反编译apk文件需要做如下工作,安装framework,至于是否要将odex和apk文件合并这里无所谓。 因为不想做可安装包(做了在三星系统中也不能安装,签名不一至XD) 1.apktooliftwfamework-res.apk 复制代码 apkmanager使用方法: apkmanager的脚本script.bat运行会检测adb是否存在,如果您正确安装了sdk,并设定了环境变量,这里就能检测到。 否则请将adb拷贝到apkmanager主目录下来。 将需要修改的apk文件放到place-apk-here-for-modding目录内,然后执行script.bat,会看到很多选择。 这里重点讲: 1. 9 Decompileapk 2. //反编译APK文件,并输出到products目录。 3. 11 Compileapk 4. //打包好apk文件。 复制代码 基本执行步骤就是9,然后修改,再执行11打包。 当然,你无法得到三星的签名,所以迂回打包方案: 1. 11 Compileapk 2. //执行打包,提示是否系统文件 3. 选择y 4. //提示blabla,是否复制原始文件 5. 提示y 6. //提示blabla,按任意键继续。 这里不要动。 下面进入keep文件夹 复制代码 1. //keep是原始apk的文件这里所有的文件将会保持原样打包到新apk里 2. //如果您修改valuesvalus-xx语言包,请到keep文件夹里删除resources.arsc 3. //如果您修改layout或者xml文件夹里的xml文件请同样删除旧的xml文件 4. 按任意键继续; 5. 将在place-apk-here-for-modding目录里生成新的apk,不过带有unsigner前缀。 复制代码 1. //用winrar打开unsigerapk和原始的apk文件,将修改过的文件拖到原始apk包里覆盖。 2. //替换回系统,重启: 3. adbpushyour.apk/system/app/your.apk 4. 以上步骤无需重签名,汉化和修改布局,等不需要反编译odex文件。 复制代码 三: 汉化和修改? 首先您已经掌握了以上的修改apk方法。 本帖隐藏的内容 下面谈如何汉化,一个纯正的欧版rom,除google应用,和第三方应用外,其他系统apk是不带中文语言的。 下面就以TouchWiz30Luancher.apk为例子: 执行9,反编译后,进入products/TouchWiz30Luancher.apk/res/目录中,可以看到这个launcher其实是i9000和tab共用的。 先不管这些,主要是修改语言包。 删除类似。 values-it,values-en-rUS文件夹。 但请保留values-hdip,values-hdip-xxx,values-land,values-port,等文件夹,这些未必全有但这些不是语言包。 建立一个values-zh-rCN文件夹 (简体) 将values目录下strings.xmlarrays.xml拷贝到values-zh-rCN里,对于一个app文件来说,汉化这两个基本就够了。 framework-res.apk另讲。 1. 用notepad2打开strings.xml,这是主要语言包。 翻译XXXX部分: 如“launcher“翻译成“主屏幕“ 2. 复制代码 1. 对于arrays.xml,这个基本是菜单里的选项, 2. 如果看到表示选项的值(带_values),请不要翻译。 如: 3. 4. 5. 6. 7. 请保持原样。 8. 翻译完成后,执行打包步骤。 复制代码 删除语言包后报错? 本帖隐藏的内容 刚刚有讲到删除了一部分语言包,有些strings是是该语言独享,并且values中的srings.xml亦没有,那么删除它们合成的时候报错是必然的了。 报错了怎么办? 最简单的就是别删语言包。 进阶方案: 只想保留英简繁三语,其他一定要删除。 请看下文: 1. 到apkmanager的主目录下看log。 2. 会告诉您public.xml行号xxxx资源不存在。 如果仅仅是删除语言包产生的错误 3. 打开public.xml,比对log文件中的行号,将其删除(删除时请注意保留该行\号,以免接下来的行号不对应log中的错误行号而导致误删除。 ) 4. 重新执行合成步骤,看看是否报错,如果您正确处理掉多余的string,那么将不再报错。 复制代码 处理报错的唯一方法,不是问为什么会报错,请看LOG文件,会详细列举报错原因,如果您用apkmanager从来不看日志文件,那么就如同从没入门过一般。 如何处理framework-res.apk? 基本上大家都知道,framework-res.apk里的语言包种类,在大部分情况下决定settings语言切换的选项种类,那么如何对这个包删减和增添呢(一般我们只保留英语,简体中文,和繁体中文)? framework-res.apk也是一个apk,比较特殊,但修改方法同一般apk就可以。 1. 将raw-xx文件夹删除,只保留raw,raw-zh-rTW,raw-zh-rCN三个 2. 将values-xx以及values-mcc数字-xx,删除,但保留values-landvalues-portvalues-hdipvalues-zh-rCNvalues-zh-rTW,values-mcc数字-zh-rCN,values-mcc数字-zh-rTW,等 3. 没有中文语言包,建立,拷贝values内的过来,并汉化。 并且将其中的map相关参数,改成中国(请参照其他中文ROM) 复制代码 汉化framework是一项艰苦的工作,需要毅力和时间,以及细心。 有些选项和词语不能过长,否则越界显示不全。 汉化工作是有偷懒的方法,除非您建立了一个完善的汉化资源库,第一次汉化千万不要使用这方法,可以参照词典取实际意境翻译,但千万不要google翻译一下。 1. 请备份原始的framework-res.apk,并制作成刷机包 2. 替换回去,您猜对了,重启之后,不FC的话,测试系统菜单,看看是否汉化完成了! 3. 如果FC,请进入recovery模式还原回来,然后再修改测试,直到成功为止。 复制代码 对于三星ROM,即使你修改了framework-res.apk,只保留了英语,简体,繁体三语之后,还是远远不够的,因为三星还多了一个twframework 如何处理twframework? 说到底twframework-res.apk只是一个特殊的apk文件,他有着apk文件的特性(可以被反编译XD),亦有着区别app的特点,包含系统的资源(大部分是图片资源,以及菜单,按钮样式等),不能随意删除。 此楼同步更新: 如何读懂反编译后的代码? 反编译后的代码具有一定的可读性,但比起原始代码可读性要差,尤其是smali文件;下面谈谈如何读这个res文件夹。 此楼同步二楼内容更新,战线开太长,更新会比较慢,我要整理一下思路,会一边写,一边重新排版,有可能早上和下午读的内容排版有很大不同,不要介意。 呃,反编译完一个apk之后,res文件夹里有很多xml文件,新手拿到基本会无从下手,下面简单谈谈如何读一个xml文件。 drawable文件夹,一般用来放一些图片(及少)以及交互样式: XML。 1. drawable="@drawable/blabla_pressed"/> 2. drawable="@drawable/blabla_focused"/> 3. drawable="@drawable/blabla_normal"/> 4.//定义了,按键三种状态的样式,使用到的素材在@drawable文件夹中,这个@drawoable在那里? 320X240的荧幕在drawable-mdip,我们的i9000就在drawable-hdip里面。 复制代码 知道了这一点,我们就可以很轻松的修改一个按钮的交互样式,你所作的不仅仅是替换图片了,可以add图片,并在public文件中添加strings,但要记住,该strings必须在该类别的最后。 layout文件夹,用来存储布局样式。 如果有横竖屏界面的话,还会有layout-port,layout-land。 以及区分分辨率的layout-mdip,layout-hdip等。 values以及values-xx,这里是调整软件默认设定值以及界面语言。 当然还有一个XML文件夹。 很多东西都要靠自己摸索。 下面举例我是如何将froyo的launcher2修改成为姜饼样式的。 1.第一步,分别从2.2和2.3的SDK中提取两个launcher2.apk。 分别反编译这两个包,并保持2.2的launcher2.apk在apkmanager里为当前编辑状态。 2. 3.对比drawable-hdip,drawable-hdip-land? 将相同命名的图片覆盖过去,至于壁纸以及一些图标都是一样的就不用复制了。 4. 5.删除一切带有mdip后缀的文件夹。 删除所有values-xx,但要保留values-hdip,values-land,values-port,未必全有,但有则一定要保留。 6.开始打包: 7. 8.//提示erro,关闭apkmanager,看log,提示某些资源不存在,在public.xml里找到,基本是wallpaper_xx。 均为mdip的壁纸资源,已经被我们干掉了,所以删除public.xml里的这些strings。 9. 10.打开apkmanager,执行11打包,充满欣喜的等待提示按y? 您错了,继续erro。 关闭apkmanager。 看log: 11. 12.//这回告诉你某些资源larger,and某资源找不到。 对比一下,居然是hdip的壁纸呢? android你有搞错没? 13. 14.怎么办,这不是build~~,所以只好删除掉。 再次执行打包,又提示一次erro,处理方法同上。 15. 16.打包,咦? 成功了。 签名安装,居然也成功了。 界面居然不需要再进行微调就很接近姜饼了。 本以为是需要微调layout底部电话和浏览器的位置的,结果省事了! 复制代码 大家可以重新操作一下,删除mdip的资源,但保留所有mdip的壁纸,打包就不会出任何错误~。 下面再计算一下hdip的壁纸数量 mdip壁纸数量+删除掉的hdip壁纸数量,到这里您似乎明白了点什么了。 关于合并apkodex文件,目前只有smali这一个方案。 所谓的各种快速工具都是批处理命令行而已。 smali地址: 1. //将 2. java-jarbaksmali.jar-x 3. //会生成out目录,里面当前的odex分解的class文件 4. 5. //将class生成为classes.dex,命令: 6. java-Xmx512M-jarsmali.jarout-oclasses.dex 7. //这步完成后,会在当前路径下生成classes.dex。 复制代码 smali工作所需要的BOOTCLASSPATH(你可以把这几个jar直接丢到smali的工作目录里去): 1. core.jar, ext.jar, framework.jar, 2. android.policy.jar, services.jar 复制代码 当然厂商定制过的ROM需要的BOOTCLASSPATH会有别于一般的AOSP,I9000的就还需要: .samsung.device.jar,seccamera.jar,sechardware.jar,twframework.jar,javax.obex.jar, com.google.android.maps.jar 复制代码 实例解说: 如何使用apk_Manager和处理报错! 好了,讲了这么多,下面就用一个实例来解说一下到底怎么操作反编译工具,和处理中途遇到的错误! 以Nexussandroid2.3.3中的相机CameraGoogle.apk来举例。 这个apk在正常的反编译后,打包是会报错了。 即使你不做任何修改,也铁定会报错XD 第一步: 将APK文件放入place-apk-here-for-modding目录(见下图) 第二步: 执行Script.bat,并选择9 第三步: 进入projects目录,对资源进行修改调教(见下图) 我添加了values-zh-rCN(中文包),并从values里复制strings.xml过来,并汉化了(见下图) 大功告成,合成吧! 输入11 (见下图) 咱就看看log日志吧,看到在res\xml\下两个xml文件中的一坨资源在com.android.camera这个包里没有,可是明明在values\public.xml已经存在的(见下图) 找了半天没错误,灵光一闪是不是包名不一致.......,对比一下果然如此(见下图) 在xml下修改一下包名,和CameraGoogle.apk一致 合成,哈哈哈,成功啦! 赶紧的按Y确认,再按Y确认(见下图) 到这里,停住,因为我们修改了语言包,所以进入keep目录删除旧语言包,(keep目录里存在的文件,表示生成新apk的时候,保持不变)(见下图) 用winrar打开unsignedCameraGoogle.apk和CameraGoogle.apk,将生成的unsignedCameraGoogle.apk中的语言包拖到CameraGoogle.apk中替换。 (见下图) 然后替换回手机,并将权限修改为rw-r--r--,这里不需要对apk重新签名,也不需要合并apk和odex文件。 大家可以思考一下: 之前修改的XML\下的两个文件camera_preferences.xml和video_preferences.xml为什么不让它们生成新的,再替换过去呢? [文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意! ]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实例 解说 怎样 修改 反编译 ROM 定制 教程