마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

transformClassesWithDexForDebug 오류

0 추천

구글맵 api테스트를 위해 프로젝트를 새로 만들고

테스트 해보려는데 transformClassesWithDexForDebug 오류가 납니다.

해당오류는 메서드양이 65500개정도를 넘어가면 발생하는걸로 아는데

구글맵 api를 추가하자마자 이런 현상이 생기니까 난감하네요 

심지어 new Project 에서 구글맵 액티비티를 고르고 바로 실행해도 위 오류가 발생 합니다 어딘가 잘못된게 있나요?

사용한 코드는 아래가 전부입니다.

package com.example.sdna.maptest;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    @Override
    public void onMapReady(GoogleMap map) {
        LatLng sydney = new LatLng(-33.867, 151.206);

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        map.setMyLocationEnabled(true);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

        map.addMarker(new MarkerOptions()
                .title("Sydney")
                .snippet("The most populous city in Australia.")
                .position(sydney));
    }
}

 

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.1"
    defaultConfig {
        applicationId "com.example.sdna.maptest"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    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:23.4.0'
    testCompile 'junit:junit:4.12'
    compile 'com.google.android.gms:play-services:10.0.0'
}

 

신입 (570 포인트) 님이 2016년 12월 6일 질문
신입님이 2016년 12월 6일 수정

1개의 답변

0 추천

안녕하세요

우선 defaultConfig 안에

multiDexEnabled true << 이거 해주세요

그래도 안되면 아래 dependencies 안에 이것도 해보세요

compile 'com.android.support:multidex:1.0.0' 

힙 메모리 부족할 수도 있으니

dexOption{

   javaMaxHeapSize "4g"

}

한번해보세요! 수고하세요

히로시 (10,800 포인트) 님이 2016년 12월 6일 답변
위사항을 추가해 봤는데 그러면
setContentView(R.layout.activity_main);
부분에서 에러가 발생하게돼요
게다가 개발 시료가 19레벨이어서 빌드하면

Instant Run does not support deploying build variants with multidex enabled, to a target with API level 20 or below. To use Instant Run with a multidex enabled build variant, deploy to a target with API level 21 or higher
메세지가 출력됩니다 ㅠ
멀티덱스야 나중에 메소드가 많아지면 하시고,
일단 문제는 구글 플레이서비스 전체를 로딩하고 있기 때문입니다.
https://developers.google.com/android/guides/setup
현재 쓰시려는 api가 구글맵이므로
compile 'com.google.android.gms:play-services:10.0.0'
=>compile  'com.google.android.gms:play-services-maps:10.0.1'
로 변경하세요
...