godot용 android plugin 제작

최종 정리한 링크 가서 보시면됨

밑에 글들은 안드로이드 스튜디오를 많이 안다뤄봐서

삽질이 진행되는 과정이라 정리가 들됨 ㅠㅠ

https://godotbeginner.blogspot.com/2025/01/blog-post_21.html








이미 시간이 흐른 뒤 왜 안되는지 앎

고도엔진 빌드환경이 중요함

보통 호환성 모드로 사용하는데 

이러면 안드로이드 api를 사용할 수 없게 된다.

모바일로 바꿔서 진행해야한다.


이걸 해야한다고 꼭 나와있지않아서 엄청 헤맸다. 

aar파일을 zip파일로 변경해서 내가만든 클래스를 확인하기 위해

classes.jar파일도 다시 압축풀고;;

중요사항이니 참고꼭하시길!!


 일단 쫙 정리해보자.


일단 고도엔진에서

모바일 플랫폼 

안드로이드에 있는 특정기능

카메라나 기타 등등

관련해서 지원하는 라이브러리가 없다.

물론 카메라서버라는게 생겼는데

이건 mac,ios만 지원함 ㅠ  

그래서 휴대폰의 카메라캡쳐기능같은걸

사용하고 싶다면 플러그인을 만들던가 남이 만든걸 써야한다.

근데 나는 항상 써오기만 했다.

직접 만들어봐야 어떤 시스템으로 돌아가는지 정도는 알 수 있으니까 직접 만들어보는 것.

고도문서에 정리가 사실 잘되어있다.



  아예 템플릿도 지원한다.

이것도 가이드가 잘되어있어서

내가 하는것처럼 안드로이드 스튜디오로 직접 만들필요도 없을거다 -ㅅ-;

하지만 난 답답한 것은 못참는다.

일단 직접 만들어봐야 나중에 다른분들 것도 잘쓸 수 있다고 생각

ㄱㄱ

일단 영상으로 가이드되어있는 것과 문서 가이드가 있는데 난 문서쪽이 더 잘되어있다고 판단.

문서 가이드대로 진행

일단 문서에 지침대로 라이브러리를 만들라는데

https://developer.android.com/studio/projects/android-library?hl=ko

홈페이지에 가이드가 잘되어있다.

중요한사실은 종속성 추가같은 것들은 app쪽에서 처리가되어야한다.

내가 이부분 꼬여가지고 설치 빌드가 안됐었다. ㅠ


일단 새로 만들면서 기억을 더듬어 봅시다.


노액티비티


4.2기준에 맞춰 최소 안드로이드 레벨 7


나는 자바랑 groovy?로 설정해서 진행



일단 라이브러리로 쓸거니까 저 app모듈에서
application을 library로 고쳐야함.




build.gradle프로젝트는 고치지 않아도됨.
난 고치고 했는데 안고쳐도 되는것으로 결론


안드로이드 기본세팅에서 

minsdk랑 testinstrument 이부분만 제외하고 다 지워줌



그 다음 파일-프로젝트 스트럭쳐클릭


그 다음 디펜던시즈로 가면 아무것도 없는데

애플리케이션 app을 라이브러리로 바꿔서 그럼

라이브러리를 하나 만든다.


모듈+가 표시 눌러주고


android library클릭

finish버튼으로 따로 설정할 것 없이 만들어짐




apply를 눌러 적용시켜줌

오류가 나오는데 명령어가 똑같은게 또 추가되었다. 

아마 app프로젝트 모듈쪽은 굳이 안바꿔도 자동으로 바뀌는모양인듯?;

그 다음 module Dependency를 클릭해서 아까만든 라이브러리 


여기서 app과 mylibrary둘중하나인데 app을 선택해야한다.
app에 종속성 mylibrary가 추가되는 것

그냥 app클릭하고 +버튼누르면 안나옴 all module이라 그럼;;



가이드대로 추가해서 적용


오류없고 적용완료




가이드에 나와있는 경로설정이 이거인 듯

어쨌든 이제부터는 build.gradle (app)쪽에다가 속성을 추가해야되는데

여기서 나는 mylibrary에 추가해서 꼬임 -ㅅ-;;



library Dependency진행


app 쪽에 해야함 

com.google.guava*라고 쳐야됨

밑에 도움말에 나옴

guava* 만치면 나는 안나오더라;;


jre버전확인하고 구글꺼 guava를 설치해서 적용한다.


빌드성공확인

밑에 밑줄친 부분은 로컬로 하는건데 안된다.

고도엔진용 aar 로컬로 지원하고 다운도 받을 수 있는데

웹상에 올라온 jar파일을 종속성 설정하고 해야 최종 빌드가된다.

안드로이드 개발을 잘몰라서 헤맸다.

mylibrary도 안만들어도된다.



libs/godot-lib.3.6.stable.release.aar

이거쓸 필요없이


추가된걸확인할 수 있음

다시

똑같이 

jar/arr을 추가해야하는데



경로가 나오는데

여기서 android는 경로값을 \이게아니라 /이걸쓴다 주의

저 aar은 고도홈페이지에서 다운가능함.


고도다운로드홈페이지에서 쭉 내리면 우측하단에 이런게 보임 클릭 ㄱ


다운받아주고

보통 플러그인 파일안에 있는게 경로찾기 쉽기 때문에 플러그인 파일안에 넣어준다.


app폴더밑에 libs폴더를 만들고 aar파일을 옮겨줌.

유니티에서 쓰던 플러그인 폴더구조랑 비슷함을 느낌.

경로도 작성해준다.
libs/godot-lib.3.6.stable.release.aar
뒤에 .aar 붙이는걸 잊지말자 ㅠ


적용한 후 빌드완료까지 확인
app모듈에 종속성으로 추가된걸 확인
대충 어떤 느낌으로 진행하는 지 알 것이다!!
여기까지하면 일단 지침은 완료.
여기까지 진행하고 빌드 후 고도엔진 에디터 프로젝트에 넣고 오류없이 빌드가 되는지 확인해봄.
보통 오류가 있거나 충돌 및 문제가 생기면 빌드는 되도 설치나 실행이 안됨.


build에서
make project 클릭
아 실패...
이거
왜 이런지 삽질하다가...


이걸 봤다.

이걸로 직접 수정한 뒤 실행해봐야할 듯.
    implementation("org.godotengine:godot:4.2.0.stable")
나는 4.2.2니까 이렇게 하면되나?  
  implementation("org.godotengine:godot:4.2.2.stable")
오 된다....
아 이렇게 따로 작성해야되는구나 그냥 파일로 지정하면 안되고 -ㅅ-;;


빌드된 파일은
app-build-outputs-aar에 있다.


결론적으로 aar파일만 app모듈 libs폴더(생성)에 옮겨주고
종속성 코드는 따로 작성해주어야한다.
그럼 이렇게 확인가능함.
가이드대로했는데도;;
ㅠㅠ이런건 경험하지 않으면 모름;;




aar파일을 설치해보고 빌드해서 설치 실행까지 되는지 확인해보장.

좋아 잘 실행한당. 하하하하하
이제 안드로이드 기능을 고도엔진에서 쓸수 있는 코드로 라이브러리해서 호출하고 그것까지 확인하면 끝


음 일단
난 플러그인 코드는 jslib정도만 다뤄봤고 안드로이드용은 처음이다. 
그래서 지금 좀 헤매고 있긴한데
일단 

일단 안드로이드매니페스트 부분의 내용을 전부 지워주고.
어차피 통합되서 쓰이는 플러그인이기 때문에 독립적인 내용은 필요없다. 
맨처음에 기본설정도 대부분 지운게 그 이유?! 어쨌든 지우고..
고도 문서에 나와있는 가이드대로 작성해본다.

플러그명을 작성해주어야하는데..


이 내용을 참고하면

      <meta-data
            android:name="org.godotengine.plugin.v2.test"
            android:value="org.godotengine.plugin.android.godot_plugin.test" />

뒤에 클래스명은 동일하고  밑에 value부분의 plugin.[프로젝트명]인 것 같다. 일단 이러고 빌드가 되는지 확인을..
빌드 잘된다. 코드에는 문제가 없는 듯 하다.

그 다음엔 동영상을 좀 찾아봤다.

java밑에 com.회사명.프로젝트명이 적힌걸 볼 수 있는데 이 파일 하위로
자바 클래스를 생성해준다..

자바클래스명은 test아까 선언한 이름 그대로 사용해준다. 이게 무조건 동일해야한다고 고도문서에 나와있다.

위에 패키지를 확인할 수 있다.

import org.godotengine.godot.Godot;
import org.godotengine.godot.plugin.GodotPlugin;
public class test  extends GodotPlugin {
}
이렇게 작성하고 GodotPlugin에서 마우스 우클릭하고
Show Context Actions에서 
종속성 함수 추가를 눌러준다.
그리고
코드를 작성해준다.


작성 후 상단 클래스명에 빨간 줄이 있는 우클릭 똑같이 
Show Context Actions에서 Create Constructor Matching Super 클릭
   public test(Godot godot) {
        super(godot);
    }
하단에 함수가 추가되면서 빨간줄이 사라짐


빌드로 확인하려고했는데 오류가 발생했다. 
오류는 함수명이었는데 대문자 소문자가 틀렸다.
틀린 문자는 빨갛게 표시된다. 기억해두장.


빌드가 잘되었당.
빌드된 파일은 경로를
app에서 build-outputs-aar 폴더안에 있다.
지금은 디버그인데 이걸 나중에 release로 바꿔야할 듯.

일단 고도엔진 에디터에서 플러그인이 사용되는지 확인해 보장.

이제부터는 고도문서에서 안드로이드 플러그인쪽에서는 알기힘든 과정인데
(진행하다보니 나온것을 확인-ㅅ- 초심자는 알기 어렵)
고도에디터로 플러그인 새로 만드는 방식인데 
유튜브를 보고 정리해본다.


addons란 폴더를 생성하고 
프로젝트 설정에서
새 플러그인 생성을 누르고

대충 다 test라고 하고 만들어본다.
cfg랑 gd가 만들어진 모습
cfg가 아마 설정이겠지?

cfg 파일은 Godot 엔진에서 플러그인을 인식하고 설정하는데 필요한 중요한 설정 파일입니다. 주요 역할은 다음과 같습니다:

  1. 플러그인 정보 선언
    • 플러그인의 이름
    • 버전 정보
    • 지원하는 플랫폼
  2. 플러그인 의존성 정의
    • 필요한 외부 라이브러리나 다른 플러그인들을 명시
  3. 빌드 설정
    • gradle 파일의 위치
    • Android 프로젝트의 구조와 관련된 정보
    • 사용할 binary 라이브러리들의 위치

예시 cfg 파일:

[config] name="MyPlugin" binary_type="local" binary="MyPlugin.gdap" [dependencies] local=["MyPlugin.aar"] [platform.android] architectures=["arm64-v8a", "armeabi-v7a"]

이 설정 파일이 없으면 Godot은 플러그인을 제대로 로드하지 못하며, 플러그인과 메인 프로젝트 간의 통합이 이루어지지 않습니다.

ai한테 물어보니 굉장히 중요한 플러그인 정보를 담고 있어서 고도엔진이 인식하는데 필수적인 파일인 것 같다.


아까 경로에 aar빌드한 파일을 옮겨준다.



그 다음 코드 작성해주고

이게 기본 프로세스gd스크립트 인듯 하다.

고도문서에도 가이드되어있다. 근데 이 가이드에는 dependencies쪽 함수는 구현안되어있음 ㄷㄷ

그 다음 구현된 메서드를 호출해서 사용해 볼텐데


가이드쪽에 코드가 나와있다. 이건 동영상 안보고 작성해서 확인해봅시다.



나는 test클래스에

Hello라는 함수를 만들었다. 이걸 호출하는 것이당.

코드는 아래처럼 작성한다.



플러그인 gd와 에디터gd가 나뉜 이유가 여러가지 있는데

ai가 알려줌.

두 개의 GDScript 파일이 분리되어 있는 이유는 실행 컨텍스트가 다르기 때문입니다:

  1. 플러그인의 GD Script (예: plugin.gd)
  • 실제 게임 런타임에서 실행됨
  • 실제 플러그인 기능 구현
  • 게임이 실행될 때만 로드됨
  1. 에디터 플러그인 GD Script (예: editor_plugin.gd)
  • Godot 에디터에서 실행됨
  • 에디터 UI 설정, 도구 추가 등 에디터 기능 확장
  • 에디터에서만 로드됨
  • 플러그인 설정이나 초기화를 담당

예를 들어:

# editor_plugin.gd @tool extends EditorPlugin func _enter_tree(): # 에디터에 도구 추가 add_custom_type("MyPlugin", "Node", preload("res://addons/my_plugin/plugin.gd"), null) func _exit_tree(): # 에디터에서 도구 제거 remove_custom_type("MyPlugin")

이렇게 분리함으로써:

  • 에디터 기능과 런타임 기능을 명확히 구분
  • 불필요한 에디터 코드가 게임 빌드에 포함되는 것을 방지
  • 더 나은 코드 구조와 유지보수성 제공


일단 나는 대충 만들어둔 플래피버드게임 스타트버튼에 

내가 만들어둔 플러그인의 Hello함수를 실행시켜볼 것이당 



근데 버튼 눌러도 반응이없넹 -ㅅ-;; 로그캣 ㄱ


억 플러그인이 없넹 그럼 애초  test가 플러그인 명이 아닌 ㄷ;;

많은 삽질로 종속성이 잘못된것을 파악


여기 4.2.0 이 그 전엔 4.2.2였다. 그래서 안됨;;

4.2.2버전이길래 4.2.2적었는데 4.2.0을 적어야함;;


잘 작동함 hi메시지가 하단에 뜸.

이제 카메라 관련 플러그인 만들어야됨.

하하하

😅

도움된 유튜브

https://youtu.be/Vy9Nrbrr8H8

댓글

이 블로그의 인기 게시물

[코틀린] 고도엔진 안드로이드 플러그인 최종정리

고도엔진을 안드로이드애플리케이션에 임베드하는거 공부하기