Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Trabalhando com Mapas - Error:The number of method references in a .dex file cannot exceed 64K.

Pessoal, boa tarde!

Estou tendo problemas com o projeto ao incluir a activity do google maps. Foi criado a chave pra usar a api do mapa e inserido conforme orientado no video / explicação, foi criado o item no menu pra mostrar o botao do mapa, mas ao compilar o projeto é informado este erro

Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html <- pagina contendo as explicacoes do devemos fazer.

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException

Acessei a pagina que é descrita pelo erro e fiz a configuração conforme orientado.

foram incluidos os comandos informados na pagina dentro do build.gradle:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'
    defaultConfig {
        applicationId "br.com.alura.agenda"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.google.android.gms:play-services-appindexing:9.8.0'
    compile 'com.android.support:cardview-v7:25.1.0'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.google.android.gms:play-services:10.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:multidex:1.0.0'
}

foi colocado a linha android:name="android.support.multidex.MultiDexApplication" dentro do androidManifest.

Apos seguir os passos do link informado pelo androidStudio, e 'reconstruir' o projeto, é gerado o seguinte erro.

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/android/gms/internal/zznf$zza.class

Ja procurei sobre o erro, mas pelo que estava lendo os passo a passo acima ja era pra ter sanado o problema, mas nao foi =/ Obs: Ja cheguei a usar o comando clean project e rebuildProject, mas todos sem efeito.

8 respostas

Olá Julio,

Realmente esse é o procedimento correto quando se tem esse tipo de erro. Notei que o erro que está acontecendo agora está dizendo algo sobre ter algo duplicado no momento do build do projeto. Analisando o seu build.gradle também notei que provavelmente voccê está importando duas vezes a mesmo serviço do play-services.

Quando você importa:

    compile 'com.google.android.gms:play-services:10.0.1'

Você já está trazendo todos os serviços do play-services. Mas antes disso você também importa de forma individual uma parte do play-services relativa a indexação do aplicativo:

    compile 'com.google.android.gms:play-services-appindexing:9.8.0'

Como isso já está incluído no primeiro import, acredito que você pode remover esse import do appindexing sem prejuízo e pode ser que isso seja suficiente para resolver seu problema.

Tenta fazer esse teste e avisa aqui se funcionou ou não.

estou com o mesmo erro de 64K e a sua resposta Jeferson infelizmente não resolve o problema :(

Jeferson, apos retirar aquele campo a mais o problema de compilar o projeto foi resolvido, agora tenho um outro problema, o gradle que o android Studio faz, esta demorando mais de 10 minutos pra executar ( esta demorando apos eu incluir a activity do googlemaps), puxando muita memoria ram do computador. Tem como otimizar isto?

Fernando, boa tarde tudo bem ?

Mesmo usando o procedimento abaixo ?

https://developer.android.com/tools/building/multidex.html

Sim, Julio Cesar

Julio, tenta isso:

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nomeDoPacote">

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".ListaAlunosActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".FormularioActivity"
            android:label="@string/title_activity_formulario">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".receiver.SMSReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

        <activity android:name=".ProvasActivity" />
        <activity android:name=".DetalhesProvaActivity" />
        <activity android:name=".ProvasTabletActivity" />

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="chaveGerada" />

        <activity android:name=".MapaActivity"></activity>
    </application>

</manifest>

Gradle(Module):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 'Google Inc.:Google APIs:23'
    buildToolsVersion '23.0.1'

    defaultConfig {
        applicationId "nomeDoPacote"

        minSdkVersion 14
        targetSdkVersion 25


        versionCode 3
        versionName "1.3"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    compile 'com.android.support:cardview-v7:25.0.1'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.google.android.gms:play-services:10.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:multidex:1.0.0'
}

(Substituir "nomeDoPacote" e "chaveGerada" )

Mas viu Julio, tenta fazer o tutorial posterior que pra mim resolveu o problema. - Ah, tenta também testar diretamente no smartphone.

solução!

Olá Julio,

Quando a gente adiciona a play-services em nossos aplicativos acabamos adicionando uma lib bastante grande o que impacta bastante no tempo de build da aplicação mesmo. Colocar mais RAM na máquina costuma ajudar bastante, hoje o recomendado para desenvolver com o Android Studio é ter pelo menos 8gb de memória.

Uma alternativa é selecionar quais partes da play-services você está utilizando e importar individualmente apenas estas partes. Você pode, por exemplo, importar somente algo como play-services-maps. Nesse caso, você estaria importando somente a parte que trabalha com mapas da play-services. O problema disso é que às vezes existem dependências entre os serviços e aí você precisa ficar caçando o que precisar importar a mais para funcionar.

Fernando Rosa, obrigado pelas dicas, mas mesmo fazendo o procedimento descrito por voce, o processo permaneceu pesado '-', vendo agora a explicacao do Jeferson, vou tentar importar somente o play-services-maps e ver o que pode dar hahahah.

Quando vi a video aula que subiu rapido (nao vi se teve edicao ou nao hahha) o emulador, achei que fosse algum problema na minha maquina por demorar tanto, vou fazer o teste relacionado a este importe a ainda hoje posto a solucao obrigado :)

Jeferson, apos colocar somente os itens do play-service-maps o meu problema foi solucionado, em relacao a demora pra fazer o gradle apos formatar minha maquina o procedimento começou a executar um pouco mais rapido :) Obs: Windows sendo windows kkkkkkk