Android Studio에서 모듈(Module)간 종속성 지정하기

|

Android Studio와 Eclipse에서의 프로젝트(Project)의 개념이 조금 다릅니다.

Eclipse에서는 하나의 실행 파일(.apk), 라이브러리(.jar) 등을 생성하는 단위를 프로젝트라고 불렀으며, Android Studio에서는 이를 모듈(Module)이라고 부르고 있습니다.

그리고 이러한 모듈들의 모음을 Android Studio에서는 프로젝트라는 단위로 명칭하고 있습니다.


모듈 생성 방법

Android Studio에서 모듈은 다음과 같이 New Module 메뉴를 이용해서 생성할 수 있습니다.

Image


이 때, 추가하려는 모듈이 별도의 실행 파일인지 라이브러리인지 기타 모듈인지 선택할 수 있습니다.

Image


모듈간 종속성(Dependency) 설정

위와 같은 방법으로 모듈을 추가했다면, 이제 모듈간 종속성을 설정할 수 있습니다. 만약 라이브러리로 추가했다면(Eclipse에서는 라이브러리가 *.jar 파일이었고, Android Sutdio에서는 *.aar 입니다.), 그 라이브러리를 사용하려는 프로젝트의 build.gradle에 다음과 같은 코드를 추가하면 됩니다.

dependencies {
    ...
    compile project(':snowsdk');
}

Git 설명서 - (4) 파일 삭제

|

파일 삭제

파일 삭제는 git rm 명령어를 이용해서 할 수 있습니다. 이 명령어를 수행하면 현재 폴더에 있는 파일도 같이 지워 줍니다.

만약 git rm이 아닌, rm 명령어로 로컬에 있는 파일만 삭제한 경우라면, git status에서 다음과 같은 결과를 볼 수 있습니다.

$ rm snowdeer.cpp

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    snowdeer.cpp

no changes added to commit (use "git add" and/or "git commit -a")

이 경우는 파일 삭제한 상태가 아직 Staged 상태이지 않기 때문에 git add 명령어를 이용해서 파일 삭제 상태를 Staged 하게 만들어줘야 합니다.

git rm으로 삭제한 경우는 삭제된 파일은 Staged 상태가 되기 때문에 위 단계를 건너뛸 수 있습니다.

물론 Staged 상태에서 commit까지 해주어야 파일 삭제가 Git에 완전히 반영이 됩니다.


로컬 파일은 남기고 Git에서만 삭제하기

이런 경우는 보통 .gitignore 파일에 추가하는 작업을 빼먹었거나 실수로 불필요한 파일을 Git에 등록했을 때 필요한 작업입니다.

--cached 옵션을 사용하면 로컬에 있는 파일은 그대로 둔채 Git의 파일만 삭제를 할 수 있습니다.

git rm --cached snowdeer.bak


복수의 파일이나 폴더 삭제

패턴을 이용하여 여러 개의 파일이나 폴더를 삭제할 수도 있습니다.

$ git rm log/\*.log

위와 같은 명령어를 사용하면 ‘log’ 폴더 아래에 있는 ‘.log’ 확장자를 가지는 파일들을 모두 삭제합니다. * 앞에 \를 붙여야 합니다. (Windows 커맨드에서 실행할 때는 \를 붙이지 않습니다.)

$ git rm \*~

이와 같은 코드는 ~으로 끝나는 파일을 모두 삭제합니다.

Git 설명서 - (3) .gitignore

|

파일 무시하기

프로젝트를 구성하다보면, 어떤 파일들은 Git에서 관리할 필요가 없는 파일들이 있습니다. 예를 들어 Android Studio 프로젝트에 있는 properties.local 같은 파일들은 로컬 PC에 있는 설정값이 기록된 파일이기 때문에 굳이 Git에 올릴 필요가 없는 파일입니다.

이러한 파일들은 .gitignore 파일을 이용해서 관리할 수 있습니다.

.gitignore에서 사용하는 규칙은 다음과 같습니다.

  • 아무 것도 없는 라인이나, # 으로 시작하는 라인은 무시
  • 표준 Glob 패턴을 사용
  • 폴더는 끝 부분에 ‘/’를 붙여서 표현
  • 느낌표(!)로 시작하는 파일은 무시하지 않음

Glob 패턴은 일반적으로 사용하는 정규표현식의 간략화 버전이라고 생각하면 됩니다.

예를 들면 다음과 같이 사용할 수 있습니다. 다음 예제는 제가 현재 Android Studio 또는 Eclipse에서 사용하는 .gitignore 파일의 내용입니다.

*.iml
.gradle
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild

*.apk
*.ap_
*.dex
bin/
gen/
local.properties
.classpath
.project
proguard/
*.ipr
*.iws

Git 설명서 - (2) 파일을 수정하고 저장하기

|

파일의 상태

Git 에서는 파일의 상태를 크게 4가지로 구분합니다.

  • untracked : Git에 add 되지 않은 상태
  • unmodified : Git에 add는 되었지만, 수정이 되지 않은 상태
  • modified : 파일이 수정되었으나 commit 할 준비가 되지 않은 상태
  • staged : 파일 수정이 완료되어 commit 만 하면 되는 상태

그리고 파일의 라이프 사이클은 다음과 같습니다.

image


파일의 상태 확인

파일의 상태는 git status 명령어를 이용해서 확인할 수 있습니다.

최초 상태(init을 하거나 clone을 한 상태)에서 git status 명령어를 실행해보면 다음과 같은 결과가 출력될 것입니다.

$ git status
On branch master
nothing to commit, working directory clean

현재 특별한 상태에 있는 파일이 하나도 없다는 뜻입니다.

새로운 파일을 하나 추가해봅니다. ‘README.md’ 파일을 폴더에 생성해보도록 하겠습니다.

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    README.md

nothing added to commit but untracked files present (use "git add" to track)

폴더에는 파일이 추가되었지만, 아직 Git에는 add 가 되지 않았기 때문에 위와 같은 결과가 출력됩니다.


새로 생성한 파일

git add 명령어를 이용해서 위에서 생성한 ‘README.md’ 파일을 Git에 등록합니다.

$ git add README.md

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.md

새로운 파일이 Git에 등록되었다는 문구가 출력되었습니다.


수정한 파일을 Staged 상태로 변경하기

‘commit’ 하기 위해서는 파일 수정이 완전히 끝나고 안정적(Staged)인 단계가 되어야 합니다. 즉, 파일 수정이 다 끝나면 해당 파일의 상태를 Staged 상태로 변경해주어야 합니다.

예를 들어, ‘snowdeer.cpp’ 라는 파일을 수정했다고 가정하면 git status 결과는 다음과 같이 출력될 것입니다.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   snowdeer.cpp

Staged 상태로 만들어주는 명령어는 git add 입니다. git add는 파일을 Git에서 관리하도록 등록해주는 역할도 하며, Staged 상태로 만들어주는 역할도 합니다.

$ git add snowdeer.cpp

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.md
        modified:   snowdeer.cpp

만약 git add를 한 상태에서 또 다시 파일을 수정했다면 다시 한 번 git add 명령어를 이용해서 해당 수정분을 다시 Staged 상태로 만들어줘야 합니다.


파일 저장(commit)하기

새로 추가가 되었거나 Staged 상태의 파일들은 git commit 명령어를 이용해서 저장할 수 있습니다.

또한 다음과 같이 -m 옵션을 이용해서 변경 이력 로그를 남길 수도 있습니다.

$ git commit -m "minor bug fixed"


Staged Area는 파일 수정이 완벽하게 이루어진 파일들만 관리하기 때문에 아주 유용하긴 하지만 일반적으로는 번거롭고 귀찮은 과정이기도 합니다.

그래서 git commit을 할 때 -a 옵션을 이용해서 Staged Area 단계를 건너뛰고 파일을 저장할 수도 있습니다.

Git 설명서 - (1) 저장소 만들기

|

Git 저장소 만들기

Git 저장소를 만드는 방법은 크게 2 가지 방법이 있습니다.

  • 현재 프로젝트를 init 하는 방법
  • 서버에서 clone 해서 가져오는 방법


현재 프로젝트를 init 하는 방법

현재 프로젝트가 있는 폴더에서 다음 명령어를 입력합니다.

$ git init

이 명령은 현재 폴더에 .git 이라는 하위 폴더를 하나 만들어줍니다. 여기에는 Git 저장소에 필요한 아주 기본적인 파일들만 들어있으며, 아직 어떤 파일도 관리되고 있지 않습니다. Git이 각 파일들을 관리하게 하기 위해서는 git add 명령을 이용해서 파일들을 등록해주어야 합니다.

$ git add *.cpp
$ git add README.md
$ git commit -m 'initial commit'


서버에서 clone 하는 방법

기존에 이미 구현되어 있는 서버의 파일들을 로컬에 모두 가져오는 방법입니다. git clone 명령어를 이용하며, 프로젝트의 모든 히스토리(History) 내역까지 모두 가져옵니다.

다음과 같은 방법으로 사용할 수 있습니다.

$ git clone https://github.com/snowdeer/BeaconSample.git

위와 같은 명령어를 실행하면, 현재 폴더에 git 저장소의 이름에 해당하는 ‘BeaconSample’이라는 하위 폴더를 생성하고 그 안에 소스 폴더들을 다운로드합니다. 그리고 가장 최신 버전의 소스로 checkout 해줍니다.

만약 폴더 이름을 ‘BeaconSample’가 아닌 다른 이름으로 변경하고 싶으면

$ git clone https://github.com/snowdeer/BeaconSample.git SnowBeaconSample

와 같은 형태로 사용하면 됩니다.