小虾米资讯

AD1
当前位置:网站首页 / android / 正文

android:手机厂商系统app做ODEX防盗,强制合并apk后安装。翻车?

2021-08-16 15:45:37 / 我要吐槽 查看是否已被百度收录 查看是否已被谷歌收录 查看是否已被搜狗收录 查看是否已被360收录
AD2
我们的旧手机内置的一些app,我们觉得很不错,想提取出来安装到其他手机上面,却发现安装失败。其实这个是因为手机厂商对系统app做了ODEX化,就是把app内部的classes.dex分离出来,转换为了OEDX文件。首先,先简单了解一下什么是Odex(免ROOT模式下,无法自行OEDX)Odex是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。这样做可以加~快软件的启动速度,预先提取,减少对RAM的占用。没有odex的话,系统要从apk包中提取dex再运行。对app进行OEDX化的好处详解:一、所谓Odex化,是将由android软件中的classes.dex生成的文件预先提取出来,作用是能加^快软件加载速度和开机速度。原本系统每次执行APK都需要先提取dex出来,odex可预先提取(提前存储于缓存,优先级高于对应apk中的dex,有odex的情况下不会再加载其对应的dex)。也可以一定程度上减少小部分存储,如果不odex,那么系统还是会自动提取dex,这时不仅apk内部有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经可能大于一份odex的体积了。二、同时也可以做到apk保护。一般情况下有odex的应用,其对应的apk文件中只存留资源文件,或者破损的dex文件,这样在反编译的情况下得不到正确的应用数据,在简单提取apk后也无法直接安装。名词解释:什么是dalvik-cache? 当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是ROM第^一次启动时间比较长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。不过Odex也有缺点,那就是无法随意的修改刷机包。而且由于提取Odex会占用一部分存储空间,所以做Odex化的时候需要考虑空间方面的问题。

一般来说官方rom都是odex化的rom(含Odex文件),这个就是为什么每次miui12升级后,大家普遍觉得流畅,用了一段时间后就开始卡顿,这个主要是因此app产生了大量的碎片等垃圾。另外,加上rom内置的第三方定制app升级后,此时它内置的odex文件已经不起作用了。所以这一次miui12.5增强版也许没有想象中那么好,只是因为升级后的odex优化效果。一旦用户升级内置的第三方定制app,那么odex文件将会不起作用。回归正题:将安卓手机内置的系统app,进行ODEX文件与apk文件合并。电脑端的话,需要java环境,个人不想安卓这个,于是采用手机端合并。以360手机的文件管理为例。先安装re管理(注意不要安装盗版的,这个不能在免root模式下查看系统根目录文件)在system/app/里面找到这个QK_FileBrowser的文件夹复制到外面随便一个目录(比如sdcard/pictures)

在OAT文件夹里面找到了QK_FileBrowser.ODEX文件。下载MT管理器app,点击QK_FileBrowser.ODEX文件,提示是否转化为dex文件。生成QK_FileBrowser.dex文件。下载apktool X,点击QK_FileBrowser.dex文件,选择添加到apk。可以看到QK_FileBrowser.apk增^大了不小,点击查看发现已经把内部已经添加了classes.dex(就是刚刚生成的QK_FileBrowser.dex)然后下载NP管理器添加签名(尝试用MT管理器、APK-singner等进行签名发现安装失败),安装成功后,打开闪退。

Powered By © 小虾米资讯 2015

(本站部分文章来源于网络或网友爆料,不代表本站观点,如有侵权请联系及时删除 )