- fastlane 으로 Android 앱 배포 쉽게 하기 (feat. windows)2022년 07월 05일 23시 40분 38초에 업로드 된 글입니다.작성자: 핀수728x90반응형
들어가며
개발이 어느정도 마무리가 되면..(끝은 없으니까요 ^_ㅠ?)
사용자를 만나기 위한 준비를 해야한다.
여차저차 준비를 하고 내 자식같은 아이가 세상에 나오면..
높은 확률로 다시 고쳐야할 일이 생긴다.
수정하고 내놓고 수정하고 내놓고..
안드로이드 앱의 경우 출시 및 출시 준비 과정은 다음과 같다.
(간략하게 작성한것으로 상이할 수 있습니다.)
1. 출시 전 속성 지정 및 설정
- debuggable = false (안하면 앱이 안올라가는거 아시죠)
- app signing (빌드할 때 보통 자동으로 되지만 일단 넣었다.)
- versionCode++
- versionName 지정
2. buildType 지정 후 build 진행
3. play console 에서 업로드 진행
4. 내부 테스트용 앱 업로드, 링크 전달
나의 경우 해당 과정 중 3단계를 코드 상에서 수행할 수 있는
google play developer API 를 이용해 배포를 진행하고 있었다.
그러니까 1-4 단계 중에서 3빼고 모두 내 손으로 한땀한땀 해줬다는 소리다^^..
물론 관리하는 앱이 하나라서 그렇게 힘들겠냐 할 수 있겠지만..
반복되고 강조되는 작업은 개발자를 불안하게 해요!
본격 귀찮아서 fastlane 도입한 후기 시작합니다.
시작하기
fastlane 을 이용한 앱 배포의 대략적인 흐름 (내 목표) 은 아래와 같았다.
전처리
- app signing
- versionCode++
- versionName 지정
빌드
출시 (업로드)
후처리 (예정)
1. Ruby 설치하기
fastlane 이 ruby 기반이라서 ruby가 필요하다.
맥OS 의 경우 ruby가 기본으로 설치되어 있다고 하던데
우리 윈도우는 그런거 없으니까 직접 설치해주기로 한다.
여기에서 설치하면 된다.2. bundler 설치하기
사실 fastlane 공식문서가 아주 잘되어 있으니 참고하는 것을 추천한다.
bundler 를 설치한다.gem install bundler
3. fastlane init
fastlane 을 적용하려는 프로젝트로 이동한다.
(설치가 안되면 관리자 권한에서 해보세요)bundle init
해당 프로젝트 루트에 Gemfile 이 생기는 것을 확인할 수 있다.
bundle add fastlane
Gemfile.lock 이 생기는 것을 확인할 수 있다.
4. 초기 셋팅하기
bundle exec fastlane init
그리고 프로젝트의 패키지 이름을 입력하라고 한다.
그리고 구글 플레이 콘솔 서비스 계정의 키 파일 경로를 입력하라고 한다.
그리고 메타 데이터를 통해 구글 플레이 콘솔에 정보를 업로드 하겠냐고 묻는다.
→ 나의 경우 이미 스토어에 등록이 된 상태이므로 건너뛴다. (나중에 설정 가능하다.)
bundle exec fastlane test
fastlane 이 정상적으로 설치 되었는지 확인하고 싶으면
위의 명령어를 입력하면 된다. (fastlane test 라고 입력해도 무방)
test 라는 이름의 lane 을 실행하겠다는 것이다.
5. Fastfile 작성하기
Fastfile 을 코드 편집기에서 열어준다.
lane :test 를 찾을 수 있을 것이다.
해당 파일을 입맛에 맞게 고쳐주면 된다.
위에서 말했지만 ruby 기반이다.....
가장 기본적인 흐름은 아래와 같다.
빌드 - 게시
properties 에서 gradle 의 속성에 접근할 수 있다. (공식문서 참고)# production 트랙 출시 desc "deploy production" lane :release do gradle(task: "clean") # 빌드 gradle( task: "bundle", build_type: "release", print_command: true, properties: { # app signing "android.injected.signing.store.file" => ENV['SIGNED_STORE_FILE'], "android.injected.signing.store.password" => ENV['SIGNED_STORE_PASSWORD'], "android.injected.signing.key.alias" => ENV['SIGNED_KEY_ALIAS'], "android.injected.signing.key.password" => ENV['SIGNED_KEY_PASSWORD'] } ) # 게시 upload_to_play_store( track: "production", json_key: ENV['GOOGLE_SERVICE_ACCOUNT_KEY'], aab: ENV['AAB_RELEASE_PATH'], in_app_update_priority: priority, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, skip_upload_apk:true ) end
쉽게 드러나면 안되는 것들은
아래 명령어 실행 후gem install dotenv
.env 파일을 만들고 여기에서 가져다 쓴다.
아래와 같이 본인의 입맛에 맞게 (?) 작성하면 된다.#.env 파일 # 서명 키 경로 SIGNED_STORE_FILE='YOUR_PATH' # 서명 키 패스워드 SIGNED_STORE_PASSWORD='YOUR_PASSWORD' # 앱 서명 Alias SIGNED_KEY_ALIAS='YOUR_ALIAS' # 키 비밀번호 SIGNED_KEY_PASSWORD='YOUR_PASSWORD'
전처리
- app signing
- versionCode++
- versionName 지정
빌드
출시 (업로드)
후처리 (깃 푸시, 테스트 앱 배포)
위 과정이 모두 담긴 lane 을 작성했다.# 모든 테스트 트랙에 출시 및 테스트 앱 배포 desc "deploy all track" lane :deployAll do |options| develop(options) alpha(options) release(options) gitCommitAndPush() end
fastlane deployAll version:patch priority:5
이제 위 명령어 한줄이면
상기에 작성한 배포 과정이 실행된다.
그것도 각 트랙별로!!!!!!
구글 API 를 통해서 업로드를 진행할 때는
콘솔에 올리는 것 빼고는 직접 다 해줬어야 하다보니..
각각 트랙마다 똑같은 작업을 했어야했던 게 제일 큰 고역이었다.
특히 버전 코드를 올려야하는 것........(절레절레
각각의 트랙의 코드를 보면 이렇다.desc "deploy test" lane :test do |options| updateVersion(options) makeAAB('debug') if options[:priority] priority = options[:priority] end uploadToPlayStore( 'test', priority ) gitCommitAndPush() end
updateVersion(options) 에서
버전코드와 버전네임을 지정한다.
사실 이 fastlane 을 도입하고자 마음 먹은게
versionCode auto increment 되게 만들고 싶어서였던게
거의 8할을 차지했다보니.....많은 자료를 찾아 돌아 다녔는데
여기서 정말 많은 도움을 받았다. => fastlane 플러그인으로 설치도 가능한 것으로 보인다.
(버전 코드 자동 증가는 gradle 에서도 구현할 수 있다. 나는 겸사겸사..여기서)
makeAAB('debug') 에서 지정한 buildType 으로 build 해준다.# build 수행 def makeAAB(type) gradle(task: "clean") gradle( task: "bundle", build_type: "#{type}", print_command: true, properties: { "android.injected.signing.store.file" => ENV['SIGNED_STORE_FILE'], "android.injected.signing.store.password" => ENV['SIGNED_STORE_PASSWORD'], "android.injected.signing.key.alias" => ENV['SIGNED_KEY_ALIAS'], "android.injected.signing.key.password" => ENV['SIGNED_KEY_PASSWORD'] } ) end
updateToPlayStore('test', priority) 에서
구글 플레이 스토어에 업로드를 수행한다.# 구글 플레이 스토어 업로드 설정 수행 def uploadToPlayStore(track, priority) path = ENV['ROOT'] if (track == 'develop') path += ENV['AAB_DEVELOP_PATH'] elsif (track == 'alpha') path += ENV['AAB_ALPHA_PATH'] elsif (track == 'release') path += ENV['AAB_RELEASE_PATH'] else path += ENV['AAB_DEVELOP_PATH'] end upload_to_play_store( track: "#{track}", json_key: ENV['GOOGLE_SERVICE_ACCOUNT_KEY'], aab: path, in_app_update_priority: priority, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, skip_upload_apk:true ) distributeForTest(path) end
distributeForTest(path) 에서 firebase app distribution 으로 테스트 앱을 배포한다.
이 과정의 경우 사실 내가 개발하고 내가 테스트(^_ㅠ..)하는 지금 환경에서는
크게 필요성을 느끼지 못할 수도 있지만
실제로 내가 테스트 용 앱을 다운 받기 위해서는
일련의 과정이 존재하기 때문에...한번 도입해봤다.
생각보다 너무 편리했다!
이와 관련해서는 이곳에 아주 잘 설명이 되어 있다.def distributeForTest(path) firebase_app_distribution( app: ENV['APP_ID'], firebase_cli_token: ENV['FIREBASE_TOKEN'], groups_file: "your tester group", release_notes_file: "your release note path", android_artifact_type: "AAB", apk_path: path, debug: true ) end
gitCommitAndPush() 에서 해당 소스코드를 원격 저장소에 푸시한다.def gitCommitAndPush() git_commit( path: ENV['GIT_PATH'], message: prompt(text: "커밋 메세지를 입력해주세요") ) push_to_git_remote( remote: "origin", local_branch: "your local brach", remote_branch: "your remote branch" ) end
잘 짜여졌다고는 할 수 없지만
그래도 반복되는 작업을 자동화할 수 있다는 것에
큰 기쁨을 느낀다!
내가 여러 자료를 보며 많은 도움을 받았듯이
누군가에게도 내 글이 도움이 되었으면 좋겠다 ㅜ_ㅜ
더 나은 글을 쓰기 위해 더 많이 공부해야겠다!
References
아래 글을 참고하여 작성 되었습니다.
https://docs.fastlane.tools/
https://f2janyway.github.io/android/fastlane/wsl/android-fastlane-auto-deploy/
https://www.vertica.dk/viden/automated-android-deployment-with-fastlane-on-windows/
https://dongsik93.github.io/til/2022/03/18/til-android-fastlane-2/
https://dev-yakuza.posstree.com/ko/react-native/fastlane/#%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%9A%A9-%EC%8B%A4%ED%96%89-%ED%8C%8C%EC%9D%BC-%EC%88%98%EC%A0%95
https://oliveyoung.tech/blog/2021-07-15/Automatic-Distribution-AOS-Test-App-To-Fastlane/
https://jiseobkim.github.io/tool/2019/04/28/Tool-FastLane-Lane-%EC%82%AC%EC%9A%A9%EB%B2%95.html
https://firebase.google.com/docs/app-distribution/android/distribute-fastlane#step_3_set_up_your_fastfile_and_distribute_your_app
728x90반응형'Android > Android' 카테고리의 다른 글
[Android] 부팅 시 앱 실행하기 | Android 10+ Application startup on BOOT (7) 2022.09.21 LeakCanary 사용하기 (0) 2022.08.07 Android Jetpack Compose 맛보기 (0) 2022.07.03 안드로이드 애플리케이션 설계 패턴 (0) 2022.06.18 [kotlin] 코틀린 기초 문법 다지기 - 2. class (0) 2022.06.12 다음글이 없습니다.이전글이 없습니다.댓글