안드로이드 프로젝트 빌드 시간으로 고민하는 사람들이 많을 거라고 생각한다.
좋은 장비가 도움을 줄수는 있지만, 남아도는 좋은 서버가 있다면? (꽤 희망적인 가정인데)
Mainframer나 Mirakle을 이용하면 SSH를 통해 리모트 머신에서 프로젝트를 빌드하고 결과를 로컬에 동기화 할 수 있다.
이것이 가능한데에는 rsync가 큰 역할을 한다.
우선 빌드서버와 SSH 연결이 가능한 상태를 가정하도록 하겠다.
SSH 연결만 된다면 리모트 머신에서 딱히 준비할 건 없기때문이다.
Mainframer Releases 페이지에서 최신 버전의 mainframer.sh
를 다운받는다.
.
└── MyAndroidProject/
├── app
├── .mainframer/
│ ├── config
│ ├── ignore
│ └── mainframer.sh
├── build.gradle
└── settings.gradle
프로젝트 내에 .mainframer
폴더를 만들고, 다운받은 mainframer.sh
를 넣어준다.
설정을 위한 config
와 ignore
파일도 만들어준다.
Config
# config
remote_machine=158.20.23.41
# config.yml
remote:
host: "158.20.23.41"
config
에는 빌드할 서버 Host를 적어주면된다.
최신 Mainframer 문서를 보니 config.yml
을 지원하고 있어 두 형식 모두 준비했다.
Ignore
# Don't sync mainframer config
.mainframer
mainframer*
# Don't sync builf folders
/build
app/build/intermediates
app/build/kotlin
app/build/tmp
# From progect .gitignore
*.iml
plugin-dex/build
.DS_Store
# .gradle folder contains machine specific loc and bin files, no need to sync it between machines.
.gradle
# Synching .git or other VCS folders is very bad idea, they are usually very heavy and not required for the build.
.git
# Synching IDE specific folders is really not needed for remote build.
/.idea
# Synching local.properties usually very bad idea because they contain machine specific properties like paths to SDKs and so on.
/local.properties
# Syncing captures from Android Studio is usually not required.
/captures
ignore
의 경우에는 mainframer가 동기화 하지 않을 파일들을 지정할 수 있다.
많이 쓰는 설정을 복붙한건데, 빌드와 관련없는 파일들은 제외해서 효율을 높여준다.
돌려보자!
bash .mainframer/mainframer.sh ./gradlew assembleDebug
제대로 설정했다면, Debug 빌드를 돌려보자.
성공했다면, 어떠한 Task든 다 돌릴 수 있다!
실패했다면...방법을 찾길바랍니다...
SSH 연결 혹은 rsync 지원 문제일 수도 있으나 여러분은 해결해내실겁니다...
'프로그래밍 > Android' 카테고리의 다른 글
[Hilt] Custom Component의 활용 - 지역별 DB 생성하기 (2) | 2024.01.01 |
---|---|
[Jetpack Compose] @Immutable과 @Stable이란 (1) | 2023.12.25 |
[안드로이드] plugin 적용 중 오류 해결방법: The request for this plugin could not be satisfied because the plugin is already on the classpath with an unknown version (0) | 2023.10.08 |
[안드로이드] Dialog Queue 구현하기 (1) | 2023.10.07 |
[안드로이드] 순서보장 무한 페이저(Endless Pager) 만들기 with Jetpack Compose (0) | 2023.08.26 |