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쪽에서 처리가되어야한다.
내가 이부분 꼬여가지고 설치 빌드가 안됐었다. ㅠ
minsdk랑 testinstrument 이부분만 제외하고 다 지워줌
그 다음 파일-프로젝트 스트럭쳐클릭
그 다음 디펜던시즈로 가면 아무것도 없는데
애플리케이션 app을 라이브러리로 바꿔서 그럼
라이브러리를 하나 만든다.
finish버튼으로 따로 설정할 것 없이 만들어짐
apply를 눌러 적용시켜줌
오류가 나오는데 명령어가 똑같은게 또 추가되었다.아마 app프로젝트 모듈쪽은 굳이 안바꿔도 자동으로 바뀌는모양인듯?;
그 다음 module Dependency를 클릭해서 아까만든 라이브러리여기서 app과 mylibrary둘중하나인데 app을 선택해야한다.
app에 종속성 mylibrary가 추가되는 것
그냥 app클릭하고 +버튼누르면 안나옴 all module이라 그럼;;
가이드대로 추가해서 적용
여기서 나는 mylibrary에 추가해서 꼬임 -ㅅ-;;
library Dependency진행
com.google.guava*라고 쳐야됨
밑에 도움말에 나옴
guava* 만치면 나는 안나오더라;;
jre버전확인하고 구글꺼 guava를 설치해서 적용한다.
밑에 밑줄친 부분은 로컬로 하는건데 안된다.
고도엔진용 aar 로컬로 지원하고 다운도 받을 수 있는데
웹상에 올라온 jar파일을 종속성 설정하고 해야 최종 빌드가된다.
안드로이드 개발을 잘몰라서 헤맸다.
mylibrary도 안만들어도된다.
libs/godot-lib.3.6.stable.release.aar
이거쓸 필요없이
추가된걸확인할 수 있음
다시
똑같이
여기서 android는 경로값을 \이게아니라 /이걸쓴다 주의
저 aar은 고도홈페이지에서 다운가능함.
고도다운로드홈페이지에서 쭉 내리면 우측하단에 이런게 보임 클릭 ㄱ
보통 플러그인 파일안에 있는게 경로찾기 쉽기 때문에 플러그인 파일안에 넣어준다.
유니티에서 쓰던 플러그인 폴더구조랑 비슷함을 느낌.
cfg 파일은 Godot 엔진에서 플러그인을 인식하고 설정하는데 필요한 중요한 설정 파일입니다. 주요 역할은 다음과 같습니다:
- 플러그인 정보 선언
- 플러그인의 이름
- 버전 정보
- 지원하는 플랫폼
- 플러그인 의존성 정의
- 필요한 외부 라이브러리나 다른 플러그인들을 명시
- 빌드 설정
- 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 파일이 분리되어 있는 이유는 실행 컨텍스트가 다르기 때문입니다:
- 플러그인의 GD Script (예: plugin.gd)
- 실제 게임 런타임에서 실행됨
- 실제 플러그인 기능 구현
- 게임이 실행될 때만 로드됨
- 에디터 플러그인 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메시지가 하단에 뜸.
이제 카메라 관련 플러그인 만들어야됨.
하하하
😅
도움된 유튜브
댓글
댓글 쓰기