IntelliJ 13.0.2 에서 Gradle 파일과 Sync하기


소개 


Android Studio는 최근에 추가된 공식 개발툴로써 아직 베타 버전이며, 현재 버전이 0.4로써 아직 가야할 길이 멀다. 실제로 사용하다보면 자잘한 버그를 많이 만날 수 있고, 좀 불안정한 모습이 있어서 본격적으로 사용하기는 좀 이르다. 그러나 Eclipse에 비해 매우 가볍고 확장성이나 사용성이 좋다는 이유로 지금 까지 사용해 오다가 Android Studio가 JetBrains의 IntelliJ Community 버전에 기반하고 있다는 소식을 듣고, 곧장 Android 개발 툴을 IntelliJ 13 Ultimate 버전으로 교체하였다. JetBrains 사에서는 Android 개발 지원 Plugin이 다른 소스 코드 Repository가 아니라고 공식적으로 이야기 하고 있으므로, Android Studio, IntelliJ Ultimate, IntelliJ Community 버전의 Android 개발 지원 수준은 모두 동일하다고 볼 수 있다. 이에 대한 자세한 내용은 이곳을 확인해보자: http://blog.jetbrains.com/idea/2013/05/intellij-idea-and-android-studio-faq/.



문제


Android Studio가 공식 개발툴이 되면서 Build 툴로써 Gradle이 도입되었다. Gradle이 좀 생소하기는 하지만 Dependency 관리를 편리하게 자동으로 해준다는 점에서 매우 유용하다. 다음 처럼 Dependency를 기술해주면 자동으로 Maven Repository로 부터 라이브러리들을 다운로드 받아 프로젝트에 추가해 준다.





그러나 Gradle 파일의 Dependency에 무언가를 추가하는 경우 자동으로 프로젝트의 Dependency가 업데이트가 되지 않는 경우가 있다. 이럴 때 Gradle 파일과 프로젝트의 Dependency 를 동기화 시켜주면 되는데,  이러한 기능이 Android Studio 에 있지만 IntelliJ 에는 없다. 



따라서 IDE 상에서는 코드를 보면 ‘Cannot resolve symbol’ 이라는 오류가 발생한다. 그러나 빌드를 하게 되면 Gradle 파일로부터 Dependency를 가져와 컴파일을 수행하므로 오류가 발생하지는다. 그림에서 볼 수 있듯이 com.android.support:appcompat-v7, com.android.support:support-v4가 Gradle 파일에는 기술되어 있지만 실제 프로젝트 Dependency에는 자동으로 추가되어 있지 않아 발생하는 오류이다.





위 그림에서 볼 수 있듯이 두 개의 파일이 프로젝트에 등록되어 있지 않으며, 이 때문에 IDE 에서 보면 다음과 같은 에러들이 발생한다. 이러한 에러를 유발하는 모든 클래스들은 저 두 라이브러리에 포함된 클래스들이다.





하지만 컴파일은 부드럽게 성공한다.




해결 방법


이를 해결하기 위해서는 Gradle 파일과 프로젝트 파일을 Sync 시켜주어야 한다. 이러한 기능이 Android Studio 에는 ‘Tools -> Android -> Sync Project File With Gradle’ 이라는 메뉴에 있지만, IntelliJ 에는 없다. 그러나 이와 동등한 기능을 가지고 있는 메뉴가 있다. 메뉴 에서 ‘View -> Tool Windows -> Gradle’ 





위의 버튼을 누르고 나면 Sync 작업을 진행하게 되고, 작업이 완료되면 프로젝트 Dependency에 누락된 파일들이 모두 추가되며, IDE 상에서의 오류도 사라진다. 물론 컴파일도 잘 된다.

Trackbacks 0 / Comments 0

Leave Comments

Mac OS X 10.9.1, IntelliJ 13.0.3 에서 Android 프로젝트 생성 시 ANDROID_HOME 환경 변수를 찾지 못해 발생하는 오류의 해결 방법

IntelliJ 13 Ultimate 이란?





JetBrains 사에서 개발한 통합 IDE로써, Eclipse 에 비해 가벼우며, 다양한 기능과 다양한 언어를 사용할 수 있도록 확장할 수 있어서 1년 정도 전쯤에 Eclipse를 대신해 사용하고 있다. 특히 Refactoring, Code Style Formatter, Code Completion 기능 등이 매우 유용하며, Version Control System 들과도 연동이 잘 되어 있다.


나는 Java, Ruby on Rails, Node.Js, Android 개발 환경을 모두 IntelliJ 13으로 통합하여 사용하고 있고, C/C++ 플러그인이 업데이트 되길 기다리고 있다.




문제가 발생한 환경


Mac OS X 10.9.1

IntelliJ 13.0.2 Ultimate with Android 



문제 상황


IntelliJ 13.0.1 에서 13.0.2로 업그레이드를 한 후 Android 프로젝트 생성 및 빌드에 문제가 발생하였다.

오류 화면과 메시지는 다음과 같았다.





3:23:28 PM Gradle 'untitled11' project refresh failed: 

Could not execute build using Gradle distribution 'http://services.gradle.org/distributions/gradle-1.9-bin.zip';. 

Build file '/Volumes/Project/development/Example/untitled11/untitled11/build.gradle' line: 9 

A problem occurred evaluating project ':untitled11'. 

A problem occurred evaluating project ':untitled11'. 

SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable. 




위 오류는 ANDROID_HOME를 설정하지 않아 발생한 것이었다. ANDROID_HOME은 Android SDK 의 폴더 위치를 저장하고 있는 환경 변수로써, IntelliJ가 이 환경 변수를 참고하여 Android 프로젝트를 생성한다. 그런데 이 과정에서 이 변수가 존재하지 않자, 몇 가지 필요한 과정을 거치지 못했기 때문에 오류가 발생한 것이다.


원래 정상적으로 프로젝트가 생성되었다면 다음과 같은 프로젝트 폴더 구조가 만들어져야 하고, Gradle Task 들도 정상적으로 목록에 나타나야 한다.





위의 두 스크린샷을 보면 알겠지만 루트 폴더 바로 아래의 생성되어야 할 폴더가 하나와 두 개의 Gradle 관련 파일이 누락되었다. 아래 그림을 보면 확실히 알 수 있다. 왼쪽이 오류로 생성된 프로젝트, 오른쪽이 정상적으로 생성된 프로젝트 구성이다.





위의 오류를 정확히 이야기 하면 Gradle을 이용해 프로젝트를 생성하는 도중 ANDROID_HOME 환경변수를 찾을 수 없어서, 오류가 발생했고, 이 과정에서 프로젝트 생성이 중단되면서 빌드에 필요한 몇몇 파일이 생성되지 않은 것이다.




문제 해결 방법



이를 해결하는 방법은 ANDROID_HOME 환경 변수를 만들어주고, PATH 환경 변수에 Android 관련 폴더 두 개를 설정해주는 것이다. 이를 위해 2개의 과정이 필요하다. 모든 과정이 끝나면 반드시 재부팅 한다.


1) 환경변수 PATH에 platform-tools, tools 폴더 설정해주기


먼저 bash 스크립트의 PATH에 Android SDK에 포함된 platform-tools, tools 폴더를 등록해주는 것이다. 이를 위해 터미널에서 다음과 같이 입력하면 된다.


vi ~/.bash_profile



그 다음 다음의 스크립트를 추가해준다.


export PATH=/[My Android SDK Path]/platform-tools:/[My Android SDK Path]/tools:$PATH 


물론 [My Android SDK Path] 는 자신의 컴퓨터의 Android SDK의 실제 경로로 바꿔주어야 한다.


참고 사이트: http://cduu.wordpress.com/2011/12/21/setting-android-and-path-environment-variables-on-mac-os-x/




2) /etc/launchd.conf 파일에 ANDROID_HOME 환경 변수 등록하기


여러 가지 profile 파일에 시도해 보았으나, 제대로 동작하지 않았다.

실제로 문제를 해결할 수 있었던 것은 launched.conf에 환경 변수를 등록해 주는 방법이었다.

이를 위해 터미널에서 다음과 같이 입력한다. 주의할 점은 launched.conf가 없을수도 있는데, 이 경우 그냥 새로 만들어 주면 된다는 것이다.


vi ~/etc/launchd.conf 



그 다음 다음과 같은 명령어를 추가해주고 저장한 다음 재부팅하였다.


setenv ANDROID_HOME /[My Android SDK Path]


그 다음 터미널에서 export를 실행해보자. 이 때 ANDROID_HOME이라는 환경 변수가 목록에 나타난다면 성공한 것이다.




결론


위의 오류 상황은 Android SDK 의 위치를 지정하는 ANDROID_HOME 환경 변수가 설정되지 않아, Gradle이 프로젝트를 생성하는 과정에서 발생한 것이다.  IntelliJ 13.0.2 에서는 프로젝트 내의 local.properties 파일에서 Android SDK의 경로를 읽어왔으나, 13.0.3 에서는 local.properties 파일이 아니라  운영체제의 환경 변수에서 이를 읽어오도록 수정되었다. 이렇게 변경됨으로써 다른 개발환경에서 개발한 Android 프로젝트를 다른 개발환경으로 옮겼을 때 일일히 local.properties 내의 SDK 경로를 수정해줘야만 하는 버거로움이 해소되었다. 


따라서 13.0.3 에서 기존 프로젝트를 정상적으로 이용하기 위해서는 /etc/launchd.conf 에 ANDROID_HOME 이라는 환경 변수를 설정해주어야 한다. 이렇게 설정해주고 재부팅하면 문제가 해결된다.


Trackbacks 0 / Comments 0

Leave Comments