① 怎么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也可参考。
② 如何对系统app进行deodex
1、下载Java SE Development Kit (JDK),在网络上搜索jdk即可搜索到,然后下载安装。
③ 安卓手机system/app里面,每个apk文件下面都有一个odex文件,那个文件是什么东西
odex是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留。
所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。
原本系统恢复出厂设置后第一次开机需要先提取classes.dex出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份odex的体积了。
Odex化后系统启动和程序运行速度大大提高,稳定性不变。因此推荐做Odex化。
一般来说官方rom都是odex化的rom(含Odex文件),而定制rom大部分都是deodex化的(无odex文件)。两者应该各有优点吧,貌似现在也没有统一的说法。官方rom大部分每个apk对应一个.odex文件,而deodex化的rom里面只有一个apk,把.odex转换成classes.dex放到apk包里面了。所以 odex rom的.apk+.odex=deodex化rom的1个.apk (简单地来说,其实就上一个合并的过程)。
④ 安卓手机系统提取出来的apk和odex文件怎样合并成可以安装的apk安装包
合并apk和odex我们需要先建立java环境,直接网络JDK下载安装即可,需要用到的工具是smali,这是一个开源软件,同样可以直接网络下载即可。
操作步骤如下:
把下载的baksmali-1.2.4.jar和smali-1.2.4.jar这两个文件与ROM里面systemframework目录下的文件一起放在一个文件夹里。
把ROM里面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在此目录。
分解odex文件:运行CMD,我们以aaa.apk和aaa.odex为例,在CMD中输入java -jar baksmali-1.2.4.jar -x aaa.odex,然后会在工作目录生成一个out的目录,里面是分解出来的一些文件。
把分解得到的文件变成classes.dex:在CMD中输入java -Xmx512M -jar smali-1.2.4.jar out -o classes.dex,(注意其中的大小写,java代码严格区分大小写)。我们得到了一个有用的classes.dex文件,用WinZip或者WinRAR打开aaa.apk,把这个classes.dex放进去。
最后再用signapk把最新得到的这个包含classes.dex的apk重新签名一下 (可以使用Auto Sign签名工具,网络下载即可),就生成一个可以安装的单独APK程序了。
⑤ 我有一些apk文件。用来做固件使用的。有哪位大神知道可以把d1x转换为odex吗
可以通过bindService的方式,先在Activity里实现一个ServiceConnection接口,并将该接口传递给bindService()方法,在ServiceConnection接口的onServiceConnected()方法
⑥ 如何修改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
⑦ 前提:安卓手机。求将\system\app中apk安装包odex化的工具和教程。。。。。各路大侠,小弟在此提前谢谢了
进入应用程序管理,然后强行关闭就可以了
⑧ 如何odex系统即分离apk和odex
想要odex系统首先必须先处理/system/framework/下面的jar文件,其次才是/system/app下面的apk和jar等。
换种说法:
如果framework下面的文件没有odex化,都是单独的jar文件,那么系统中其他地方比如/system/app下即使存在odex文件也应该是无效的。
如果framework下的文件已经odex化,那么其他地方的apk和jar可以odex化也可以不odex都可以正常运行。
0901的包初始是deodex的,也就是所有apk都是合并好的没有odex文件存在。想要odex系统可以执行那个包解压后的odex.bat来达到目的。
odex.bat主要是调用/system/xbin/odex_framework和/system/xbin/odex_app这两个脚本。(直接在手机端用终端模拟器来执行这两个脚本应该也行,也就是说odex化的过程应该可以不依赖电脑)
odex_framework和odex_app要用到busybox、dexopt-wrapper、zip、zipalign等命令,因此需要事先将这些工具准备妥当。(0901包里面这些第三方的命令行工具基本都在/system/xbin目录下,busybox最好使用相关软件来安装,其他命令复制好后改好权限就行。)
下面直接看/system/xbin/odex_framework这个脚本,它负责odex化framework下的文件,内容如下,###开头的行都是我写的说明:
#!/system/bin/sh
### 挂载system分区为可读写,并将目录切换到/system/framework。
busybox mount -o rw,remount /system
cd /system/framework
### dexopt-wrapper这个命令直接用来生成odex文件。比如dexopt-wrapper /system/framework/core.jar /system/framework/core.odex就是由core.jar生成core.odex。
### 另外framework下面的文件odex有顺序要求,具体的顺序可见手机根目录下的init.rc这个文件,在这个init.rc里面查找BOOTCLASSPATH这行,这行后面会列出一些jar文件,那么我们这里odex的顺序就要照着那个列出的顺序来进行。各机型各版本这个顺序可能有区别,因此这里必须照实际情况排好顺序,否则生成了odex也多半是启动不了的。
### 一行处理一个文件,依次按顺序执行。
dexopt-wrapper /system/framework/core.jar /system/framework/core.odex
dexopt-wrapper /system/framework/core-junit.jar /system/framework/core-junit.odex
dexopt-wrapper /system/framework/bouncycastle.jar /system/framework/bouncycastle.odex
dexopt-wrapper /system/framework/ext.jar /system/framework/ext.odex
dexopt-wrapper /system/framework/framework.jar /system/framework/framework.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex
dexopt-wrapper /system/framework/services.jar /system/framework/services.odex
dexopt-wrapper /system/framework/apache-xml.jar /system/framework/apache-xml.odex
dexopt-wrapper /system/framework/filterfw.jar /system/framework/filterfw.odex
### 需要按顺序处理的文件处理完成后,其他的文件就不用在意顺序了,直接用个for语句来统一处理。
for j in /system/framework/*.jar
do
odexj=`echo $j | sed -e 's/.jar/.odex/g'`
if [ -f $odexj ]; then
echo "++++++++++++"
echo "$odexj already exists, skipping"
echo "++++++++++++"
else
echo "dexopt-wrapper $j $odex"
dexopt-wrapper $j $odexj
fi
done
### 到此时所有的文件都已经生成了相应的odex文件,下面的步骤是删除掉原始jar文件里面的classes.dex以及对文件zipalign优化,这一步应该不是必须的但推荐也处理一下。同样也是for语句来统一处理。zip命令负责删除classes.dex打包,zipalign命令负责zipalign优化。
for filename in `find . -name '*.jar'`
do
# step 1 - did we succesfully odex?
if [ -f `echo $filename | sed 's/\(.*\.\)jar/\1odex/'` ]
then
# step 2 - remove the classes.dex from the jar
zip -d $filename classes.dex
# step 3 - zipalign, just in case
zipalign -f -v 4 $filename $filename.new
mv $filename.new $filename
fi
done
### 单独对framework-res.apk进行zipalign优化,因为上面的语句只是针对jar文件。并且framework-res.apk中没有classes.dex文件因此它不需要odex处理。
zipalign -f -v 4 framework-res.apk framework-res.apk.new
mv framework-res.apk.new framework-res.apk
### 改好framework下面所有文件的权限。
chmod 644 /system/framework/*
### 清空系统的dalvik缓存然后退出脚本。
busybox rm -f /data/dalvik-cache/*
exit 0
通过上面的脚本framework下的文件都已经odex化,接下来可以处理/system/app下面的文件,当然不处理app下的文件应该也是可以正常运行的。
odex_app就是处理app下的文件的,格式与odex_framework类似并且要简单些,因为里面的文件都没有顺序的要求。
⑨ 如何做apk odex
编译开源GIT上的build/tools /dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即举局可,操作步骤: 将dexopt-wrapper用RE管理器放到手机的/data/local目录中,并改权限为rwxr-xr-x,在电脑使用adb shell执行linux命令行,使用cd命令进入/data/local目录,命令如下:
adb shell(回车)
su(回车)
cd /data/local(回车)
./dexopt-wrapper ***.apk ***.odex(回车)***代表你要做的软件名,前后要绝对一致。
或者手机端用终端(推荐):
su(回车)
cd /data/local(回车)伏困
./dexopt-wrapper ***.apk ***.odex(回车)***代缺答念表你要做的软件名,前后要绝对一致。
成功之后将apk和odex文件都拷贝到system\app文件夹下替换就可以了。
⑩ apk文件怎样生成odex文件
首先,下载软件"幸运破解器",安装。
打开。Tip:下载安装后注意对比一下应用包名。
以下是它专的主界面。属
点击你想odex化的程序,
出现提示框,点击"打开破解菜单"
点击"移除许可验证"
再点击“自动模式”
点击"移除dalvik缓存"
(节省空间,odex会在data/app/下生成与应用包同名的odex文件,若不清除davlik缓存data/dalvik-cache/下有dex缓存,占存储空间)
点击确定就行了,然后等待它提示操作完成。一般情况下都是提示失败,不用管它。返回就行了。这样程序就被odex化了。
但这时程序apk文件中还有classes.dex文件,占据了较多存储空间。
如需删除该dex文件较为麻烦,但也并不是不行。
简略说一下:
1.解压程序到某个临时目录。
2.删除dex文件。
3.压缩该文件夹。(要用re压缩。别的压缩软件目前我还没试成功过。)
4.签名。(用zip signer或者dalvik字节码编辑器签名。我觉得不签名应该也是可以的。但没试过。)
5.注意事项:一定要保持apk文件与odex文件主文件名一致。