📜  Android中的多索引

📅  最后修改于: 2022-05-13 01:58:44.372000             🧑  作者: Mango

Android中的多索引

现在,当我们知道 android 中的方法/函数时,我们知道每个库都有大量预构建的方法。在许多情况下,我们必须根据项目的需要使用大量的库,这显然增加了我们 android 应用程序中的方法总数。添加多个库后,会出现错误提示...

所以在理解这个错误之前我们必须理解

  • android构建系统如何工作?
  • 什么是 DEX?
  • 什么是多索引?
  • 如何实现Multidexing?
  • Multidexing 是如何工作的?

Android 构建系统如何工作

我们使用活动、布局、资源文件、依赖项来制作我们的应用程序。所有这些都进入编译器并转换为单个DEX(Dalvik 可执行文件) ,该 DEX 已编译资源准备好用于 APK 打包。然后将其转换为 .APK 文件。看下图可以清楚地理解,这里的资源文件是指我们添加到项目中的附加文件,如图像、视频、svg 文件。

什么是一 .dex 文件?

现在我们知道源代码被转换成DEX(Dalvik Executable)文件,该文件可以作为Android App运行并且只能被计算机理解。最重要的是,一个 DEX 文件只能包含 65536 个方法。如果您的项目超过了方法的数量,就会出现上述错误,因此必须使用 multidexing。

什么是多索引?

如果我们项目中的方法数小于或等于 65536,那么应用程序代码将很容易转换为 DEX 文件。但是如果方法的数量大于 65536,那么我们必须允许我们的应用程序创建超过 1 个 DEX 文件,因此将其称为“Multidexing”

如何实现多索引?

分步实施

步骤 1:创建新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。您可以选择任何语言Java/Kotlin。

第 2 步:添加依赖项

如果您使用低于 21的 Android API 版本,请将以下依赖项添加到您的 build.gradle 文件中。

implementation 'com.android.support:multidex:1.0.3'

第 3 步:使用 build.gradle(module) 文件

如果您使用 API 版本 21 或更高版本,请忽略步骤 1。很可能您可能正在使用上述 21。转到 build.gradle 文件,在其中您将找到defaultConfig的范围 {} 然后在该范围内添加 multiDexEnabled = true 如下所示,然后单击立即同步。

multiDexEnabled = true

Multidexing 如何实际工作?

到目前为止,我们看到如果方法数大于 65536,我们必须使用超过 1 个 DEX 文件。启用多索引后,如果单个 DEX 文件超过其限制,则将创建一个主 DEX 文件,然后是支持 DEX 文件。只有在主 DEX 文件中超过限制时,才会创建支持 DEX文件。

结论

每当遇到下面列出的或与 dex/multidex 相关的错误时,您可以尝试上述步骤,这将有助于解决问题

Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
cannot fit requested classes in a single dex file 99876 > 65536