Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 : PermittedSubclasses requires ASM9 가 나오고 있네요...

Billcorea 2023. 11. 24. 18:09
반응형

어느 날부터 안드로이드 스튜디오에서 빌드를 하는 데

PermittedSubclasses requires ASM9 

이런 메시지를 만나게 되었습니다.  빌드를 하더라도 크게 문제가 발생하거나 하지는 않았습니다.  다만, 빌드 창에 나오는 오류 메시지가 신경을 쓰이게 합니다. 

 

빌드중에 나오는 오류

 

이런 메시지가 나와 오늘은 bard 에게 질문을 해 보았습니다.

 

bard 에게 처음 질문 시작

 

더보기

"java.lang.UnsupportedOperationException: PermittedSubclasses require ASM9" 오류는 Java 컴파일러가 현재 사용 중인 ASM(ASM 바이트코드 엔지니어링 라이브러리) 버전에서 지원하지 않는 기능을 사용하려고 시도하고 있음을 나타냅니다. ASM은 Java 컴파일러에서 클래스 로딩 및 바이트코드 생성과 같은 특정 작업을 수행하는 데 사용되는 라이브러리입니다.

오류를 일으키는 특정 기능은 "PermittedSubclasses" 특성입니다. 이 속성은 특정 클래스에 액세스 할 수 있는 하위 클래스를 지정하는 데 사용됩니다. PermittedSubclasses 속성은 ASM 버전 9 이상에서만 지원됩니다.

이 오류를 해결하는 방법에는 두 가지가 있습니다.

  1. ASM 버전 9 이상으로 업그레이드하세요. 이는 문제 없이 PermittedSubclasses 속성을 사용할 수 있게 해주는 권장 솔루션입니다. ASM을 업그레이드하려면 프로젝트의 종속성을 업데이트해야 합니다. 이를 수행하기 위한 구체적인 지침은 빌드 시스템에 따라 다릅니다.
  2. 코드에서 PermittedSubclasses 특성을 제거합니다. 이는 PermittedSubclasses 기능을 사용하지 못하게 하므로 권장되는 해결 방법은 아닙니다. 그러나 이는 오류 없이 코드를 컴파일할 수 있는 임시 해결 방법입니다.

다음은 이 오류를 방지하기 위한 몇 가지 추가 팁입니다.

  • 프로젝트에서 최신 버전의 ASM을 사용하고 있는지 확인하십시오.
  • ASM에 의존하는 타사 라이브러리를 사용하는 경우 해당 라이브러리가 사용 중인 ASM 버전과 호환되는지 확인하세요.
  • 사용 중인 ASM 버전이 확실하지 않은 경우 java -version명령을 사용하여 확인할 수 있습니다.

 

 

bard.google.com 에서 말해주는 답변입니다.  이번에는 다른 포인트로 질문을 해 보았습니다.

 

답변
답변 계속

 

더보기

"PermittedSubclasses에 ASM9 필요" 오류는 Java 코드에서 ASM9라는 ASM(ASM 바이트코드 엔지니어링 라이브러리)의 특정 버전이 필요한 "PermittedSubclasses" 기능을 사용하려고 시도하고 있음을 나타냅니다. 이전 버전의 ASM을 사용하고 있기 때문에 이 오류가 발생합니다.

이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

옵션 1: ASM9로 업그레이드

권장되는 솔루션은 ASM9을 활용하도록 프로젝트의 종속성을 업그레이드하는 것입니다. 이렇게 하면 PermittedSubclasses 기능과의 호환성이 보장되고 해당 기능을 완전히 활용할 수 있습니다. ASM 업그레이드를 위한 구체적인 단계는 빌드 시스템 및 프로젝트 구성에 따라 다릅니다. 빌드 시스템 문서를 참조하거나 숙련된 개발자의 도움을 받아 프로세스를 안내받으세요.

옵션 2: PermittedSubclasses 속성 제거

ASM9으로 즉시 업그레이드할 수 없는 경우 코드에서 PermittedSubclasses 속성을 일시적으로 제거할 수 있습니다. 이렇게 하면 오류 발생을 방지할 수 있지만 PermittedSubclasses 기능에서 제공하는 기능도 제거됩니다. 이 옵션은 적절한 ASM 업그레이드를 준비하는 동안 단기적인 해결 방법에 적합합니다.

앞으로 이 오류가 발생하지 않도록 하기 위한 몇 가지 추가 팁은 다음과 같습니다.

  1. 호환성 보장: 프로젝트에서 사용하는 ASM 버전이 활용 중인 라이브러리 및 프레임워크와 호환되는지 항상 확인하세요.
  2. 종속성 관리: 서로 다른 라이브러리에 있는 ASM 버전 간의 잠재적인 충돌을 식별하고 해결하기 위해 적절한 종속성 관리를 유지합니다.
  3. 버전 인식: 최신 ASM 릴리스에 대한 최신 정보를 유지하고 적절한 경우 새로운 기능과 버그 수정의 혜택을 누리려면 업그레이드를 고려하십시오.

이러한 지침을 따르면 "PermittedSubclasses에 ASM9가 필요합니다." 오류를 효과적으로 방지하고 원활한 개발 워크플로를 유지할 수 있습니다.

이렇게 답을 하네요.   이번 답변에서는 옵션 2를 다시 질문해 보겠습니다.

 

 

더보기

ASM9로 업그레이드하려면 다음 단계를 따르세요.

  1. ASM9 버전 다운로드

ASM9는 ASM: https://asm.ow2.io/ 웹사이트에서 다운로드할 수 있습니다.

  1. 프로젝트의 의존성 업데이트

프로젝트의 빌드 시스템을 사용하여 ASM9 버전의 의존성을 업데이트합니다.

Maven을 사용하는 경우 다음과 같은 명령을 사용하여 ASM9 버전의 의존성을 업데이트할 수 있습니다.

mvn dependency:update -Drevision=9.1

Gradle을 사용하는 경우 다음과 같은 명령을 사용하여 ASM9 버전의 의존성을 업데이트할 수 있습니다.

gradle dependencyUpdates -Drevision=9.1
  1. 프로젝트 빌드

업데이트된 의존성을 사용하여 프로젝트를 빌드합니다.

Maven을 사용하는 경우 다음과 같은 명령을 사용하여 프로젝트를 빌드할 수 있습니다.

mvn clean install

Gradle을 사용하는 경우 다음과 같은 명령을 사용하여 프로젝트를 빌드할 수 있습니다.

gradle clean build

프로젝트를 빌드하면 ASM9 버전으로 업그레이드됩니다.

Maven을 사용하여 ASM9로 업그레이드하는 예

<dependencies>
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>9.1</version>
    </dependency>
</dependencies>

위의 코드는 Maven 프로젝트의 의존성을 ASM9 버전으로 업데이트합니다.

Gradle을 사용하여 ASM9로 업그레이드하는 예

dependencies {
    implementation 'org.ow2.asm:asm:9.1'
}

위의 코드는 Gradle 프로젝트의 의존성을 ASM9 버전으로 업데이트합니다.

업그레이드 시 고려 사항

ASM9는 이전 버전과 호환되지 않을 수 있습니다. 따라서 업그레이드하기 전에 프로젝트의 코드를 테스트하여 모든 문제가 해결되었는지 확인해야 합니다.

또한, ASM9는 새로운 기능과 버그 수정을 포함합니다. 따라서 업그레이드하면 프로젝트의 성능이나 안정성에 영향을 미칠 수 있습니다.

이번 답변에서는 gradle 파일에 dependencies을 추가해 보겠습니다.

dependencies { 
	implementation 'org.ow2.asm:asm:9.2' 
}

 

bard 가 알려준 버전은 9.1 버전이었지만, 현재 시점 (2023.11.22)으로는 9.2가 최신 버전인 것 같습니다. 그리고 이제 빌드를 시도해 보겠습니다. 

 

빌드가 끝났습니다.

 

처음에 보았던 것과 같은 오류 메시지가 나오지 않고 빌드가 마무리되었습니다.

 

현재 android studio의 빌드 환경은 어떤데?

 

Android Studio Giraffe | 2022.3.1 Patch 4
Build #AI-223.8836.35.2231.11090377, built on November 14, 2023
Runtime version: 17.0.6+0-b2043.56-10027231 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 4096M
Cores: 8
Registry:
    external.systehttp://m.auto.import.disabled=true
    debugger.new.tool.window.layout=true
    ide.text.editor.with.preview.show.floating.toolbar=false
    ide.instant.shutdown=false
    ide.experimental.ui=true

Non-Bundled Plugins:
    cohttp://m.godwin.json.parser (1.7.1)
    SeleniumPlugin (1.3.3)
    wu.seal.tool.jsontokotlin (3.7.4)
    com.intellij.STAintellij.intellij_plugin (23.10.600)
    com.millennialmedia.intellibot@SeleniumLibrary Patched (0.10.143.381)
    idea.plugin.protoeditor (223.8214.6)
    cohttp://m.jetbrains.kmm (0.8.1(223)-26)
    org.jetbrains.compose.desktop.ide (1.5.10)

 

보시는 것처럼 java 버전은 17까지 올린 상태이고, Android Studio는 Giraffe 버전에서 마지막 patch까지 되어 있는 상태입니다. statable 한 버전에서는 마지막 버전이지 않을까 합니다. canari 버전으로 갈 수 도 있지만, 안정화된 버전을 사용하고 있는 것은 작업하는 데 있어서 안정화된 버전을 이용하는 것이 조금은 수월해 보여서이기도 합니다. 

 

개발 tool 사용에 참고가 되시길 바랍니다.

 

 

반응형