에러: unrecognized Attribute name MODULE

Jonghwan Choi·2023년 5월 30일
0

Unity Android App

목록 보기
4/6
java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)

Unity Editor에서 안드로이드 타겟 SDK 레벨을 31 이상으로 잡고 프로젝트 빌드시 에디터의 JDK 버전이 11보다 낮아서 생기는 에러이다. Android Studio에서도 JDK 8이 적용된 구버전 사용시 출현하는 에러이지만, 2020년에 나온 스튜디오 버전 4.2 이상부터 JDK 11이 기본 적용되고 있으므로 2023년 현재 스튜디오 사용자가 이 에러를 겪을 일은 거의 없을 것 같다.

이 글에 따르면 아래 3가지 조건을 모두 충족하면 발생한다고 한다.

  • JDK 11이 아닌 Unity Editor 혹은 Android Studio 로 프로젝트 빌드
  • Target SDK version을 31 이상으로 설정
  • 코드에 람다식 사용

해결책 1: 에디터 버전 2022.2 이상으로 업데이트

위 내용으로 추론하자면, Android SDK 31버전부터 JDK 11의 신규 기능을 포함하게 되는데 이 기능을 쓰는 특정 코드가 프로젝트에 포함될 경우 낮은 버전의 JDK로는 이를 빌드할 수 없는 것 같다. 따라서 타겟 SDK 버전을 31 이상으로 잡는다면 JDK 버전도 11로 올려 주는 것이 좋다.

그러나 Unity Editor는 번들로 내장된 JDK 버전만을 사용할 수 있으므로, JDK 11을 이용하려면 해당 JDK를 내장한 2022.2 버전 이상으로 업데이트해야 한다.

해결책 2: 에디터 버전 2020.3.15f1 이상으로 업데이트

그런데 이 글에 따르면, JDK 8 버전을 그대로 두고도 Gradle 버전을 6.1.0 이상, Android Gradle Plugin 버전을 4.0.1 이상으로 맞추면 에러를 해결할 수 있다고 한다. 그렇다 하더라도 Unity Editor에서 사용할 수 있는 Gradle 역시 번들로 내장된 버전으로 한정되기 때문에, 이 경우 역시 에디터 버전을 올려야 하는 것은 변함없다. 그래도 이 경우 버전 2020.3.15f1 이상이면 충분하므로 위의 2022.2 버전업보다는 허들이 낮다고 할 수 있다.

에디터 버전을 업데이트했다면 Android Gragle Plugin 버전을 새로 지정해줘야 하는데, baseProjectTemplate.gradle 스크립트를 다음과 같이 수정하면 된다. 에디터에 포함된 Gradle 버전에 맞춰서 버전 번호를 써야 한다. 참고

allprojects {
    buildscript {
        ...
    	dependencies {
        	...
        	classpath 'com.android.tools.build:gradle:버전.번호.넣기'
        }
    }
}

이밖에도 에디터 버전을 얼마나 올렸냐에 따라 빌드 스크립트를 몇 군데 수정해야 할 것이다. 에디터에서 빌드시 어디를 수정하면 되는지 지침을 제공하므로 가이드를 충실히 따라가면 된다.

profile
유니티 게임 클라이언트 개발자를 꿈꾸는 뉴비

0개의 댓글