프로그래밍/Unity, MAUI, Mono

[Xamarin] "error MSB6006: "java.exe" has ended"를 멀티덱스(Multi-Dex)로 해결하기

당근천국 2017. 11. 29. 15:30

error MSB6006: "java.exe" has ended

이 오류는 자마린에서는 빌드가 됐는데 자바 쪽 빌드가 실패한 경우 나오는 에러입니다.

 

여러 가지 원인이 있지만 메시지는 이거 하나로 퉁치는 경우가 많아서 그때그때 찾아서 해결하는 방법뿐이 없습니다.

 

1. 증상

제 경우 자마린으로 Firebase 샘플을 따라 만들던 중 이 에러가 발생 했습니다.

처음부터 나는 건 아니고 'google-services.json'을 프로젝트에 첨부하고 빌드를 하면 이런 증상이 나왔습니다.

 

메시지도 아래와 같이 나옵니다.

 

이름은 '$' 문자, 16진수 값 0x24(으)로 시작할 수 없습니다.

 

 

내용만 보면 네이밍을 잘못했다는 뜻인데 구글에서 제공되는 라이브러리로 빌드되는 파일에서 나는 경고라 답이 없습니다.

그리고 상황에 따라서 저 경고가 나와도 'java.exe'에서는 에러가 안 나는 경우도 있습니다.

 

 

2. 해결방법

이것저것 다해봐도 안 돼서 결국 시도해본 방법은 아무거나 다 적용해 보는 것이엇습니다.

그중 멀티덱스(Multi-Dex)옵션을 활성화하니 경고와 오류가 사라졌습니다.

(참고 : Xamarin Forums - Project won't build. Keeps failing with error message "java.exe" has exited with code 2)

멀티덱스는 안드로이드 5.0이상 버전에서 작동합니다.

 

프로젝트 속성 > Android 옵션 > 패키징 속성

'Multi-Dex를 사용하도록 설정'

을 체크해 줍니다.

 

 

 

대신 다른 경고가 잔뜩 뜨는데 자마린에서는 아직은 해결방법이 없다고 합니다.

 

마무리

멀티덱스는 메서드를 64K 이상으로 구성할 때 사용한다고 합니다.

(참고 : Android Studio 사용자 가이드 - 64K 이상의 메서드로 앱 구성 )

 

구글API용 json파일을 어떤 식으로 처리하길례 구글API용 json파일을 빌드하고 나면 경고가 뜨는지 모르겠습니다.