[Xamarin] "error MSB6006: "java.exe" has ended"를 멀티덱스(Multi-Dex)로 해결하기
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파일을 빌드하고 나면 경고가 뜨는지 모르겠습니다.