当前位置: 首页 > 面试题库 >

Android 64k方法极限错误出现在56k方法上

程飞星
2023-03-14
问题内容

我在Android项目中收到此错误:

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

从我的所有研究来看,这是由于我的android项目中的方法过多-
限制为64k。但是,我已经运行了脚本来计算项目中当前有多少个脚本,并提出了56k个方法。这是我正在运行的脚本。

我项目的唯一补充是我已将Parse从1.4更新到1.7。

更新解析后将生成并编译该项目,但是当我尝试添加任何新代码时,会出现此错误。

第一次遇到此错误时,我使用的是Android Studio 0.8.9。我已恢复为Android Studio 0.8.6,并且仍在发生。


问题答案:

我已使用此代码解决了此问题,我的问题是Google Play服务将我的应用推到了极限。这会删除您的应用不需要的Google
Play服务。将其放在gradle构建文件的底部

def toCamelCase(String string) {
String result = ""
string.findAll("[^\\W]+") { String word ->
    result += word.capitalize()
}
return result
}

afterEvaluate { project ->
    Configuration runtimeConfiguration = project.configurations.getByName('compile')
    ResolutionResult resolution = runtimeConfiguration.incoming.resolutionResult
    // Forces resolve of configuration
    ModuleVersionIdentifier module = resolution.getAllComponents().find { it.moduleVersion.name.equals("play-services") }.moduleVersion

String prepareTaskName = "prepare${toCamelCase("${module.group} ${module.name} ${module.version}")}Library"
File playServiceRootFolder = project.tasks.find { it.name.equals(prepareTaskName) }.explodedDir

Task stripPlayServices = project.tasks.create(name: 'stripPlayServices', group: "Strip") {
    inputs.files new File(playServiceRootFolder, "classes.jar")
    outputs.dir playServiceRootFolder
    description 'Strip useless packages from Google Play Services library to avoid reaching dex limit'

    doLast {
        copy {
            from(file(new File(playServiceRootFolder, "classes.jar")))
            into(file(playServiceRootFolder))
            rename { fileName ->
                fileName = "classes_orig.jar"
            }
        }
        tasks.create(name: "stripPlayServices" + module.version, type: Jar) {
            destinationDir = playServiceRootFolder
            archiveName = "classes.jar"
            from(zipTree(new File(playServiceRootFolder, "classes_orig.jar"))) {
                exclude "com/google/ads/**"
                exclude "com/google/android/gms/analytics/**"
                exclude "com/google/android/gms/games/**"
                exclude "com/google/android/gms/plus/**"
                exclude "com/google/android/gms/drive/**"
                exclude "com/google/android/gms/ads/**"
            }
        }.execute()
        delete file(new File(playServiceRootFolder, "classes_orig.jar"))
    }
}

project.tasks.findAll { it.name.startsWith('prepare') && it.name.endsWith('Dependencies') }.each { Task task ->
    task.dependsOn stripPlayServices
}
}


 类似资料:
  • 本文向大家介绍Python出现segfault错误解决方法,包括了Python出现segfault错误解决方法的使用技巧和注意事项,需要的朋友参考一下 本文分析了Python出现segfault错误解决方法。分享给大家供大家参考,具体如下: 最近python程序在运行过程中偶尔会引发系统segfault的错误,而且是在不定期不同代码段时发生的,所以单步调试没办法确定是哪一行代码的问题。 段错误,

  • 本文向大家介绍php无限极分类递归排序实现方法,包括了php无限极分类递归排序实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php无限极分类递归排序实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的PHP程序设计有所帮助。

  • 本文向大家介绍curl 出现错误的调试方法(必看),包括了curl 出现错误的调试方法(必看)的使用技巧和注意事项,需要的朋友参考一下 实例如下: 可以输出curl在执行过程中输出的错误 以上这篇curl 出现错误的调试方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍PHP无限极分类函数的实现方法详解,包括了PHP无限极分类函数的实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP无限极分类函数的实现方法。分享给大家供大家参考,具体如下: 在开发程序的时候,有时候,我们需要获取所有栏目(包括一级栏目、二级栏目、三级栏目等等),并按照父子关系形成树型结构。可以采取使用递归或者通过引用方式(php中引用类似C或者C++中的指针,

  • 本文向大家介绍ORACLE出现错误1033和错误ORA-00600的解决方法,包括了ORACLE出现错误1033和错误ORA-00600的解决方法的使用技巧和注意事项,需要的朋友参考一下 在非法关机以后,Oracle数据库经常会出现这个错误: 这个显然是数据库没有办法启动,但是数据库服务还是可以启动,而程序则无法连接数据库。 首选找问题要看看数据库BDUMP目录下的ALERT文件具体报什么错误 最

  • if(driver.findelement(by.id(id)).issplayed()){ Appium 1.15.1 java Client 7.3.0 selenium-java 3.141.59