안드로이드 Gradle 멀티 프로젝트 사용

Gradle 에서는 프로젝트를 단일 프로젝트나 멀티 프로젝트로 구성할 수 있습니다. 멀티프로젝트는 하위 폴더에 여러개의 Module을 추가할 수 있습니다. Android Studio 는 프로젝트를 생성하면 자동으로 멀티 프로젝트로 구성되고, 하위에는 App Module이 추가되어 있습니다. 

Android Library Module 만들기

안드로이드 라이브러리 모듈은 com.android.libaray 플러그인이 필요하고, 그결과 AAR파일을 생성 할 수 있습니다. AAR파일은 JAR파일과 비슷해보일 수 있지만 다른점은, 하나의 앱처럼 안드로이드 화면을 포함할 수 있다는 점입니다. JAR 파일은 순수 로직만 포함할 수 있습니다. 하지만 AAR파일은 res폴더의 xml 이미지, 리소스등을 포함할 수 있기때문에 안드로이드 화면을 표현할수 있게 됩니다. 
다음은 안드로이드 라이브러리 모듈을 생성하는 과정입니다. 안드로이드 스튜디오에서 [File -> New -> New Module]을 선택합니다. 그 이후 안드로이드 라이브러리 모듈을 선택하고 이름은 MyLibModule이라고 하겠습니다.

그리고 build.gradle에 settings.gradle에 보시면 include된것을 확인하실 수 있습니다.
include ‘:app’, ‘:mylibmodule’
또한 build->makd module ‘mylibmodule‘ 을선택하면 aar파일이 생성되는것을 outputs 폴더에서 확인하실 수 있습니다.

Gradle 로컬 저장소 만드는 방법

상용프로젝트를 개발할때, 라이브러리를 gradle을 이용해서 참조해서 사용하는 경우가 있습니다. 그런데 jcenter나 maven center에 올려버리면 보안상 문제가 생길 우려가 엄청납니다. 그러므로 사내에 로컬 저장소를 만들어서 운영해야 할 것입니다.

공동작업을 위해서는 프로젝트 폴더 하위에 로컬 저장소를 두는것이 일반적입니다. 먼저 프로젝트 홈폴더를 환경변수에 등록하겠습니다. 
ORG_GRADLE_PROJECT_HOME 환경변수는 gradle 스크립트에서 $PROJECT_HOME으로 참조할 수 있습니다.
다음과 같이 Project의 build.gradle을 변경합니다.

 allprojects{
  reposotories{
    jcenter()     
    mavne{      
      url "file://($PROJECT_HOME)./myReposiroy"     
    }   
  }
} 

참조할 수 있는 로컬 저장소가 생성되었습니다. URL은 위의 “file://($PROJECT_HOME)./myReposiroy” 와 같습니다.
그다음 mylibmoudle을 빌드한 결과를 로컬 저장소에 업로드할 수 있도록 uploadArchives 블록을 정의합니다.
mylibmoudle 모듈의 build.gradle 파일 아래쪽에 다음 내용을 추가합니다.

apply plugin: 'maven'
group ='com.exam.mylibmodule' 
version = '1.0'
uploadArchives {
  repositories{
     mavenDeployer{
         repository( url: "file://($PROJECT_HOME)./myReposiroy")
      }
   }
}

업로드할 저장소의 URL과 그룹이름, 버전을 지정하면됩니다. group, version, repository url을 확인하실 수 있습니다.
uploadArchives 태스크를 실행해야합니다. 해당 프로젝트 폴더로 가서 gradlew:mylibmodule:uploadArchives 라고 치시면, 해당 태스크를 실행하고 .aar파일이 지정했던 repository에 생성되는것을 확인하실 수 있습니다. 
마지막으로 로컬저장소에 배포된 .aar파일을 참조하도록 하겠습니다. app모듈에서 build.gradle을 아래와 같이 변경하면 되겠습니다.

dependencies{
    compile 'com.exam.mylibmoudle:mylibmodule:1.0@aar' 
}

이제 app moudle에서 library module 의 액티비티를 직접 실행하실수있습니다. 라이브러리르 모듈을 참고하기 때문이죠.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다