❶ 合并odex和apk的时候一直出不来out文件
您好,在做合并odex的工作前你必须先装好java JDK/JRE和配置好环境变量,安装文件和配置方法网上有。下载好的smali-1.2.2.jar、baksmali-1.2.2.ja文件和framework目录中提取出来的5个文件还有你要合并的apk和odex文件必须放在同一个文件夹中。最好在C盘以外的其它盘的根目录下建立一个文件夹放进去,容易查找,比如放到D盘的apktool文件夹中(D:/apktool)。然后开始菜单——>运行 输入CMD回车。现在就需要在命令提示符中先定位到你放所有文件的那个文件夹(D:/apktool),方法:命令提示下输入D:回车,然后输入CD apktool回车,然后接着依次运行下面第二条、第三条命令即可。还有就是有的apk合并了放到其它系统中可能会出现问题,比如Settings.apk。
合并odex和 少dex的apk 为完整的apk文件
1. 下载 http://smali.googlecode.com/files/smali-1.2.2.jar 和 http://smali.googlecode.com/files/baksmali-1.2.2.jar,既然是需要**,还需要这个 apk 所在的 rom 里面的一些 jar 文件,都在 /system/framework 里面: core.jar, ext. jar, framework. jar, android.policy. jar, services. Jar 。一般在 /system/framework 目录中。
2 . 通过odex生成class文件
java -jar baksmali-1.2.2.jar -x android123.odex 注释:baksmali-1.2.2就是你刚下载好的两个文件之一,在这的名字必须和下载的那个相应文件的名字一样。把命令中的android123.odex改成你要合并的那个odex文件名称,比如:ADWLauncher.odex,此条命令和下条命令最好复制到命令提示符,手输容易出错。执行完上面这行命令后,会生成一个out 文件夹里面是android123.odex的class文件。出现问题,根据错误提示可以从rom的 /system/framework 中的**.jar放到同一文件夹中。
3. 通过class生成classes.dex 文件。
java -Xmx512M -jar smali-1.2.2.jar out -o classes.dex 注释:smali-1.2.2.jar也必须和下载好的相应文件名字一样。
4. 将classes.dex放到apk文件
因为apk是zip的mime编码类型,使用winzip或winrar直接拖入到apk改名为zip的压缩包中即可。
5. 不要忘记了签名,使用jdk中的arsigner和keytool打包重新签名即可。
如果按上面说的做了还出现错误那就把framework-res.apk文件也放到同一文件夹,在执行上面步骤2命令前先执行下apktool if framework-res.apk命令。
❷ 如何反编译Android 的apk/dex/odex,获得源码
关于APK,DEX的介绍
当我们编译一个安卓项目的时候,整个项目会被打包成一个 .apk文件。这个文件其实是一个标准的zip文件,因此可以用解压缩工具打开。这个apk文件一般都包含程序的代码(在classes.dex文件中), 资源文件, 证书, manifest 文件等。 其中对我们最重要的是classes.dex文件,因为编译后的字节码(bytecode)都是放在这个文件中。我们后面讲的反编译就是针对这个dex文件来的。
反编译普通的APK文件:
对于普通的APK/DEX文件的反编译,其实工具有很多, 包括:
ByteCode Viewer: 一个可视化的集成工具,说实话,不太好用,不够稳定,生成代码质量中等。
dex2jar + jd_gui: 这两个工具组合还可以, 用起来比ByteCode Viewer麻烦一些,但比较稳定,生成代码质量中等。
在线反编译工具JADX: http://www.javadecompilers.com/apk , 这是基于SourceForge上的JADX的开源工具来实现的。本来以为在线反编译质量不会好,但出人意料的是:JADX是我发现的最好的反编译工具, 不但使用简单(直接上传,转换,下载就ok),而且反编译出来的代码质量很高,特别是变量命名方面,可读性很不错。
反编译ODEX文件:
Android 5.0 Lollipop以后,Google用ART代替了以前的Dalvik,对于普通的app来说我们仍然可以用上面的方法来把dex文件反编译成Java源代码。但对于系统预装的App,特别是类似应用商店,播放器等, 你会发现这些应用的apk文件中找不到对应的classes.dex文件,而是会发现在其子目录下有个.odex文件。 那如何反编译这个odex文件呢?我通过google查了查,知道应该用baksmali,但从github上下载了几个版本都不行,报各种不同错误。经过反复搜索和尝试,终于找到了这篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具体方法如下:
1. 从这里下载工具包, 解压缩到本地。 这里的baksmali的版本是2.0.3. 不同版本的baksmali针对的Android内核不同。有时候高版本反倒不好用。
2. 打开工具所在目录, 按住shift键, 点击鼠标右键,打开windows命令窗口
3. 把 odex文件拷贝到该目录
4. 在命令窗口运行: oat2dex.bat *.odex. 正常情况下,应该显示OK等信息。如果报错的话,说明这个文件无法转换,后面的也不用试了。
5. 运行 oat2dex.bat *.odex temp.dex . 运行后会创建一个temp.dex文件。
6. 运行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 运行后会创建一个source的文件夹,并将temp.dex反编译到该文件夹。-a 21 表明的是Android内核的版本21
7. 运行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反编译为classes.dex文件。
需要注意的是:由这种方式反编译成的classes.dex 文件相比原生的classes.dex 还是缺少了些信息,因此反编译这种classes.dex 文件后生成的java代码可读性会更差些。
8. 用在线工具JADX 来把 classes.dex 最终反编译为java代码。
❸ 如何修改framework下面的odex文件
android系统,一般分为工程版本和用户版本。而一般用户拿到的系统,都是用户版,用户版的直觉表面上的区别就是/system/framework和/system/app下的jar和apk文件都被odex化了。
对于/system/app下的odex,我们使用baksmali工具,就可以反编译出smali文件,我们对些smali文件做修改之后,在目标机器上,使用dexopt-wrapper工具进行odex化之后,push到/system/app下就ok。但是,对于framework下面的文件,一般不能如此修改,修改之后,push到/system/framework下面的时候,一般都会把系统搞挂掉。如果framework下面文件不能修改,那么玩android系统不是缺少很多乐趣?
[Toturial][Windows] How Editing The ODEX framework files?
这个方法需要改进一下就可以适合各种机型了。
framework下面的odex进行反编译之后,在打包,push到机器上运行不起来主要有两点原因。
第一点,就是framework下面的jar包,很多都是dalvik虚拟需要使用的BOOTCLASSPATH,android对此有特别的安全机制,所有我们进行odex化的时候,需要加入$BOOTCLASSPATH
第二点,就是签名的问题,如果前面不对,那么还是会启动fail的,这个我们原有的odex文件头就可以解决。
具体的方法,我们以下面一个例子,修改android.policy.odex为例子。
我们提取目标机器扰坦渗中的android.policy.odex和android.policy.jar的,然后使用baksmali,修改smali之后,使用smali工具之后,打包成classes.dex,然后替换到android.policy.jar中。
下面开始我们的正文缓脊方法:
1,在/data/local/tmp中建立一个zangcf_changed目录和zangcf_original目录
adb shell
cd /data/local/tmp
mkdir zangcf_changed
mkdir zangcf_original
exit
2,把原始文件和修改后的文件到目标机器
adb shell
adb push ./zangcf_changed/android.policy.jar /data/local/tmp/zangcf_changed/
adb push ./zangcf_original/android.policy.jar /data/local/tmp/zangcf_original/
adb push ./zangcf_original/android.policy.odex /data/local/tmp/zangcf_original/
exit
3, 准备执行环境
adb shell
su
mount -o rw,remount /system
chmod 777 /system/bin
chmod 777 /system/framework/
exit
exit
adb push ./dexopt-wrapper /system/bin
adb shell
su
chmod 777 /system/bin/dexopt-wrapper
exit
exit
4, 进行odex化
adb shell
su
cp /data/local/tmp/zangcf_changed/android.policy.jar /system/framework/android.policy.jar
dexopt-wrapper /system/framework/android.policy.jar /system/framework/new_android.policy.odex $BOOTCLASSPATH
cp -f /sdcard/信谈amestris_original/android.policy.jar /system/framework
chmod 777 /system/framework/android.policy.odex
chmod 777 /system/framework/android.policy.jar
chmod 777 /system/framework/new_android.policy.odex
exit
5, 原文件的头。
adb shell
su
busybox dd if=/system/framework/android.policy.odex of=/system/framework/new_android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
cp /system/framework/new_android.policy.odex /system/framework/android.policy.odex
exit
exit
6, 删除临时文件和修改文件属性
adb shell
su
chmod 644 /system/framework/android.policy.odex
chown root.root /system/framework/android.policy.odex
rm /system/framework/new_android.policy.odex
exit
exit
7,ok,然后重启
adb reboot
❹ 怎么deodex系统软件
一、什么是odex文件? 简单来说odex文件是由apk中的classes.dex提取出来,以提前运行,加快软件的运行速度以及系统的开机速度。一般来说,odex化的软件都是位于system/app以及system/framework目录下的系统软件或jar文件。通常,官方刷机包的系统软件是odex化的,定制的刷机包是无odex文件的。 二、什么是deodex?为什么要deodex? deodex就是odex化的逆向过程,即将odex文件转换为dex文件放回apk里。此举能在一定程度上减少system空间的占用,并能更加容易地修改软件,例如修改框架文件(framework.jar等)。 三、如何deodex软件? 前几年有一款一键deodex软件叫做xUltimare,但后来因为它的版本停滞不前和Android的更新导致deodex报错越来越多,Android Kitchen也一样。MIUI中的某些app这些软件怎么都不能合并odex,所以就必须手动合并了。 前提条件:电脑上安装了JAVA并且已经进行了环境变量。具体可以网络查找资料。除此之外,还需要谷歌官方提供的文件, 要下载smali-X.X.X.jar和baksmali-X.X.X.jar两个文件(X.X.X表示谷歌官方提供软件最新版本的版本号),倘若下载不了,可以使用本帖最后提供的smali-2.0.3.jar和baksmali-2.0.3.jar。为了在后文使用代码方便,建议重命名将后面的版本号删掉。 以下为步骤 ①将smali.jar、baksmali.jar、将进行转换的odex文件放到同一目录下。新建system文件夹,在里面放入刷机包里的system/framework(此步是为了添加框架文件,其实只需要framework里的odex文件就足够了,把整个文件夹放进去是出于方便考虑)。 ②打开cmd,并且用cd命令转到刚才的目录。 ③在cmd里输入 java -jar baksmali.jar -d ./system/framework -x AppName.odex 复制代码 注:此处AppName.odex是指待转化的odex文件名称。这一步就是解决报错的关键,baksmali是不会自主识别目录中的框架文件的,所以必须主动加载 若cmd未报错,此时目录下应当出现了一个名为out的文件夹 ④在cmd里再输入 java -Xmx512M -jar smali.jar out -o classes.dex 复制代码 无意外的话此时由odex文件生成的classes.dex已经在目录下生成 ⑤接下来以winrar或其他压缩软件为打开方式,直接打开原odex文件所对应的apk文件 直接将classes.dex拖拽进apk就行了 ⑥签名 此步骤是可选的,若是系统软件,无需签名,直接放入system/app使用即可(记得改权限),大可不必签名。 以上为deodex一个apk的全过程,合并jar也是一样的方法。此方法除windows适用之外,linux也可参考。
❺ 如何对APK进行 Deodex
一、什么是odex文件?
简单来说odex文件是由apk中的classes.dex提取出来,以提前运行,加快软件的运行速度以及系统的开机速度。一般来说,odex化的软件都是位于system/app以及system/framework目录下的系统软件或jar文件。通常,官方刷机包的系统软件是odex化的,定制的刷机包是无odex文件的。
二、什么是deodex?为什么要deodex?
deodex就是odex化的逆向过程,即将odex文件转换为dex文件放回apk里。此举能在一定程度上减少system空间的占用,并能更加容易地修改软件,例如修改框架文件(framework.jar等)。
三、如何deodex软件?
前几年有一款一键deodex软件叫做xUltimare,但后来因为它的版本停滞不前和Android的更新导致deodex报错越来越多,Android Kitchen也一样。MIUI中的某些app这些软件怎么都不能合并odex,所以就必须手动合并了。
前提条件:电脑上安装了JAVA并且已经进行了环境变量。具体可以网络查找资料。除此之外,还需要谷歌官方提供的文件, 要下载smali-X.X.X.jar和baksmali-X.X.X.jar两个文件(X.X.X表示谷歌官方提供软件最新版本的版本号),倘若下载不了,可以使用本帖最后提供的smali-2.0.3.jar和baksmali-2.0.3.jar。为了在后文使用代码方便,建议重命名将后面的版本号删掉。
以下为步骤