2011-03-15 4 views
13

ant를 사용하여 동일한 jar 파일을 참조하는 여러 Android 프로젝트를 작성하고 싶습니다. jar 파일을 프로젝트의 각 libs 디렉토리에 복사하지 않으려합니다 (소스 제어 트리가 설정된 방식으로 인해). 여기서 answers I find은 "libs 디렉토리에 넣으십시오"라고 말하면서이 문제를 해결하지 못합니다.ant를 사용하여 android 프로젝트를 빌드하려면 공용 디렉토리 (libs가 아님)에서 외부 jar 파일을 어떻게 참조해야합니까?

질문 : 프로젝트 안의 "libs"가 아닌 별도의 디렉토리에서 공통 jar를 참조하도록 내 안드로이드 Ant 빌드 스크립트를 구성하려면 어떻게해야합니까?

답변

9

sdk에는 tools/ant 아래에 개미 파일이 있습니다. main_rules.xml에서 다음 코드 섹션을 찾을 수 있습니다 개미 빌드 코드는 어디에서 항아리를 얻는 방법을 결정

<!-- Directory for the third party java libraries --> 
<property name="jar.libs.dir" value="libs" /> 
<property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /> 
<!-- create a path with all the jar files, from the main project and the 
    libraries --> 
<path id="jar.libs.ref"> 
    <fileset dir="${jar.libs.absolute.dir}" includes="*.jar" /> 
    <path refid="project.libraries.jars" /> 
</path> 

이입니다. 이 섹션 전에 읽혀지고 값을 오버로드하기 때문에 build.properties에 jar.libs.dir의 값을 오버로드 할 수 있습니다. 당신이 사용하고자하는 공통 디렉토리를 가리키면 당신이 제안하는 것을 할 수 있습니다. 원하는 방식으로 작동하려면 게임을해야 할 수도 있습니다.

하나의 경고는 이것이 다른 라이프 사이클 활동에 부정적인 영향을 줄 것인지 확실하지 않다는 것입니다.

7

최신 SDK 도구를 사용하면 쉽게 달성 할 수 있습니다. 나는 모든 안드로이드 프로젝트가 공유하는 마스터 libs 폴더를 가지고 있는데, 이것을 lib3700을 위해 한개의 레벨을 찾기 위해 ant.properties 파일에 추가했다. 당신이 리눅스를 사용하는 경우

jar.libs.dir=../libs 
+0

또한 작업 전 확인 : jar.libs.dir = ../MyUtilAnd3rdPartyLibraryProject/libs가 – user77115

+0

이상한를 .. 나를 위해 작동하지 않는 .. 나는 울리는 시도 'jar.libs.dir' 값은 컴파일 대상 바로 앞에서'../libs'를 보여 주지만 컴파일은 여전히 ​​실패합니다. 이것은 SDK Tools 21.0.1에 있습니다. –

+0

문제를 발견하여 답변을 게시합니다. –

-2

, 그냥 다음 libs에 모두 배치, 외부 jar 파일의 심볼릭 링크를 만든다. 개미가 잘 작동합니다. 편집

libs (하지 하위 디렉토리)에있는 모든 심볼릭 링크를 직접 확인 장소를 확인합니다. 이것은 ant 스크립트에 의해 다시 설정 될 수 있다고 확신합니다. 하지만 나는 개미에 익숙하지 않다 :-)

3

질문에 따라 here과 대답은 here에서 나온 것이므로 제공된 솔루션은 현재 작동하지 않습니다. 제기 된 버그가 수정 될 때까지 참조 된 대답에서 언급 한대로이 솔루션은 아래에 복사됩니다.


템플릿을 custom_rules.xml에 추가하면 제대로 작동하는 것 같습니다. 우리가 더 나은 해결책을 얻을 때까지 ant.properties 파일에 경로를 추가하는 것보다 몇 줄이 더 많을 것으로 예상했습니다. 다른 모든 프로젝트에서 공유 폴더의 유틸리티 프로젝트에 포인팅

<target name="-pre-compile"> 
    <path id="project.all.jars.path"> 
    <path path="${toString:project.all.jars.path}"/> 
    <fileset dir="${jar.libs.dir}"> 
     <include name="*.jar"/> 
    </fileset> 
    </path> 
</target> 
관련 문제