似乎一些旧的Android操作系统(甚至可能是最新的操作系统)对每个应用程序可以容纳的代码量有限制。
正如我发现的那样,限制是在名为“LinearAlloc”的缓冲区上。
在2.2或2.3上它大约是5-8 MB,而我认为其他的是16或更多。
如果您的代码太大(并且应用程序可以达到此状态),您将无法在旧设备上安装应用程序,从而获得下一个错误(也报告为here):< / p>
Installation error: INSTALL_FAILED_DEXOPT
Please check logcat output for more details.
Launch canceled!
一个解决方案是尽可能删除尽可能多的代码和库,但在一些大型项目中,这样的事情很难做到。
我发现下一个链接正在谈论Facebook如何通过某种方式增加限制来解决这个问题:
此外,谷歌已经发布了如何通过动态加载代码来解决它:
http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html
Facebook是如何做到的?
是否有可能以其他方式克服这个问题?
是否有任何免费库可以增加/消除此缓冲区的限制?
对于较新的Android版本有什么限制,如果有的话?
其他巨大的应用程序(和游戏)如何处理此问题?他们把代码放到C / C ++中吗?
加载dex文件会动态解决这个问题吗?
答案 0 :(得分:1)
限制是方法引用的总数:
在FB / Google文章中描述的无操作和多方式方法之间的中间立场是使用像ProGuard这样的工具来删除Java级别对未使用代码的引用。参见:答案 1 :(得分:0)
谷歌有一个新的解决方案:
您似乎只需做以下任何事情: - 从“MultiDexApplication”而不是“Application”扩展 - 在应用程序的attachBaseContext
中调用MultiDex.install(context)但现在我想知道: