땀이 삐질삐질 나는 개발 일기

다중 프로젝트가 의존하는 Module Path를 각 개발 환경에서 자동화 하기 본문

개발 Tip

다중 프로젝트가 의존하는 Module Path를 각 개발 환경에서 자동화 하기

삐질 2019. 11. 7. 19:09
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
 
오늘은 안드로이드 앱 개발을 진행하면서 우리가 흔히 많은 프로젝트에서 공통적으로 사용하는 모듈의
 
Path를  각 개발환경에 맞게 관리하는 Tip에 대해 알아보겠습니다.
 
  • 준비물 Git
 
쉽게 설명드리기 위해 예시를 들어보겠습니다.
 
  1. A앱 B앱 C앱 . 등에서 “가”라는 로컬 Path에 있는 모듈을 참조합니다.
  • 회사의 Path는 회사/씨드라이브/회사폴더 속에 모듈이 있습니다.
  • 집의 Path는 집/씨드라이브/집폴더 속에 모듈이 있습니다.
  1. 이때 요즘엔 Git을 통해 프로젝트를 옮기게 되는데 
  2. 집에서 풀을 받으면 , 회사에서 설정 해놓은 Path가 따라옵니다.
  3. 해당 setting.file은 ignore에 추가할 수 없습니다.
  4. 일일이 매번 수동으로 Path를 수정해줘야 합니다.
 
 저는 이 작업이 상당히 귀찮았습니다. 
이 문제를 해결하기 위해 가장 먼저 생각했던 방법은
"Git에 특정 Line만 Ignore에 추가할 수 없을까?" 였습니다. 결론은 배보다 배꼽이 더 큰 작업으로 상당히
복잡한 과정이었습니다. (포기)
 
두번째로 "프로젝트 속에 예를들면, Asset이라던지 파일로 관리를 한후 그 파일을 Ignore에 추가하면 
Setting에 필요한 파일을 Ignore에 추가하지 않아도되니까  가능하지 않을까?" 였습니다.
그러나 문제가 도통 어떻게 Gradle에서 Asset에 접근하는 지 방법을 찾기가 어려웠습니다.
 
세번째로 아는 선배님께서 언질해주신 Gradle에서 Variable로써 관리하는 방법이었습니다.
Local.poperties라는 파일속에 Sdk의 Path를 관리하게 됩니다. 이에 힌트를 얻어 
Module의 Path를 관리하기로 했고, 방법을 찾아보니 아래와 같은 접근 법이 있었습니다.
 
 
 
 
 
(귀차니즘이 심하신 분을 위해..)
def getExternalModuleDir() {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def externalModuleDir = properties.getProperty('module.path', null)
    if (externalModuleDir == null)
        throw new GradleException("Module location not found. Define location with module.dir in the local.properties file!")
 
    return externalModuleDir
}
 
def LOCAL_PATH =getExternalModuleDir()
 
이렇게 진행하신 후  local.properties를 git ignore에 추가해주시면  언제 어디서든 자동화 시킬 수 있습니다.
 
 
 
안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다
 
 

 

 

 

Comments