问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何odex系统即分离apk和odex

发布网友 发布时间:2022-04-21 19:24

我来回答

1个回答

热心网友 时间:2023-06-30 06:24

 想要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类似并且要简单些,因为里面的文件都没有顺序的要求。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
莲花冬天发芽好吗 过冬荷花什么时候发芽 一个手机号怎样登陆两个孩子的长沙市中小学生人人通云平台 人人通怎么进入学校 人人通电脑版学生怎样登录 名侦探柯南真人版3为什么要换人? 真人版柯南,你最喜欢小栗旬还是沟端淳平? 央企中国稀土集团落户江西,衷心希望江西摆脱“环江西经济带”地位_百度... 来天津的央企有哪些 东丽区的央企有哪些 怎样正确佩戴眼镜? odex合并工具使用请教 建行2代U盾交易时输入密码输入不了怎么办? 戴眼镜的正确方法 安卓手机系统应用apk与odex文件如何合并成安装包,... 戴眼镜戴多了会怎么样? 在建行开通了网银,是U盾的为什么在网上老是说密码... 怎样合并apk文件与odex文件? 怎么改建行U盾密码? ROM制作工具如何制作手机刷机包? 小米6 安卓7.1 miui9 怎么合并ODEX 建设银行u盾更新证书 让不停的输入密码 是怎么回事... 安卓4.2.2系统下system/bin目录下的bootanimation... 建行U盾一直跳出输入密码!!WIN10系统 已经下了E... apk与odex合并 建行网银盾为何进入不了操作页面,一直弹出输入密码? 安卓手机system/app里面,每个apk文件下面都有一个... 建行网银盾总是提示输入密码,输入了很多遍了,提... 怎么deodex系统软件 建设企业网银怎么一直要连续重复输密码,同一台电... 为什么建行的U盾输入支付密码后提示请输入6-8位字... 戴眼镜应该一直戴还是尽量不戴,哪个对眼睛更好 如何破解安卓系统中已提取的APK程序 建行企业网银,插上U盾后会有小弹窗输入密码,输入... 戴眼镜怎么戴护目镜 怎么查看自己的手机是不是合并odex的rom? 戴眼镜和带眼镜意思完全不一样吗? 我没设建行U盾密码 确让我输入 最后还错误 怎么办 安卓ROM里面的bin文件怎么打开 眼镜怎样戴眼镜对眼睛好? 建行网上银行插入U盾后 输入账户密码正确 每次到输... 戴眼镜是需要的时候戴好,还是经常戴好。 我买了建行的U盾,按照流程要输入交易密码的,为什... 戴眼镜有什么危害? 戴眼镜的注意事项 长期戴眼镜伤害眼睛吗 怎样戴才合适? 为什么戴眼镜戴久了眼睛会变形呢 戴眼镜怎么样戴才能让眼睛更健康? 戴眼镜须注意什么? 长期戴眼镜好不好?戴了会怎样?