安卓手机odex化与刷机包制作

写于2012年2月7日

23:23

由于打算使用一个稳定的rom,不打算频繁刷机了,于是决定odex化所有app

解释下为什么要做odex优化吧,其实不做也可以。

但是做了之后,能加速程序的启动速度,开机也会加快。

最重要的是大优的RAM的确少,做了odex之后可以释放更多的ram,这可以保持系统的流畅性

引用一下:

本人很早就像搞这个 但是一直未果 请教几人也无任何结果

今无意中发现此教程 而且也亲测成功了 特转来与大家分享

关于odex到底能否提速和提速多少的问题本帖不做讨论

什么是ODEX?

ODEX是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。

这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。

什么是dalvik-cache?

当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。

源文档 <http://bbs.anzhi.com/thread-4848109-1-3.html>

准备工作:

用Recovery进行一个备份,预防出现意外,不能开机。

请确定你的电脑可以正常连接手机调试模式。

请确定你的电脑安装好JAVA。

请确定你的system有10~20M空余。

说明:

Android系统中运行的程序包主要分framework,system/app,data/app,三个路径,开机的时候启动内核后,就会逐个启动framework里的jar框架程序,再启动system/app的开机自启程序。

如果你想把整个ROM都odex化,就必须先将framework的先做,因为在odex过程中,需要依赖framework进行。而且在odex framework时,每个文件都要严格按照顺序,否则不能开机。如果你在其他app做了odex,Sorry,你不能odex framework。

源文档 <http://bbs.anzhi.com/thread-4848109-1-3.html>

总之 ,就是依次odex化 framework,system/app,data/app

顺序不能改

下载odex工具包

一、ODEX framework

运行  复制文件.bat

等待完成,然后按WIN+R,输入CMD,打开CMD,依次输入:

adb shell回车

su

回车

cd system/framework

回车

dexopter fr

等待完成

然后重启一次。如果你发现不能开机,请进入Recovery 清除cache。还是不能开机,Sorry,可能是失败了,两个解决方法,一个是使用Recovery+ADB删除odex文件,二是恢复系统。(不过不成功的,都是没认真看我教程的人)

开机后,你会发现framework目录下多了些odex文件,然后用你知道的方法,把所有jar文件复制到电脑上,那个framework-res.apk不用管它,然后用winrar等打开,把里面的classes.dex文件删除掉。关闭,每个文件都这样做。

然后把所有framrwork文件制作成一个zip升级包,签名。进入Recovery安装。开机。这样做是为了节约空间。

源文档 <http://bbs.anzhi.com/thread-4848109-1-3.html>

二、接下来是 安卓刷机包制作的内容

META-INF\com\google\android 下有

update-binary 和updater-script

updater-script内容如下:

ui_print("updating system...");

run_program("/sbin/mount", "/system");

show_progress(1, 15);

package_extract_dir("system/framework", "/system/framework");

run_program("/sbin/umount", "/system");

ui_print("Installation complete!");

run_program("/sbin/mount", "/system");这句话是挂载分区

等价于mount("ext3", "EMMC", "/dev/block/mmcblk0p12", "/system");   注意 这个是4个参数的。

show_progress(1, 15);是进度条

具体有关rom制作请看

安卓刷机及刷机包制作教程

http://hi.baidu.com/spring_badboy/blog/item/ccf2072dbab1082f359bf706.html

如何制作刷机补丁和CWM刷机包ROM(含工具与签名)

http://bbs.gfan.com/android-1896274-1-1.html

【转帖】Android平台刷机包制作研究(1)

http://bbs.mfunz.com/thread-13499-1-1.html

META-INF这个文件是有关签名的

接下来是system文件夹

所有jar已经去除了dex

打包成zip

用autosign签名

这样就可以进入recovery刷入

注:若不制作刷机包的话。

就把删除dex文件的jar文件重新放回去. 记住, 先放到system 修改好权限 644 你们懂的. 然后再覆盖进去,这样你框架就odex好了 。

引用一下

ODEX. Framework,System.Data 全部附件及易懂教程  http://bbs.anzhi.com/thread-4779013-1-1.html

还有刷机包updater-script的语法(进阶):

创建一个名为update-script的文件,其内容如下(高亮部分):

1 show_progress 0.1 0

2

3 copy_dir PACKAGE:system SYSTEM:

4

5 show_progress 0.1 10

6

行1和行5:显示进度条

行3:复制刷机包中的system文件夹到Android的/system

注意:你应该在文件的最末尾多添加一个空行(也就是行6)

将C:\goapk压缩中的所有内容压缩为zip包(千万记住:是压缩goapk这个文件夹中的内容,不是goapk文件夹本身)

为goapk.zip签名

签名命令:java -jar signapk.jar certificate.pem key.pk8 goapk.zip update.zip

注意:你可以在这个帖子中找到为刷机包签名的教程和工具

将update.zip文件复制到SD卡中,然后手机进入recovery界面来刷入这个刷机包

进阶学习:(以下仅作参考,因实际情况不同,可能会有一定的出入。但是极度推荐学习本部分)

update-script 语法参考(在Android源码的recovery.c文件中定义):

copy_dir

语法:copy_dir <源目录> <目标目录> [<时间戳>]

描述:复制<源目录>中的内容到<目标目录>中。如果<源目录>中没有同名文件进行覆盖,那么<目标目录>中的原始内容会仍然存在不变。

示例:copy_dir PACKAGE:system SYSTEM:,这个命令会把刷机包中的system文件夹复制到手机的/system文件夹中

format

语法:format <根目录>

描述:格式化一个分区。

示例:format SYSTEM:,这个命令会格式化整个/system。注意:格式化时所进行的数据删除操作是不可逆转的。

delete

语法:delete <文件1> [... <文件N>]

描述:删除文件。

示例:delete SYSTEM:app/Calculator.apk,这个命令会删除手机system/app文件夹中的Calculator.apk文件。

delete_recursive

语法:delete_recursive <文件或目录1> [... <文件或目录N>]

描述:删除一个文件或递归删除某个文件夹(也就是包括该文件夹中的所有内容)

示例:delete_recursive DATA:dalvik-cache,这个命令会删除/data/dalvik-cache文件夹以及该文件夹中的所有内容。

run_program

语法:run_program <执行程序> [<参数> ...]

描述:运行一个刷机包中的外部程序。

示例:run_program PACKAGE:install_busybox.sh,这个命令会执行刷机包中的install_busybox.sh脚本(命令行)。

set_perm(本命令中涉及的数值,如有疑惑,请自行Google。uid=user id,gid=group id)

语法:set_perm <uid> <gid> <属性> <路径> [... <路径N>]

描述:设置某个文件或是指定的整个目录树的所有者和权限,就像是一个‘chmod’、‘chown’、以及‘chgrp’命令的集合体。

示例:set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh,这个命令会设置手机上system分区中etc/init.goldfish.sh文件的用户组为:shell;用户为:root;权限为:所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限。

set_perm_recursive(本命令中涉及的数值,如有疑惑,请自行Google。uid=user id,gid=group id)

语法:set_perm_recursive <uid> <gid> <文件夹属性> <文件属性> <路径> [... <路径N>]

描述:递归设置某个文件夹中所有内容的所有者和权限

示例:set_perm_recursive 0 0 0755 0644 SYSTEM:app,这个命令会递归设置手机上system/app文件夹以及其所有内容的用户组为:root;用户为:root;app文件夹的权限为:所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作;app文件夹下的所有文件的权限为:所有者可以进行读写操作,其他用户可以进行读取操作。

show_progress

语法:show_progress <小数> <持续时间>

描述:为下一个操作在屏幕上显示一个进度条,自动的根据<持续时间>指定的秒数来递增进度条状态(如果实际上进度条的推进是可以确定的,那就会更加迅速)。

示例:show_progress 0.1 0,这个命令是指,操作完成后,进度条前进0.1(10%)

symlink

语法:symlink <链接目标> <链接所在路径>

描述:创建一个符合链接(就像是 ‘ln-s’)。<链接所在路径>的格式类似于这样:根目录:路径, 但是<链接目标>则是指目标文件(而且位置可能是相对与链接所在路径的)

示例:symlink /system/bin/su SYSTEM:xbin/su,这个命令会为/system/bin/su在手机system分区的xbin文件夹下创建一个符号链接,名为su

源文档 <http://bbs.zhangku.com/thread-3647-1-4.html>

三、odex  system (这个自动化  超级方便)

打开odex文件夹  -  system  data文件夹 - system odex文件夹 - 再打开那个system odex批处理文件  按提示来.很简单

发现G大的odex化工具没有删除dex。。。于是用了另一个脚本

四、odex data  (和odex system一样的步骤)  只是另打开那个data odex文件夹 .你们odexsystem绝对可以看到这个文件夹.

使用这两个自动化odex不需要像odex框架那么繁琐的删除dex文件  因为这是自动化 ~

这样就搞定啦~!!!!!!

五、关于单个文件odex化

引用:

还有如果以后你想自己添加一个apk的话,可以逐个制作odex,虽然有点麻烦,先确定之前制作frameworkdexopt-wrapper还在system/bin里,然后连接手机,(最好复制adb.exe,AdbWinApi.dll,AdbWinUsbApi.dllwindows/system32里,方便以后使用adb而不用每次打开cmd都要cd到当前目录)WIN+R输入CMD打开CMD,然后输入:

·         adb shel

·         回车l

·         su

·         回车

·         cd system/app(这个目录是你存放apk的目录)

·         回车

·         dexopt-wrapper XXX.APK XXX.odex

·         回车

完成后,把你刚才的apk文件在电脑上用winrar等打开,把dex文件删除,然后把文件拖动到我提供的ADB文件复制.bat上,选择路径,回车。完成,如果发现程序文件不存在,请重启手机。如果发现程序不能运行,请尝试签名apk。再不行就是apk不能制作odex。你可以先做完odex再一起复制到system/app,也可以先安装然后再直接在里面生成。这个有很多方法,主要靠自己灵活变通,你认为怎样做才好就怎样做。

源文档 <http://bbs.anzhi.com/thread-4848109-1-3.html>

六、关于odex化的效果与注意事项

odex化也就是相当于Zipalign优化apk性能,有什么作用。。。 

对APK应用程序进行全面的优化,使软件更加流畅的运行并且对RAM的占用率更小..更多作用呢就请自己百度一下吧!这个软件也是从其他网站搜刮回来的。。。

注意:、删除、更新程序必知:由于APKODEX文件是一一对应的,故删除程序后需要删除同名ODEX文件,现在可以利用程序来删除,也可手动删除,暂时不删除不影响使用。更新程序必须删除同名ODEX,可以先更新再删除,也可先删除再更新,否者更新的程序会提示崩溃,更新后可以用程序单独优化。。。。。。。。。。。。。。。。。。。。。运行本程序直接删除所有优化文件即可恢复原状=======================================================================================================================================

优化原理说明======》》》你用winrar打开一个APK会发现classes.dex这个文件,这个dex文件就是APK的运行代码。但是这个代码还需要经过机器翻译成本机适用的代码进行运行。

而优化后的ROM中会多出一个与APK同名的odex文件,这是dex文件的优化文件。

这么做的好处在于,原来的APK执行过程是:APK--获得dex--机器翻译成odex,然后运行。

                         而优化后的执行过程是:odex,直接运行。 

当然,这么说不完全正确,但是大概就是这样。

优点:程序开启减少了步骤,所以速度更快;

缺点:需要多占用一些空间,但是也不是太多

所有参考的内容都附上了链接

"D:\手机\apk\odex\ODEX全套.zip"附上工具

手机华为U8800,ROM是mengluole的2.3 miui ,本文作者是 ElvisZ

                                               完成于2012/2/7 23:54    转载请注明出处。

发表时间 2012年3月25日23:30:34

转载于:https://blog.51cto.com/elvisz/816869

安卓手机odex化与刷机包制作相关推荐

  1. android手机系统怎么刷机包,安卓手机系统怎么重装刷机

    安卓手机系统怎么重装刷机 手机刷机之后,可以提高手机的使用效率,可以让我们更加方便的'使用手机.那么安卓手机系统怎么重装刷机呢?下面就让jy135小编来告诉大家吧,欢迎阅读. 01下载刷机精灵并打开, ...

  2. linux手机刷机包制作工具_ROM制作工具官方下载|ROM制作工具下载 v1.0.0.59 官方版 - 绿点软件站...

    资源下载,支持线刷包(img)转卡刷包(zip):支持img/dat相互转换:ROM制作工具高效免费,为广大ROM开发者.手机维修.预装分发等人群提供快捷便利的定制服务. ROM制作工具官方简介 RO ...

  3. 魅族 刷机android 6.0,乐视X900+安卓6.0 魅族Flyme6刷机包 最新6.7.12.29R付费纯净版

    本包是乐视X900+适配版,属于安卓6.0系列,论坛的另外多个Flyme版本的,大家区别开来,不要胡乱互刷,否则会出现问题, Flyme包大约一周更新一次,经常用的可以多关注一下这个帖子,刷机之前请删 ...

  4. note4 android5.1.1,三星N9109W note4安卓5.1.1五件套刷机包固件N9109WKEU1COL5

    最新官方优化流畅系统救砖包三星N9109W note4五件套N9109WKEU1COL5(五件套)安卓5.1.1Rom线刷包 推荐使用(安卓软件园刷机精灵),内置了数万ROM刷机包一键在线刷机.覆盖9 ...

  5. android手机加密失败怎么办,安卓刷机教程_安卓手机TWRP-Recovery模式图文刷机指导...

    教程制作方:极客盟 教程更新日期:2019年10月15日 教程适合机型:(教程的理论适用于所有安卓机器) 现在很多刷机小白,不会刷机,经常在群里或论坛问大神,怎么刷机呀 怎么卡刷啊 怎么操作啊? 今天 ...

  6. linux手机刷机包制作工具_LINUX操作系统手机刷机包SBF文件资料制作修改方法

    实用标准文案 LINUX操作系统手机刷机包(.SBF 文件)制作.修改方法 By shanxin96-2007.2.20 第一种修改方法:利用WINHEX软件 一.获得 .smg 文件 获得 .smg ...

  7. linux手机刷机包制作工具_大神教你五分钟制作安卓ROM包 ROM包修改教程

    之前很多人在网上问:"如何自己制作安卓ROM包?"今天,刷机帮的小编就给大家分享一篇关于安卓ROM包制作以及修改的实用教程,感兴趣的朋友可以一起来看看,当然,老司机就直接略过. 制 ...

  8. linux手机刷机包制作工具_ROM制作工具如何制作手机刷机包?

    Android手机一台 Windows,Linux开发环境,Z工具箱 方法/步骤 1 第一期---技术资料工具(开发者必备版): 1.书籍-Android系统级深入开发--移植与调试 2.开发工具-A ...

  9. linux手机刷机包制作工具_我也来自己做刷机包

    作为一名程序员,尤其是开发Android应用程序的程序员,不会自己折腾ROM简直就是一件不好意思的事情,于是乎我就费劲巴力的上网看资料,找工具,准备自己开始制作有"中国特色"的RO ...

最新文章

  1. PHP的addslashes 函数详解
  2. java web自动化部署_JavaWeb项目自动化部署脚本
  3. ubuntu~vim操作
  4. 一秒点击屏幕次数_手机屏幕刷新率那点事儿!
  5. 人工智能——图像分析第二期练习
  6. spring-mvc教程_使用MVC模式制作游戏-教程和简介
  7. ResultMap和ResultType在使用中的区别
  8. Nexus9刷机全纪录
  9. Exchange邮件系统日志查看及管理
  10. centos7正确关机重启
  11. ASPNetCore MVC ModelValidation-ajax
  12. linux终端字符串转字符画
  13. 【vulhub漏洞复现】ActiveMQ 反序列化漏洞 (CVE-2015-5254)-01
  14. caesar java_Java之Caesar与Vigenere实现
  15. CG标准函数库——数学函数(GPU编程与CG语言之阳春白雪下里巴人)
  16. 【2021-01-11】JS逆向之美团模拟登入
  17. 2019游戏开发学习路线:游戏程序员的核心竞争力是......
  18. .rvm/gems/ruby-2.4.1@global/gems/cocoapods-1.5.0/lib/cocoapods/executable.rb:89: warning: Insecure
  19. python立方根求解_计算python中的立方根
  20. 普罗米修斯?古希腊泰坦之神?异形?不,新一代企业级监控组件—Prometheus

热门文章

  1. IE-LAB网络实验室: CCIE培训中心 HCIE认证培训 HCNA培训 CCNP培训机构 Cisco EIGRP协议简单总结
  2. Windows7 下QQ频繁掉线的解决方法
  3. 1G流量有多少,1G内存有多大
  4. 6个优秀的IT科技资讯网站
  5. 【XSY2668】排列统计 DP
  6. 简单的压缩图片的方法,压缩图片大小的步骤
  7. linux bash sed指令 sed命令(正则表达式替换)替换/etc/selinux/config参数(SELINUX=enforcing -->SELINUX=permissive)
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于的毕业生实习记录管理系统ba6a4
  9. 吃饭困难选择症python_一到吃饭不知道吃啥?美食困难选择症患者是这样解决的...
  10. 零基础学 Python 爬虫(13):urllib 基础使用(三)