| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 65536启用 multidex -> 正文阅读 |
|
[移动开发]Android 65536启用 multidex |
前言????????起因:项目使用的一直是multidex:1.0.3版本就想着版本低了要不要升级一下。惊喜就这么来了。 65536????????当你的应用及其引用的库超过 65,536 个方法时,你会遇到构建错误,表明你的应用已达到 Android 构建架构的限制:
????????旧版本的构建系统报告了不同的错误,这表明存在相同的问题:
????????这两种错误情况都显示一个共同的数字:65536。这个数字表示单个 Dalvik 可执行文件 (DEX) 字节码文件中的代码可以调用的引用总数。本问介绍了如何通过启用称为multidex的应用程序配置来克服此限制,该配置允许你的应用程序构建和读取多个 DEX 文件。 关于 64K 参考限制????????Android 应用 APK 文件包含 Dalvik 可执行文件 DEX 文件形式的可执行字节码文件,其中包含用于运行应用的编译代码。Dalvik Executable 规范将单个 DEX 文件中可以引用的方法总数限制为 65,536,包括 Android 框架方法、库方法和你自己代码中的方法。在计算机科学的上下文中,术语Kilo, K表示 1024(或 2^10)。由于 65,536 等于 64 X 1024,因此此限制称为64K 参考限制。 解决64K限制对 Android 5.0 及更高版本的 Multidex 支持????????Android 5.0(API 级别 21)及更高版本使用称为 ART 的运行时,该运行时本机支持从 APK 文件加载多个 DEX 文件。 ART 在应用安装时执行预编译,它会扫描 classesN.dex 文件并将它们编译成单个 .oat 文件以供 Android 设备执行。 因此,如果你的 minSdkVersion 为 21 或更高,则默认启用 multidex,并且你不需要 multidex 库。 ? ????????看到没,这里最好的解决办法就是设置minSdkVersion设置为 21 或更高。这样网上的一些什么
????????Android SDK 为 21 或更高的问题解决了,那Android SDK 低于 21 的呢。咱接着往下看喽。 Android 5.0 之前的 Multidex 支持为你的应用程序配置 multidex????????如果你的 minSdkVersion 设置为 21 或更高,则默认启用 multidex,你不需要 multidex 库。 ????????但是,如果你的 minSdkVersion 设置为 20 或更低,那么你必须使用 multidex 库并对你的应用项目进行以下修改: 1.修改模块级 build.gradle 文件以启用 multidex 并添加 multidex 库作为依赖项,如下所示:
2.根据你是否覆盖 Application 类,执行以下操作之一:
? ????????现在,当你构建应用程序时,Android 构建工具会根据需要构建一个主要的 DEX 文件 (classes.dex) 和支持的 DEX 文件(classes2.dex、classes3.dex 等)。构建系统然后将所有 DEX 文件打包到你的 APK 中。 ????????在运行时,multidex API 使用特殊的类加载器来搜索所有可用的 DEX 文件以查找你的方法(而不是仅在主 classes.dex 文件中搜索)。 multidex 库的限制????????multidex 库有一些已知的限制,当你将其合并到应用程序构建配置中时,你应该注意并测试这些限制:
????????代码缩减可以减少或可能消除这些问题。 在主 DEX 文件中声明所需的类????????如果你收到 java.lang.NoClassDefFoundError,那么你必须通过在构建类型中使用 multiDexKeepFile 或 multiDexKeepProguard 属性声明它们,根据主 DEX 文件中的要求手动指定这些附加类。 如果某个类在 multiDexKeepFile 或 multiDexKeepProguard 文件中匹配,则该类将添加到主 DEX 文件中。 multiDexKeepFile 属性????????你在multiDexKeepFile其中指定的文件应每行包含一个类,格式为com/example/MyClass.class. 例如,你可以创建一个如下所示的文件multidex-config.txt:
????????然后,你可以为构建类型声明该文件,如下所示:
? multiDexKeepProguard 属性????????该multiDexKeepProguard文件使用与 Proguard 相同的格式,并支持整个 Proguard 语法。 ????????你在multiDexKeepProguard其中指定的文件应包含 -keep 任何有效 ProGuard 语法中的选项。例如, -keep com.scc.MyClass.class。你可以创建一个名为的文件 multidex-config.pro,如下所示:
????????如果要指定包中的所有类,文件如下所示:
????????然后,你可以为构建类型声明该文件,如下所示:
在开发版本中优化 multidex????????为了减少更长的增量构建时间,使用 pre-dexing在构建之间重用 multidex 输出。Pre-dexing 依赖于仅在 Android 5.0(API 级别 21)及更高版本上可用的 ART 格式。如果你使用的是 Android Studio 2.3 及更高版本,则在将你的应用程序部署到运行 Android 5.0(API 级别 21)或更高版本的设备时,IDE 会自动使用此功能。 ? ????????但是,如果你从命令行运行 Gradle 构建,则需要将 minSdkVersion 设置为 21 或更高以启用 pre-dexing。保留生产版本设置的一个有用策略是使用产品风格创建两个版本的应用程序 :开发风格和发布风格,具有不同的值minSdkVersion,如下所示。
避免 64K 限制????????在配置应用以启用 64K 或更多方法引用之前,你应该采取措施减少应用代码调用的引用总数,包括应用代码定义的方法或包含的库。以下策略可以帮助你避免达到 DEX 参考限制:
????????使用这些技术可能会帮助你避免在应用中启用 multidex,同时还可以减少 APK 的整体大小。 以上就是本文的全部内容,希望对大家学习Android multidex有所帮助和启发。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/14 20:10:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |