首页»版块 历史内容 历史内容 历史内容 玩机花粉一族必备知识之——移植软件

玩机花粉一族必备知识之——移植软件

[复制帖子标题和链接]

449728

荣耀粉丝11206189  LV10  发表于 2015-7-20 17:48:01 属地未知 来自:浏览器
本帖最后由 人在 于 2015-9-30 17:54 编辑
    相信所有粉粉都遇到过的事:自己的手机解锁root后不小心删除了系统自带的一款不错的软件,却无法恢复。。。好不容易在论坛跪求而来,点击安装却显示:应用程序未安装~ 好杯具啊!今天, 人在 来教各位粉粉一招。
    当谈到“应用程序未安装”这几个字,相信很多粉粉都遇到过。不过一般都是版本不兼容,或者签名过期啦、签名不一致等等。然而,在移植、优化系统软件是甚是多见。比如,某个粉粉看到别人的手机里有一款自带软件非常不错,好不容易说服他,吧那个软件要到手,安装时却杯具地提示:应用程序未安装~这个问题也曾经困扰我多年。现在写成教程,分享给大家!
1、做什么事都要追溯其根源
    移植软件出了问题,我们不能一味的随意撒气,甚至做出不理智的举动~ 那么,为什么系统自带软件包不能安装呢?不都和第三方安装包一样吗?其实不然,很多粉粉只是浮在上面,看不到下面的东西~让我们进一步深入。
    不要以为apk只是一个安装包,其实,apk本质也是一个改了后缀名的压缩包而已。一般用压缩软件都可以打开。我各打开一个来自系统提取的安装包和一个来自电子市场的第三方软件安装包,看看有何不同。                                                     玩机花粉一族必备知识之——移植软件 玩机花粉一族必备知识之——移植软件                                    上图:系统自带的UC浏览器解包 下图:第三方软件解包
    看到这,或许有些粉粉会说:左图少了一个classes.dex文件。不错,系统自带软件都有一特点:apk里缺少dex文件,反而有与该安装包名字一样的odex文件在同一目录下。而第三方软件包却没有。那么,这个odex文件是什么?又干什么用?
2、了解一件事物必先了解其本质
我们首先要知道什么是Odex?
    Odex全称Opendex,Odex是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。
    所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。    或许有些粉粉看不明白。用我的理解,简单说,原本系统每次执行APK都需要先提取一部分出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。而由于提取了Odex出来,会占用一部分存储空间,所以做Odex化的时候需要考虑空间方面的问题。
3、做一件事必须明确其目的,不能像无头苍蝇那样。
为什么要把系统自带软件odex化?
1.官方为了考虑粉粉们的感受,一般来说官方rom都是odex化的rom(含Odex文件)。这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。
2.刷完机首次进入系统的时间会缩短一些。文件的运行速度应该也有所提升。
3.APK文件不能单独安装,并且如果反编译APK文件,一般也只能得到资源文件。可以说是起到一定的保护作用,避免被肆意修改和使用。这样做可以使其厂商保证一定的反盗版,因为没有没有classes.dex文件的apk是无法正常安装的。
4.会增加一些可安装应用的空间,虽然不是很多。所以就会造成一些问题:
1.第三方不方便修改ROM以及文件本身。
2.增加ROM包的体积,虽然不是很多。
3.当你升级某个被Odex的应用后,这个应用将会出现故障,最常见的就是FC。
一般定制rom没有odex化:
1. 可以适当减小文件的体积,起到节省rom空间的作用;
2.主要方便rom定制者对rom的个性化定制和移植;apk相对容易反编译和修改,而odex先要解包成smali然后才能生成classes.dex,如果要再生成odex,还要用dexopt-wrapper,比较麻烦。
其实厂商把官方rom odex化在一定程度上能加快运行速度:
    当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache则是存放data/app生成的dex文件。
4、写文章不能文不对题,现在了解完这些后,我们转入正题:如何移植系统自带软件?
    不过开始之前,我们要准备好软件,就是手机端神器——apktool。下载地址;yunpan.cn/cckYXkbTygaCH
游客,如果您要查看本帖隐藏内容请评论
  
游客,如果您要查看本帖隐藏内容请评论

    下载安装好之后,就可以开始了。我以SystemUI.APK为例,教各位粉粉如何移植软件。(楼主这里是用了老版本)
游客,如果您要查看本帖隐藏内容请评论

    就这样,完美解决apk不完整问题。然后再把那个apk文件签名。如果那个软件不能直接安装到第三方软件目录里的话,就必须获取root!!不然re管理器不能修改system目录!!只有只读权限而没有读写权限,等于前功尽弃。
    还有一点,放到系统app目录下必须先放到system目录里修改权限,在剪切到app目录里。权限修改为三读一写。即rw-r-r
第一列三个勾,第二列一个,其他不管。然后重启......宣告成功。(记住系统关键性的还是不要随便弄了)。
再次声明:
1、刷机有风险,移植系统关键性软件更要慎重。不要混用。(比如三星的系统软件移植到华为上)
2、修改软件不需要root,但手机必须获取root后才能移植成功!!
3、否则后果自负!!
    总之,会者不难,难者不会,希望粉粉多多把自己的有些资源,刷机优化经验等等分享出来,共同造福P7板块!!
                                              {:7_180:}{:8_211:}



评论28
凉城空心 摄影达人  发表于 2015-7-20 18:24 属地未知 来自:浏览器
感谢楼主分享
碎影舞斜阳  LV10  发表于 2015-7-20 18:31 属地未知 来自:浏览器
哈哈,我就知道,@ 我肯定是要分的~~~

支持~鼓掌~~
荣耀粉丝9321092  LV10  发表于 2015-7-20 19:40 属地未知 来自:浏览器
手机上看了一遍,电脑上看了第二遍,不知道移植systemUI.apk干嘛?
荣耀粉丝7862660  LV7  发表于 2015-7-20 19:55 属地未知 来自:浏览器
好帖子!感谢楼主分享~~~比某些版主发的没用贴帖子刷存在感强多了
荣耀粉丝11206189  LV10  发表于 2015-7-20 20:09 属地未知 来自:浏览器
littlebai1119 发表于 2015-7-20 19:40
手机上看了一遍,电脑上看了第二遍,不知道移植systemUI.apk干嘛?

只是举例子而已
荣耀粉丝11206189  LV10  发表于 2015-7-20 20:15 属地未知 来自:浏览器
chencu 发表于 2015-7-20 20:00
[clienthide=1]回复回复[/clienthide]

别瞒着我用代码了……
ironyyz01  LV10  发表于 2015-7-20 22:22 属地未知 来自:浏览器
本教程要认真看看,关于编译与反编译,值得推荐的好文章!
宝贝大人  LV10  发表于 2015-7-20 23:09 属地未知 来自:浏览器
增长见识,看看……
荣耀粉丝8010044  LV7  发表于 2015-12-8 13:02 属地未知 来自:浏览器
个钟后搜搜
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表