유니티

유니티 22.3.xx 에서 aar 적용하기

VicGameStudio_Choi 2024. 12. 26. 20:45

https://victorygamestudio.tistory.com/37

 

[유니티] 카카오 로그인 연동 feat. 안드로이드

글을 안 쓴지 꽤 오래됬는데.. 이번에 한 삽질은 유독 날 괴롭혔기 때문에 글을 남기려고 한다.   유니티 카카오 로그인이 짜증나는 이유.카카오에서 유니티에서 바로 사용할 수 있는 플러그인

victorygamestudio.tistory.com

 

카카오 로그인 연동하면서, 안드로이드 플러그인을 개발했었다. (위 링크에 개발 일지를 적어두었다.)

이때 aar 로 만든 플러그인을 유니티로 넣어서 해결할 수 있었는데.. 문제는 네이버 로그인을 하면서 추가적으로 발생했다.

 

네이버 로그인 같은 경우는 유니티 22.3.xx 버전 이상으로 업데이트를 해야만 적용할 수 있었는데

22.3.xx 버전부터 gradle 이 업데이트 되면서 로컬에 있는 aar 을 적용할 수가 없어졌다 ㅡㅡ..  분명히 됬었는데, 안 되어버리는 황당한 상황 속에서 2주의 긴 시간 동안(물론 계속한건 아니고.. 퇴근하고 집에와서 깔짝깔짝)하게 되었다.

 

 

해결 과정

  • 유니티 버전 업데이트(22.3.xx) 
  • Custom gradle 추가
    1. baseProjectTemplate.gradle
    2. maintemplate.gradle
    3. settingTemplate.gradle
    4. gradleTemplate.properties
  • baseProjectTemplate.gradle 가 만약 처리되어 있다면 삭제 후 재추가
    • 내가 업데이트한 유니티 22.3.27의 경우에는 gradle 7.2 가 설치되어 있음. 
    • gradle 에 맞는 android gradle plugin 을 불러와야함. 그게 바로 'com.android.application' 부분임.
plugins {
    // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
    // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
    // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
    // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'maven-publish' 
    **BUILD_SCRIPT_DEPS**
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

  • settingTemplate.gradle 추가는 무조건 해야함.
    • 왜냐하면 유니티 버전 업데이트 되면서, repository 관련된 부분들은 무조건 settingTemplate 에서 관리되고 있기 때문이다.
    repositories {
        **ARTIFACTORYREPOSITORY**
        gradlePluginPortal()
        google()
        mavenCentral()
    }

 

 

 

  • gradleTemplate.properties
    • android.enableR8=true
    • gradle 버전이 올라가면서 R8 이 상관없다고 나오는데.. 일단 gpt 형이 알려준대로 함. ㅋ

 

만약에 aar 을 추가했을 때 여기까지하면.. aar 문제를 제외한 기본적인 빌드 문제는 해결했다고 봐도 된다. 하지만... aar

을 추가한 경우에는 로컬로 다이렉트로 접근하는게 아니고 로컬 maven 에 올리고 그걸 다시 가져오는 방식으로 처리해야한다.

 

Execution failed for task ':unityLibrary:bundleReleaseLocalLintAar'.

 

aar 을 사용할 때 그냥 사용하면 위에 에러가 디질듯이 나온다. 따라서 아래 방법에 무조건 따라라..!!!!!

 

  • baseProjectTemplate.gradle 에 id 'maven-publish' 을 추가한다. 위에 내가 첨부해둔 곳에 같이 적혀있다.
    • 이걸 쓰는 이유는 커스텀 플러그인을 로컬 maven 에 올리기 위함이다.
  • maintemplate.gradle 에 로컬 maven 에 올리는 코드를 작성한다.
    • groupId 와 artifacId, version 은 implement할 때 사용할 이름이다. 설명이 부족한데 이 다음으로 넘어가면 이해할 수 있다.
    • 그리고 artifact 에는 내가 로컬 maven 에 올리려고 하는 aar 을 지정한다.
def buildDir = "${project.rootDir}/Library/Bee/Android/Prj/IL2CPP/Gradle/unityLibrary/build"

publishing {
    publications {
        aar(MavenPublication) {
            groupId = 'com.example'
            artifactId = 'unity-kakao-login-release'
            version = '1.0'
            artifact(file('libs/unity-kakao-login-release.aar'))
        }
    }
    repositories {
        maven {
            url uri("${buildDir}/libs/")
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'], exclude: ['unity-kakao-login-release.aar'])
    // 위에서 추가한 로컬 maven 을 아래와 같이 groupid artifactid version 을 통해서 접근한다.
    implementation 'com.example:unity-kakao-login-release:1.0@aar'
   }

 

 

  • 그리고 위에 보면 좀 이상한 코드 존재한다.
    • implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'], exclude: ['unity-kakao-login-release.aar'])
    • 왜 이렇게 적어뒀냐면.. 로컬 maven 에서 가져올 때 무조건 plugins/Android/libs 안으로 생성되게 된다.
      • 근데, implementation fileTree 의 경우는 로컬 파일로 읽게 된다.
      • 이게 왜 문제냐? 우리가 지금 aar 을 로컬로 읽어서 문제였지 않나? 그래서 힘들게 maven 으로 읽어오고 있는데 얘를 다시 로컬로 읽으면 무슨 소용이냐. 
      • 간단히 말해서 aar 을 fileTree 를 이용해서 읽으면 안 된다. 그래서 aar 을 제외해준다.
      • 그리고 implementation 'com.example:unity-kakao-login-release:1.0@aar' 에 maven 을 통해서 읽어온다. 참 번거롭다.
           

이러면 aar 을 포함해서 빌드 돌릴 수 있다.

 

요약

  1. 유니티 버전이 올라가면서 gradle 도 버전이 같이 올라감.
  2. gradle 버전 업 되면서 로컬 AAR 을 불러올 수 없음 ( fileTree 등으로). 무조건 maven 등으로 불러와야함.
  3. aar 을 빌드할 때, 로컬 maven 에 올리고 그걸 다시 가져오는 식으로 처리해야함.

 

추가..

사실 위에는 구글에서 제공하는 External Dependency Manager 를 이용하여 해결된다... ㅡㅡ;;

그냥 Force Resolve 한방이면.. 별로의 dependency 에 추가하지 않아도 Plugin 에 넣어두면 자동으로 처리함..;;

 

따라서  External Dependency Manager 를 사용하자!!!!