2012-04-05 3 views
6

안드로이드 프로젝트를 가지고 있어요.이 프로젝트 프로젝트는 안드로이드 lib 프로젝트에 의존합니다. LibX. 이제 LibX는 또 다른 안드로이드 라이브러리 프로젝트 인 LibY에 의존합니다. 개미를 사용하여 프로젝트를 빌드하려면 어떻게해야합니까? 여기가에서 시작개미/팀워크를 사용하여 안드로이드 프로젝트를 참조하는 안드로이드 프로젝트를 빌드

빌드시에

, 라이브러리는 한 번에 응용 프로그램 하나를 병합 말씀입니다

http://developer.android.com/guide/developing/projects/projects-cmdline.html

- 여기

내가가 참조하고있는 안드로이드 문서입니다 최저 우선 순위부터 최고 우선 순위까지. 라이브러리는 자체적으로 다른 라이브러리를 참조 할 수 없으며 빌드시 라이브러리가 응용 프로그램과 병합되기 전에 서로 병합되지 않는다는 점에 유의하십시오.

이 방법이 있습니까? 안드로이드 개발자 사이트에 의해

+0

다른 도서관 프로젝트에서 도서관 프로젝트를 참조하는 목적은 무엇인가, 당신은 이유에 대해 조금 더 설명 할 수있는 /build/lib3d_NAME_HERE.jar에서 생성됩니다 너는 이것을 할 필요가 있니? – yorkw

+0

+1 동일한 문제가 있습니다. –

+0

여기에 대한 사용 사례는 ActionBarSherlock입니다. 웹 연결과 물건 및 기본 UI를 수행하는 라이브러리가 있습니다. ActionBarSherlock을 참조합니다. 그런 다음 도서관 프로젝트에서 UI를 개선하는 다른 프로젝트가 있습니다. 내가 생각할 합리적 유스 케이스. –

답변

0

: 도서관 프로젝트에서 http://developer.android.com/tools/projects/index.html에서 소스 섹션 :

"... 구조적으로, 라이브러리 프로젝트는 표준 안드로이드 응용 프로그램 프로젝트와 유사하다 예를 들어, 매니페스트가 포함되어 있습니다. src 디렉토리, res/디렉토리 및 유사한 디렉토리에있는 프로젝트 루트의 프로젝트에는 동일한 방식으로 저장되는 표준 Android 프로젝트와 동일한 유형의 소스 코드 및 리소스가 포함될 수 있습니다 (예 : 소스 ). 라이브러리 프로젝트의 코드는 R 클래스를 통해 자체 리소스에 액세스 할 수 있습니다.

그러나 라이브러리 프로젝트는 표준 Android 애플리케이션 프로젝트와 다릅니다. 직접 프로젝트를 자체 .apk로 컴파일하고 Android 장치에서 을 실행할 수 없습니다. 마찬가지로 라이브러리의 경우처럼 라이브러리 프로젝트를 자체 포함 된 JAR 파일로 내보낼 수 없습니다. 대신, 종속 응용 프로그램에서 라이브러리를 참조하고 응용 프로그램을 빌드하여 을 통해 간접적으로 라이브러리를 컴파일해야합니다.

라이브러리 프로젝트에 따라 달라지는 응용 프로그램을 빌드 할 때 SDK 도구는 라이브러리를 임시 JAR 파일로 컴파일하고 주 프로젝트에서 사용한 다음 결과를 사용하여 .apk를 생성합니다. 리소스 ID가 응용 프로그램과 라이브러리 모두에 정의 된 의 경우 도구는 응용 프로그램에 선언 된 리소스가 우선 순위를 갖도록하고 라이브러리 프로젝트의 리소스 이 응용 프로그램 .apk로 컴파일되지 않도록합니다. 이렇게하면 응용 프로그램에 에 임의의 리소스 동작을 사용하거나 다시 정의 할 수있는 유연성 또는 모든 라이브러리에 정의 된 값인 값이 제공됩니다.

코드를 추가로 구성하려면 응용 프로그램에서 여러 라이브러리 프로젝트에 대한 참조를 추가 한 다음 각 라이브러리의 리소스의 상대적 우선 순위를 지정하십시오. 이를 통해 누적 방식으로 애플리케이션에 실제로 사용 된 리소스를 구축 할 수 있습니다. 응용 프로그램에서 참조 된 두 개의 라이브러리가 동일한 리소스 ID를 정의하면 도구는 더 높은 우선 순위 을 사용하여 라이브러리에서 리소스를 선택하고 다른 리소스를 삭제합니다.

라이브러리 프로젝트에 대한 참조를 Android 프로젝트에 추가하면 관련 우선 순위를 설정할 수 있습니다. 빌드시 라이브러리는 한 번에 하나씩 응용 프로그램과 병합됩니다. 우선 순위가 가장 낮은 우선 순위 인 부터 시작합니다.

라이브러리 프로젝트는 다른 라이브러리 프로젝트를 참조 할 수 있으며 정상적인 방법으로 외부 라이브러리 (JAR)를 가져올 수 있습니다. ... "

라이브러리 Rajawali (버전 0.9)를 사용할 때 유사한 문제가 발생했습니다. 파일을 배포 할 필요가있었습니다. 단일 병과 응용 프로그램은이 JAR을 사용하여 3D 화면을 표시합니다. 우리 도서관이 도서관 자원 Rajawali를 사용한 맞춤화 였기 때문에 두 개의 프로젝트 구조 (예 : 도서관 프로젝트)가 만들어졌습니다. 생성 할 때 위에서 설명한 이유로 자원을 사용하는 JAR 응용 프로그램이 작동하지 않았습니다. 이미지의 Rajawali 기능을 사용하여 대상 응용 프로그램의 버전에서 인식되지 않는 ID를로드합니다.

단일 JAR 솔루션은 Rajawal을 사용하지 않도록 코드를 수정하여 유효성을 검사 할 수 있습니다 리소스를 R.raw.X (안드로이드 방식)를 통해 폴더 에셋/을 사용하고 Rajawali AsseptManager를 사용하여 리소스를 엽니 다. 이 솔루션은 내부 자산 및 바이트 코드 ( 클래스)와 LIB Rajawali를 사용하여 JAR 폴더로 내 보냈습니다.

Fat-JAR Eclipse PlugIn (또는 0.0.31 +) [업데이트 사이트 http://kuruczgrafika.de/fatjar]는 단일 JAR을 생성하여 대상 응용 프로그램에서 사용할 수 있습니다. ANT 스크립트는 아래 XML을 실행하는 데 사용되었으며 JAR 파일이 생성되었습니다. 파일 "lib3d_NAME_HERE.jar"(.JAR)는

<?xml version="1.0"?> 
<project name="lib3d_NAME_HERE" default="main" basedir="."> 

    <property name="projectPath" value="D:\Development\lib3d_NAME_HERE"/> 


    <!-- this file was created by Fat-Jar Eclipse Plug-in --> 
    <!-- the ANT-Export is in a very early stage, so this --> 
    <!-- is only experimental, ANT 1.6 or above is  --> 
    <!-- required, feedback is always welcome:   --> 
    <!--  http://sourceforge.net/projects/fjep  --> 
    <!-- uncomment the following lines if using ANT outside Eclipse --> 
    <!-- 
     <property name="fjepPath" value="reference:file:plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/> 
     <taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/> 
     <typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/> 
    --> 
    <!-- uncomment the above lines to use ANT outside of Eclipse --> 
    <target name="main"> 
     <fatjar.build output="build/lib3d_NAME_HERE.jar"> 
      <fatjar.manifest/> 
      <fatjar.filesource path="${projectPath}/bin/classes" relpath=""/> 
      <fatjar.filesource path="${projectPath}/assets/" relpath="assets"/> 
     </fatjar.build> 
    </target> 
</project> 
관련 문제