Ref:http://www.addictivetips.com/mobile/what-is-odex-and-deodex-in-android-complete-guide/

Ref:http://stackoverflow.com/questions/9593527/what-are-odex-files-in-android



这篇文章主要是之前在适配安卓手机的时候整理的,大家能够參考一下:\

odexed

某些.apk档内有一些预先処理过的odex档。这些odex档是经优化後应用的一部份,这做的好処是为了优化启动过程(BootProcess)及降低占用系统的空间。因其已预先装载程序的一部份内容,而达到优化启动过程的目的。还有一方面,它添加了安全性,由于odex档在运行前被抽出并放入了系统其他位置。

deodexed

而deodexing则是将这些odexed化过的apk档又一次打包,使其成为class.dex档,因此,全部.apk相关的档案又归於系统的一処,避免了程序的某些部份由于分散而导致的冲突。对一个经deodexed流程処理的apk其内的.dex档而言,其具有被Dalvik
Virtual Machine使用的cache档,同一时候它是储存於.apk档内;相对於.dex档来说,一个.odex档,是一个优化(optimized)版本号的.dex档,并存於.apk之外,Android对全部的系统应用预设採用odex技术。当一个Android系统启动的时候,供Dalvik系统运用的Dalvik
cache靠这样odex档所建立,使得操作系统能预先了解到哪些应用将要被装载至系统,因此提高了应用的启动过程。

优缺点:

deodexing的长处是改动的可能性较高。这通常在custom ROMs还有themes广泛的被使用,大部份开发人员建一个custom
ROM的时候,会先选择deodex ROM package,由于这样不仅仅同意它可更改各种apk,也为post-install
theming 留下了空间。

还有一方面,odex档是为了高速建立dalvik
cache而产生,移除它们代表的是添加启动时间。可是这也仅仅是对第一次启动而言,由于在第一次启动经过deodexing之後,cache也会建立。仅仅有在dalvik
cache不存在的情况下,应用的启动才会花较长的时间。

怎样合并odex和apk:

ref:http://blog.csdn.net/linuxer_hy/article/details/8223320

ref:http://blog.csdn.net/xiaoyaovsxin/article/details/8486242

怎样逆向:

ref:http://blog.sina.com.cn/s/blog_7c6cbaf601019604.html

首先,我们须要将 /system/framework/framework.jar 取出的,到 eclipse 的 ddms, 至 File Explorer 可将该档案 pull 出

下下面指令開始用 baksmali 逆向,有些机型会有 framework2.odex,这也是须要逆向的 odex 档:

$java -jarbaksmali-1.4.1.jar -c :core-junit.odex -x framework2.odex

使用baksmali-2.0.2.jar 逆向的过程中,出现例如以下错误讯息:

Error occured whileloading boot class path files. Aborting.

org.jf.util.ExceptionWithContext:Cannot locate boot class path file /system/framework/core.odex

at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:217)

at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:161)

at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:59)

at org.jf.baksmali.main.main(main.java:274)

解决的方法:到framework.odex档的folder外,用下面命令

$java -jar baksmali-2.0.2.jar -x -a 18 -d ./system/framework/./system/framework/framework.odex

然後会得到一堆.smali档,於是再下指令将那些.smali打成class.dex档

$java -jar smali-2.0.2.jar ./out-framework -o ./class.dex

再使用dex2jar

$ ./d2j-dex2jar.shclass.dex

最後再使用 jd-gui

$./jd-gui class-dex2jar.jar

系统框架源代码的zip包就产生了,然後就能够開始看这个系统的一些实现细节了。

逆向 Framework.jar的更多相关文章

  1. Spring Framework jar官方直接下载路径

    SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

  2. 修改替换/system/framework/framework.jar后重启手机为何没有效果?

    自Android 5.0开始android默认使用art(Android4.4开始有实验性质的art),取代原来的Dalvik, art会加载boot.art和boot.oat两个文件(静态编译优化, ...

  3. Android Studio引用自定义的framework.jar包

    1.在app/libs/目录下添加framework.jar包. 2.打开build->Edit Libraries and Dependencies,把libs/framework.jar放到 ...

  4. 解决 android push framework.jar 不生效的问题

    . . . . . 在 Android 采用 ART 虚拟机后,为了提高运行时效率,在编译期间会将 jar 包中的 dex 文件编译为 odex.vdex 等文件.而这些文件并不存放在 framewo ...

  5. Robot Framework(十七) 扩展RobotFramework框架——扩展Robot Framework Jar

    4.4扩展Robot Framework Jar 使用标准JDK安装中包含的jar命令,可以非常简单地向Robot Framework jar添加其他测试库或支持代码.Python代码必须放在jar里 ...

  6. Description Resource Path Location Type Missing artifact com.********:framework:jar:1.0.2 pom.xml /项目名 line **** Maven Dependency Problem

    问题具体描述如下图所示: 对于该问题本人是这么解决的. 在window下[Preferences]目录找到[Maven]下的[usersetting] 查看local repository 里面的路径 ...

  7. [教程] 【【【【odex教程之jar】】】】/system/framework里面的jar做odex g13

    dexopt-wrapper core.jar core.odex dexopt-wrapper ext.jar ext.odex dexopt-wrapper framework.jar frame ...

  8. spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)

    spring官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

  9. android源码framework下添加新资源的方法

    编译带有资源的jar包,需要更改frameworks层,方法如下: 一.增加png类型的图片资源 1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/re ...

随机推荐

  1. Java 实现观察者(Observer)模式

    1. Java自带的实现 类图 /** * 观察目标 继承自 java.util.Observable * @author stone * */ public class UpdateObservab ...

  2. iText 文本

    iText中用文本块(Chunk).短语(Phrase)和段落(paragraph)处理文本. 文本块(Chunk)是处理文本的最小单位,有一串带格式(包括字体.颜色.大小)的字符串组成.如以下代码就 ...

  3. ProgressDialog使用汇总

    ProgressDialog使用  ProgressDialog 从继承AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDi ...

  4. ALV编辑行内容有改变时候操作

    ALV编辑行内容时,调用方法 check_changed_data返回变量 gf_valid = 'X'的话说明alv行有变化. 以下拿alv维护表程序部分代码做例: DATA: gr_alvgrid ...

  5. VC,一条会被鼠标移动的直线

    对话框中的小红线可以被移动的 一.类名是 CBinarizationDlg 二.定义两个变量BOOL m_flag;int nPos;在构造函数初始化m_flag = false;nPos=256;三 ...

  6. Shell printf 命令

    Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序. 标准所定义,因此使用printf的脚本比使用echo移植性好. printf 使用引 ...

  7. 【Demo 0004】Java基础-类封装性

    本章学习要点:       1.  Java封装特性;       2.  掌握类的定义:       3.  掌握类的调用方法; 一.封装特性        Java 纯面向对象语言,面向对象语言遵 ...

  8. 浅析innodb_support_xa与innodb_flush_log_at_trx_commit

    很久以前对innodb_support_xa存在一点误解,当初一直认为innodb_support_xa只控制外部xa事务,内部的xa事务是mysql内部进行控制,无法人为干预(这里说的内部xa事务主 ...

  9. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  10. Abot 爬虫

    Abot 爬虫分析-整体结构 1. 引言 在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜.如果按照St ...