微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 运行包含大量代码的应用程序

背景

似乎一些旧的Android操作系统(甚至是最新的)都对每个应用可以容纳的代码量有限制.

正如我发现,限制是在一个名为“Linearalloc”的缓冲区上.

在2.2或2.3之间,大概是5-8 MB,我认为是其他的16或更多.

问题

如果您的代码太大(应用可以达到此状态),您将无法在旧设备上安装该应用程序,从而获得下一个错误(也报告为here):

Installation error: INSTALL_Failed_DEXOPT
Please check logcat output for more details.
Launch canceled!

我发现了什么

一个解决方案是尽可能地删除尽可能多的代码和库,但在一些巨大的项目上,这样的事情很难做到.

我发现下一个链接谈论Facebook如何解决这个问题,以某种方式增加限制:

> http://www.slashgear.com/how-facebook-fixed-its-gingerbread-dalvik-problem-04272478/
> http://arstechnica.com/business/2013/03/how-facebook-dug-deep-within-android-to-fix-its-mobile-app/
> https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920

此外,Google已经发布了如何通过动态加载代码解决它:

http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html

问题

Facebook做了如何做?

有可能在其他方面克服这个吗?

有没有任何免费的库增加/删除这个缓冲区的限制?

对于较新版本的Android版本有什么限制?

其他巨大的应用程序(和游戏)如何处理这个问题?他们把代码放入C/C++吗?

会加载dex文件动态解决这个问题吗?

解决方法

限制是方法引用的总数:

> https://code.google.com/p/android/issues/detail?id=7147#c6
> https://code.google.com/p/android/issues/detail?id=20814#c6

在FB / Google文章中描述的不做任何事情和多重dex方法间的中间位置是使用像ProGuard这样的工具来删除对Java级别的未使用代码的引用.看到:

> http://proguard.sourceforge.net/
> http://developer.android.com/tools/help/proguard.html

原文地址:https://www.jb51.cc/android/311059.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐