본문 바로가기
IT 둘러보기

메타버스 서비스에 Android 개발자가 할 일이 있나요?

by 날고싶은커피향 2023. 3. 13.

 메타버스 서비스에 Android 개발자가 할 일이 있나요?

  1. 1. NAVER Z Android Dev 팀 메타버스 서비스에 Android 개발자가 할 일이 있나요?
  2. 2. 안명욱 NAVER Z Android 개발 GDG Korea Android Organizer
  3. 3. 메타버스 서비스에 Android 개발자가 할 일이 있나요? 발표 내용 • ZEPETO를 개발하는 모바일 개발자가 받는 오해 • ZEPETO Android 구성 • SAA와 Jetpack Navigation Component • 우리가 업무하는 방식 • 오픈소스 Antonio
  4. 4. 모바일 개발자가 할 일이 많지 않지 않아? ZEPETO를 개발하는 모바일 개발자가 받는 오해
  5. 5. 모바일 개발자가 할 일이 정말 많아!
  6. 6. 멀 개발하고 싶을지 몰라서 다 가져와봤어
  7. 7. History 2018년 ZEPETO 서비스 시작 with Unity 2021년 3월 Android/iOS Native화 개편완료
  8. 8. History Unity Project 기존 프로젝트 Android Native Project 네이티브화 이후 네이티브 라이브러리 피드, 채팅, 기타 각종 플러그인 UaaL (Unity as a Library)
  9. 9. ZEPETO Android는 99.9% Kotlin Single Activity Architecture with Jetpack Navigation Component MVVM with databinding, AAC ViewModel Coroutine (RxJava)
  10. 10. Single Activity Architecture를 가게 된 계기
  11. 11. UnityPlayer Unity와 통신 및 3D 렌더링 총괄 초기화에 제법 많은 시간이 소요 항상 최상위 뷰에 존재해야 함 Activity간 이동시 해당뷰의 Attach/Detach 필요
  12. 12. Jetpack Navigation Component Single Activity Architecture를 가게 된 계기 UnityPlayer를 Single Activity에 최상위에 항상 유지하자 개별 Fragment에서 Unity뷰 필요시 사용
  13. 13. Jetpack Navigation Component을 사용하면서 겪은 시행착오들
  14. 14. Navigation Graph 사용 Fragment 간의 목적지를 코드가 아닌 Tool 에서 간단히 생성하고 편집 Fragment 간의 경로를 쉽게 파악할 수 있는 장점 Deeplink를 손쉽게 구현할 수 있고, 화면과 매칭가능 Animation 전환에도 용이 구글 Guide에서는..
  15. 15. Navigation Graph 사용 <Navigation Action 가이드> 프로젝트 초기 Fragment간 이동을 모두 Action으로 정의 비교적 유입이 많은 Fragment는 Global Action 사용
  16. 16. Navigation Graph 사용 <Navigation 전환 애니메이션 가이드>
  17. 17. Navigation Graph 사용 계속 불어나는 Graph를 보면서,, 코드 없이 Tool을 통한 Action의 연결 쉽지 않다. Direction이 너무 많아져서 Flow 관계가 전혀 눈에 들어오지 않는다. UI 상에서 찾기란 거의 불가능 Unity나 외부 스킴을 통해 일부 화면으로 바로 이동하는 것이 필요하다. navArg 생성을 위해선 빌드가 필요했다.(Android Studio 특정버전 이하)
  18. 18. Navigation Graph 사용 현재 사용하는 방식 Navigation Graph의 기능을 사용하지 않고, Activity 정의하는 Manifest와 같이 정의하 는 용도로만 사용 Action, Global Action 사용X Animation 정의X Argument 정의는 포함하기
  19. 19. Navigation Graph 사용 현재 사용하는 방식 Fragment간 이동은 NavController에서 바로 Destination Id를 통해 이동하는 navigate() 사용 데이터는 Bundle로 포함 전환 애니메이션이 필요한 경우, navOptions 추가
  20. 20. Dialog 남는 이슈 일반 Activity 구조의 경우, 화면 전환시 해당 Activity와 함께 Dialog가 함께 종료 Single Activity의 Dialog는 내부 Fragment 전 환시에도 유지
  21. 21. Dialog 남는 이슈
  22. 22. View의 Leak 막아주기 Navigation 내에서 Fragment 변환시, 이전화면의 Fragment의 View는 Destory 이때 참조하는 부분이 있으면 Leak 이 발생
  23. 23. 우리가 업무하는 방식
  24. 24. 우리팀 개발문화 적극적인 코드리뷰 데일리미팅 / 회고 스터디 / 세미나 논의하고 싶은 주제가 있다면 언제든 환영! 테스트코드 권장
  25. 25. 자동화 Github Actions Build check Unit Test Jenkins Unity Framework Auto PR String Resource Auto PR Daily build/deploy Market build/deploy
  26. 26. Global Service
  27. 27. Antonio!
  28. 28. https://recruit.naverz-corp.com/
  29. 29. Zepeto에서의 Scheme 처리 Navigation Component에서의 명시/암시적 deeplink 수행 앱이 종료된 상태에서 Scheme을 받아 스 플레시화면에서 인증과정을 거치고, Scheme에 정의된 페이지로 랜딩 특정 화면에서는 스킴처리가 무시되어야 함 Scheme에 따라 복수개의 Fragment를 스텍에 쌓는 구성 필요 Scheme 실행 전 유저상태 체크 필요 (제 재 사용자 등) Navigation Deeplink 사용불가
  30. 30. 앱이 종료된 상태에서 Scheme을 받아 스플레이에서 인증과정을 거치고, Scheme에 정의된 페이지로 랜딩 -> 스킴 해석 이후 lazy하게 navigation 진행 특정 화면에서는 스킴처리가 무시되어야 함 -> 스킴 해석단계에서 현재의 화면 파악 Scheme에 따라 여러개의 Fragment를 스텍에 쌓 는 구성 필요 -> 스킴 해석후 여러번의 navigate 호출 Scheme 실행 전 유저상태 체크 필요 (제재 사용자 등) -> 스킴 해석단계에서 유저 상태 체크 필요
  31. 31. Global Service 에피소드 • Hwawei, Xiaomi, Vivo, Oppo, Realme, ZTE, Coolpad, Amazon, ChromeBook • Google Play Service를 사용하지 못하는 나라에 서비스 하는 방법 • 공신폰의 비밀 (Samsung J2 Pro) • 급한 기기는 용산에서 퀵서비스로
  32. 32. View State 추가 처리 커스텀뷰 구현시 onSaveInstanceState, onRestoreInstanceState 고려 해서 작업 뷰모델을 통한 뷰 상태 유지
반응형