Skip to main content

[Android] Butter Knife Library(1)

Android UI 개발 시, 반드시 선언해 주어야 하는 구문 중 하나가 바로 findViewById 이다.
이는 View 를 선언할 때 반드시 필요한 구문이지만, 반복적으로 사용해야 하고, 메소드가 길어지는점, 특히, Adapter 에서 Holder pattern 과 같이 사용하게 되면 같은말을 두번해야 하는 번거로움 마저 느껴진다.

최근에는 이같은 반복적인 작업과 UI 선언 부의 노력을 줄이고, 코드에 좀 더 집중하기 편한 Library 들이 선보이고 있다.

그중에서도 눈의 띄는 Library 는 단연 AndroidAnnotations 과 지금부터 이야기 할 Butter Knife 이다.
AndroidAnnotations
AndroidAnnotations logo
AndroidAnnotations 은 지난 GDG mini conference 에서도 소개된 적이 있다.
(사실 그때 처음 일았지만..)

당시에 Clean Code 라는 주제로 코드 분량을 줄이고, 실제 동작하는 로직에 좀 더 집중할 수 있도록 도와 주었다. 사실 , AndroidAnnotations 이 더 많은 기능을 제공하고 있지만, EActivity 사용시 _ 를 추가해야 한다는 점, 과거 intellij 에 적용시 몇몇 버그들이 발생 으로 인해 (현재는 해결됬을지도.) 프로젝트에 적용하기 쉽지 않았다.

그러던 중, 최근 가장 hot 한 Opensource 를 제공하고 있는 Square 팀의 JakeWharton 이 Butter Knife 를 Release 하였다.
Butter Knife logo
현재 가장 최신 버전은 2.0.1 이고 계속해서 기능개선이 이루어 지고 있다.

Butter Knife 는 아래와 같은 장점을 지니고 있다.

1. LightWeight Size


모바일 device 에서는 jar 하나 추가하는데도 많은 고민을 해야 한다. 안그래도 많은 기능들을 추가해야 되고, library 를 사용해야 하는데 이렇게 코드를 줄이기 위해서 많은 용량을 할애하기도 애매하다.

androidannotations 의 경우에는 build path 에 적용되야 할 jar 의 용량이 61kb 이다.
반면, butter knife 는 19kb 로 상대적으로 lightweight 하다고 말할 수 있다.

- androidannotations-2.7.1.jar : 543kb
- androidannotations-2.7.1.jar : 61kb
- butterknife-2.0.1.jar : 19kb

 2.Easy to Use


기존 라이브러리 의 단점 중 하나를 꼽자면 사용하기 어렵다는 점 이다. 예를 들어 AndroidAnnotations 의 경우, @EActivity 를 사용하면서 Manifest.xml 을 수정해야 하고, 개발 전 세팅 단계에서 많은 시간을 필요로 한다.

Butter Knife 의 경우, jar 를 build path 에 등록하고 annotation processing 설정만 해 주면 간편하게 사용 할 수 있다. 또한, eclipse, android studio(intellij) 모두 에러없이 잘 작동한다.

사용법도 비교적 쉽기 때문에 annotation 에 깊은 지식이 없다고 하더라도 쉽게 접근이 가능하다.

이제 Butter Knife 를 Android Studio 에서 사용해 보자.
Android Studio 에 Library 를 추가하면 다음 과 같은 세팅이 필요하다.

우선 libs 폴더에 butterknife-2.0.1.jar 를 추가하자.


Android Studio 에서는 Gradle build 를 사용하기 때문에, build.gradle 에 해당 library 를 dependencies 에 추가 해야 한다.

- build.gradle -
dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile files ('libs/butterknife-2.0.1.jar')
}

Butter Knife 역시 annotation processing 을 사용하기 때문에 해당 옵션을 enable  해 주어야 한다.
Preferences -> Compiler -> Annotations Processors -> Enable annotation processing  을 체크 한다.
마지막으로 Project Structure 에 해당 library 를 사용하도록 추가 함으로써 개발 설정이 끝이 난다.



Comments

Popular posts from this blog

[Tip] Homebrew 로 설치한 Python 환경에서 GAE Flask 설치하기

2014.07.10 -- Issue -- ~/.pydistutils.cfg 파일을 생성하고 나서 pip install 을 할 경우, permission denied 오류가 발생하는 경우가 있다. 이때는 prefix= 를 삭제하면 정상적으로 설치할 수 있다. 또는, 설치시 아래와 같은 명령어로 설치한다. pip install --user --install-option="--prefix=" <package-name> -------------------------------------------------- Mac 에서 Homebrew 를 사용하면 각종 package 를 편리하게 관리 할수 있다. 그런데 Homebrew 를 통해 Python 을 설치한 환경에서, Google App Engine 의 Flask package 를 설치하기 위해 명령어 ( pip install -r requirements.txt -t lib/ )를 실행하면 아래와 같은 오류가 발생한다. 말 그대로 prefix 를 설정해 달라는 이야기 인데, 해결 방법은 다음과 같다. HOME(~/) 에 .pydistutils.cfg 파일을 생성하고 아래 코드를 추가한다. [install] prefix= 그리고 다시 실행하면 정상적으로 Flask package 가 설치되는것을 확인할 수 있다. Reference 1. stackoverflow http://stackoverflow.com/questions/24257803/distutilsoptionerror-must-supply-either-home-or-prefix-exec-prefix-not-both 2. Github Issue https://github.com/Homebrew/homebrew/wiki/Homebrew-and-Python

[Android] Android Studio static / member variable prefix 설정 방법

Java 에서 static 변수는 는 s~로,  맴버 변수는 m~ 으로 시작하는 경우가 대부분이다. Android Studio 에서 변수를 선언 후 getter/setter 를 자동 생성하면 [(cmd + n) -> (Getter and Setter) 선택] 아래와 같이 s 와 m 이 붙어 나오게 된다. public class SampleClass { private static int sStaticVariable = 1; private int mMemberVariable = 1; public static int getsStaticVariable() { return sStaticVariable; } public static void setsStaticVariable(int sStaticVariable) { SampleClass.sStaticVariable = sStaticVariable; } public int getmMemberVariable() { return mMemberVariable; } public void setmMemberVariable(int mMemberVariable) { this.mMemberVariable = mMemberVariable; } } 하나하나 m, s 를 지우는 것 보다 setting 에서 변수 prefix 를 미리 설정해 두면  이러한 불편을 해결할 수 있다. Mac 기준으로 Android Studio -> Preferences -> Code Style -> Java 에서 Code Generation 을 선택 하면 아래와 같은 화면을 볼 수 있다. 위와같이  Field : Name Prefix 란에 "m", Static Field : Name Prefix 란에 "s" 를 입력하고 OK 버튼을 누르면 설...

[Cobertura] cobertura 2.0.2 script fix

cobertura 2.0.2 버전을 다운받고 실행 시키려고 하면 엄청난 에러가 뿜어져 나온다. ㅠ 달리 설정을 틀리게 한 것도 없는데.. 하면서 script 를 열어보니 아래와 같이 작성되어 있다. - cobertura-instrument.sh java -cp `dirname $0`/cobertura.jar:`dirname $0`/lib/asm-3.3.1.jar:`dirname $0`/lib/asm-tree-3.3.1.jar:`dirname $0`/lib/asm-commons-3.3.1.jar:`dirname $0`/lib/log4j-1.2.9.jar:`dirname $0`/lib/jakarta-oro-2.0.8.jar net.sourceforge.cobertura.instrument.Main $* - cobertura-instrument.bat java -cp "%COBERTURA_HOME%cobertura.jar;%COBERTURA_HOME%lib\asm-3.3.1.jar;%COBERTURA_HOME%lib\asm-tree-3.3.1.jar;%COBERTURA_HOME%lib\asm-commons-3.3.1.jar;%COBERTURA_HOME%lib\log4j-1.2.9.jar;%COBERTURA_HOME%lib\jakarta-oro-2.0.8.jar" net.sourceforge.cobertura.instrument.Main %CMD_LINE_ARGS% 그런데 막상 다운받은 folder 구조를 보면.. cobertura-2.0.2.jar /lib     - asm-4.1.jar     - asm-commons-4.1.jar     - sam-tree-4.1.jar     - oro-2.0.8.jar .... script 왜 이렇게 되있지... 결국 cobertura 를 실행 시키기 위해서는 script 에서 버전 및 파일명을 다운받은 폴더...