我把拷出来的apk拷贝到手机上,但是安装不上,提示“应用程序未安装”。
因为ROM中的一些应用的apk文件中是没有classes.dex文件的,但是对应的,在同一个目录下都会有一个名字一样,后缀是odex的文件,实际上,可以把这个odex文件转成dex文件,然后放进apk文件中,这样apk就可以安装了。
细心的网友可能发现android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? android123提示大家,如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用。
很多网友可能想到的是合并odex和apk变成apk中包含dex文件的,这样合并后最终apk文件安装在/data/中,而rom存放时在 /system/bin中,所以最终导致了用户可装在android手机中的软件会变少,占用系统空间。
方法: 1准备软件和文件(/system/bin中的文件复制到“一键合并”下的romdir/system/app中 ,把/system/framework下的文件也拷贝到“一键合并”下的romdir/system/framework中)。1准备软件和文件
2电脑中有JAVA环境(JAVA.exe)
3下载“一键合并”已经打包 "rom提取APKodex转dex签名打包.zip" http://vdisk.weibo.com/s/sEZXR
4.选项2
在一键合并\romdir\system\app下的这个就是你提取的软件了,试试看能用不
我在XP下成功了!!看你的了!
为什么要合并apk和odex
我把拷出来的apk拷贝到手机上,但是安装不上,提示“应用程序未安装”。
因为ROM中的一些应用的apk文件中是没有classes.dex文件的,但是对应的,在同一个目录下都会有一个名字一样,后缀是odex的文件,实际上,可以把这个odex文件转成dex文件,然后放进apk文件中,这样apk就可以安装了。
细心的网友可能发现android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? android123提示大家,如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用。
很多网友可能想到的是合并odex和apk变成apk中包含dex文件的,这样合并后最终apk文件安装在/data/中,而rom存放时在 /system/bin中,所以最终导致了用户可装在android手机中的软件会变少,占用系统空间。
方法: 1准备软件和文件(/system/bin中的文件复制到“一键合并”下的romdir/system/app中 ,把/system/framework下的文件也拷贝到“一键合并”下的romdir/system/framework中)。1准备软件和文件
2电脑中有JAVA环境(JAVA.exe)
3下载“一键合并”已经打包 "rom提取APKodex转dex签名打包.zip" http://vdisk.weibo.com/s/sEZXR
4.选项2
在一键合并\romdir\system\app下的这个就是你提取的软件了,试试看能用不
我在XP下成功了!!看你的了!
骨灰级安卓大神请进,系统程序apk和odex文件怎么弄到系统里?
你是要把odex并到APK里去吗,还是放到系统里面,是放进去的话有没有ROOT过
就是要合并,请问怎么合并?
要合并百度有软件,合并好后用root explorer放进去。其实不用合并的,一起放进去也没问题。主要是你会放到系统去吗?像这种apk合并前后都是不能装的,要直接放进去
安卓手机system/app里面,每个apk文件下面都有一个odex文件,那个文件是什么东西?
ODEX是安卓上的应用程序apk中提取出来的可运行文件,作用是能加快软件加载速度和开机速度。
简单说,原本系统恢复出厂设置后第一次开机需要先提取classes.dex出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份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类似并且要简单些,因为里面的文件都没有顺序的要求。
如何将Android系统中提取出来的.apk和.odex文件安装到别的Android系统中?
细心的网友可能发现Android的ROM中有很多odex文件,相对于 APK中的dex文件而言这个odex有什么作用呢? Android123提示大家,如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用。(文/Android开发网)
很多网友可能想到的是合并odex和apk变成apk中包含dex文件的,这样合并后最终apk文件安装在/data/中,而rom存放时在 /system/bin中,所以最终导致了用户可装在Android手机中的软件会变少,占用系统空间。
一、APK生成 odex文件方法:
编译开源GIT上的build/tools /dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即可,操作步骤
将dexopt-wrapper放到/data/local目录中,使用adb shell执行linux命令行,使用cd命令进入/data/local目录,
cd /data/local
./dexopt-wrapper android123.apk android123.odex
二、合并odex和 少dex的apk 为完整的apk文件
需要用到的工具是smali,一个开源的java处理软件:
http://code.google.com/p/smali/downloads/list
一.下载的baksmali和 smali的jar文件到工作目录
二.把ROM里面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。
例:
以teeter为例子 (HTC一些Android常常会内置),ROM里面拿出来的可能是2个文件,teeter.apk + teeter.odex。
1、分解odex文件:
java -jar baksmali-1.2.1.jar -x teeter.odex
如果没其他问题,会在工作目录生成一个out的目录,里面是分解出来的一些文件,我们在此不深究这些文件的作用。
2、把分解得到的文件变成classes.dex:java -Xmx512M -jar smali-1.2.1.jar out -o classes.dex,这样得到了一个有用的classes.dex文件
3、用WinZip或者WinRAR打开teeter.apk文件,把这个classes.dex 放进去
4、最后再用signapk把最新得到的这个包含classes.dex的apk重新签署一下 (Auto Sign签名工具往期的文章里有下载),就生成一个可以安装的单独APK程序了。
5、签名完成后即可安装使用了
1、分解odex文件:
这一步出错了
ROM里面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。
这个你做了吗!
骨灰级安卓大神请进,系统程序apk和odex文件怎么弄到系统里?
你是要把odex并到APK里去吗,还是放到系统里面,是放进去的话有没有ROOT过
就是要合并,请问怎么合并?
要合并百度有软件,合并好后用root explorer放进去。其实不用合并的,一起放进去也没问题。主要是你会放到系统去吗?像这种apk合并前后都是不能装的,要直接放进去
安卓手机system/app里面,每个apk文件下面都有一个odex文件,那个文件是什么东西?
ODEX是安卓上的应用程序apk中提取出来的可运行文件,作用是能加快软件加载速度和开机速度。
简单说,原本系统恢复出厂设置后第一次开机需要先提取classes.dex出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份odex的体积了。
楼主,你需要将新输入法添加后重启,将默认输入法设置为新输入法后再考虑删除自带输入法。
转载请注明出处51数据库 » 为什么系统软件apk和odex 为什么要合并apk和odex
谁的眼泪花了妆