Android/Tools2009. 12. 15. 13:48
2009년 12월 10일 android blog에 새로운 글이 포스팅 되었다.

Optimize your layouts

Android application 은 xml 파일을 작성하여 UI layout을 생성할 수 있다.
이 UI layout을 위한 xml파일이 효율적으로 작성이 되어 있는지를 검사해주는 툴이 layoutopt 이다.

사용 법은 간단하다.
usage: layoutopt <directories/files to analyze>

$ layoutopt samples/samples/compound.xml
  7:23 The root-level <FrameLayout/> can be replaced with <merge/>
  11:21 This LinearLayout layout or its FrameLayout parent is useless samples/simple.xml
  7:7 The root-level <FrameLayout/> can be replaced with <merge/>
samples/too_deep.xml
  -1:-1 This layout has too many nested layouts: 13 levels, it should have <= 10!
  20:81 This LinearLayout layout or its LinearLayout parent is useless
  24:79 This LinearLayout layout or its LinearLayout parent is useless
  28:77 This LinearLayout layout or its LinearLayout parent is useless
  32:75 This LinearLayout layout or its LinearLayout parent is useless
  36:73 This LinearLayout layout or its LinearLayout parent is useless
  40:71 This LinearLayout layout or its LinearLayout parent is useless
  44:69 This LinearLayout layout or its LinearLayout parent is useless
  48:67 This LinearLayout layout or its LinearLayout parent is useless
  52:65 This LinearLayout layout or its LinearLayout parent is useless
  56:63 This LinearLayout layout or its LinearLayout parent is useless
samples/too_many.xml
  7:413 The root-level <FrameLayout/> can be replaced with <merge/>
  -1:-1 This layout has too many views: 81 views, it should have <= 80! samples/useless.xml
  7:19 The root-level <FrameLayout/> can be replaced with <merge/>
  11:17 This LinearLayout layout or its FrameLayout parent is useless

하지만 Window 환경에서 layoutopt를 수정없이 사용하게 되면 아래와 같은 에러를 보게 될 것이다.

Exception in thread "main" java.lang.NoClassDefFoundError: lib\layoutopt/jar
Caused by: java.lang.ClassNotFoundException: lib\layoutopt.jar
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: lib\layoutopt.jar.  Program will exit.

포스팅된 글을 끝까지 잘 읽어보면 해결책이 나와있다.

Windows users: to start layoutopt, open the file called layoutopt.bat in the tools directory of the SDK and on the last line, replace %jarpath% with -jar %jarpath


쉽게 이해가 안되면 아래와 같이 따라하자.

1. \sdk\android-sdk-windows\tools\layoutopt.bat 파일을 편집기로 연다.

2. 파일의 제일 마지막을 다음과 같이 수정한다.

수정 전  call java %java_debug% -Djava.ext.dirs=%javaextdirs% %jarpath% %*
수정 후  call java %java_debug% -Djava.ext.dirs=%javaextdirs% -jar %jarpath% %*

3. 파일을 저장 후 layoutopt를 사용한다.
파일명을 직접 입력 하거나, xml 파일이 있는 폴더명을 입력해주면 해당 폴더 내의 모든 xml 파일을 분석한다.

분석 내용이 길어질 경우를 대비에 > 를 사용해 출력을 analyze.txt에 담아도 좋다.

> layoutopt main.xml > analyze.txt
> layoutopt ./res/layout/

만약 분석을 요청한 파일에 특별한 내용이 없을 경우에는 
입력한 parameter만 출력이 되고 동작을 멈춘다.

[U]
Posted by ekwang