프로그램/Ant / / 2013. 7. 22. 18:16

android - multi-dex(sub dex) 만들기

반응형

ant 스크립트는 android-sdk\tools\ant 위치에 있다.(build.xml)

참고로 sdk 버젼 바다 ant 빌드스크립트는 다르다. 어느정도 버젼마다 호환은 된다.

ant build 에서 target -compile 실행 후 실행 되도록 subdex를 만들 target 하나를 추가해 주자.

proguard 를 사용한다면 proguard 실행 후 실행되도록 추가.

target -compile 실행 후 bin 위치에 컴파일된 .class 된 파일들이 모여 있을것이다.

이 .class 를 subdex 로 만들 부분과 maindex 부분을 분리를 한다.

subdex로 묶을 .class 파일을 다른 위치에 복사 그리고 이 .class 를 jar 로 묶는다.


이제 코드 설명.


<!-- 추가된 target 에  subdex 로 만든 부분과 maindex 부분을 분리 하고 아래 코드를 실행 시켜 주자. -->

<dex-helper-subdex input-dir="${복사된 subdex에 묶일 .class의 위치}/subdex" output-dex-file="${subdex.temp.dir}/${jar파일 이름}">


</dex-helper-subdex>


<!-- SubDex 생성을 위한 macro 입력 위치로 부터 class를 읽어 output 위치에 dex로 출력 

아래 코드를 아무데나 넣어 두어도 된다. 위에 추가한 target 에 실행 되어 여기서 dex를 만들것이다. -->

<macrodef name="dex-helper-subdex">

<attribute name="input-dir" />

<attribute name="output-dex-file" />

<element name="external-libs" optional="yes" />

<sequential>

<if>

<condition>

<isreference refid="out.dex.jar.input.ref" />

</condition>

<else>

<path id="out.dex.jar.input.ref">

<path refid="${jar.libs.ref}" />

</path>

</else>

</if>

<echo>Converting compiled files and external libraries into @{output-dex-file}...</echo>

<dex executable="${dx}" output="@{output-dex-file}" nolocals="true" verbose="true">

<path path="@{input-dir}" />

<external-libs />

</dex>

</sequential>

</macrodef>


그리고 target 기본 흐름대로 놔두면 subdex가 생성 될것이다.

이 subdex는 assets 에 들어가 있을것이다.


참고로 subdex에 있는 코드를 호출할때 reflection 을 사용 해야 된다.

그러지 않은 클래스를 찾지 못한다는 오류를 보게 될것이다.

사용방법 아래 위치에서.

http://newtoynt.tistory.com/entry/multi-dex-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-dex-%E2%80%94-Dalvik-Executable-Format 



반응형

'프로그램 > Ant' 카테고리의 다른 글

Java - ant cannot find rt.jar  (0) 2014.03.17
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유