Unable to execute dex: method ID not in [0, 0xffff]: 65536

前端 未结 12 2009
独厮守ぢ
独厮守ぢ 2020-11-21 18:48

I have seen various versions of the dex erros before, but this one is new. clean/restart etc won\'t help. Library projects seems intact and dependency seems to be linked cor

12条回答
  •  情书的邮戳
    2020-11-21 19:16

    The below code helps, if you use Gradle. Allows you to easily remove unneeded Google services (presuming you're using them) to get back below the 65k threshold. All credit to this post: https://gist.github.com/dmarcato/d7c91b94214acd936e42

    Edit 2014-10-22: There's been a lot of interesting discussion on the gist referenced above. TLDR? look at this one: https://gist.github.com/Takhion/10a37046b9e6d259bb31

    Paste this code at the bottom of your build.gradle file and adjust the list of google services you do not need:

    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
        }
    }
    

提交回复
热议问题