- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是安卓新手。我正在尝试构建一个 apk 文件。在构建应用程序时,它以两个错误结束:
一种)。在第一个错误中,它说 The number of referenced method in .dex file cannot exceed 64K 并给了我这个 Link .
b).在第二个错误中,它显示 java.lang.UnsupportedOperationException。
我已经成功添加了 multidex 支持库并生成了一个 apk 文件用于测试和修复问题。像这样
android {
compileSdkVersion 22
buildToolsVersion "23.0.0"
defaultConfig {
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion 22
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
但我在这里仍然没有什么疑问
一种)。为什么我需要添加 multidex 支持库?
b). future 的目标是什么?
C)。第二个错误是什么意思?
d).它在什么意义上说 .dex 文件不能超过 64K?你能帮帮我吗?
谢谢。
最佳答案
a).为什么我需要添加 Multidex 支持库?
-> 这样做的目的是将您的 Dex 文件拆分为多个 Dex 文件。此库支持使用多个 Dalvik 可执行 (DEX) 文件构建应用程序。引用超过 65536 个方法的应用程序需要使用 Multidex 配置。
b). future 的目标是什么?
-> Android 有一个问题,即 Dex 文件中方法定义的数量有上限 (64k)。这意味着一旦达到该限制,您就无法进一步扩展您的应用程序。
在 Multidex 之前,建议使用 ProGuard 通过删除代码中未使用的方法来减少方法定义的数量。在实现 Google Play 服务框架时特别有用。
随后引入了 Multidex,它允许应用程序继续扩展而不必担心方法计数限制。它确实存在使应用程序更加不稳定的危险。因此,建议先尝试 ProGuard 以减少方法数。
c).第二个错误是什么意思?
java.lang.UnsupportedOperationException
引用:https://stackoverflow.com/a/21061985/3758024
请提供您的应用中此次崩溃的完整崩溃日志/堆栈跟踪以及相关代码段。
d).什么意义上说.dex文件不能超过64K?你能帮帮我吗?
-> Android 应用程序 (APK) 文件包含 Dalvik 可执行 (DEX) 文件形式的可执行字节码文件,其中包含用于运行应用程序的已编译代码。 Dalvik Executable 规范将单个 DEX 文件中可以引用的方法总数限制为 65,536——包括 Android 框架方法、库方法和您自己的代码中的方法。在计算机科学的上下文中,术语 Kilo, K 表示 1024(或 2^10)。因为 65,536 等于 64 X 1024,所以此限制称为“64K 引用限制”。
更多引用。
1) https://developer.android.com/studio/build/multidex.html#avoid
2) https://medium.com/@rotxed/dex-skys-the-limit-no-65k-methods-is-28e6cb40cf71#.3eg897jca
关于java - .dex 文件中引用的方法个数不能超过 64K 和 java.lang.UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627654/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!