2009-12-31 3 views
54

안드로이드에 사용할 수있는 jar 라이브러리 파일이 될 수있는 프로젝트를 어떻게 설정합니까? 모든 프로젝트에서 사용자 지정 라이브러리를 만들고 싶습니다.안드로이드 Jar 라이브러리

약간 다른 질문 :

  1. 는 안드로이드 SDK의 특정 버전에 대해 컴파일 할 필요가 있는가

    ?
  2. 안드로이드 패키지가 jar 라이브러리에 대해 컴파일 될 때 코드로 작업하는 데 필요한 클래스가 apk로 기본 코드로 컴파일되거나 전체 jar가 포함됩니까?
  3. 코드를 직접 통합하는 대신 jar를 사용하여 알아야 할 주목할만한 최적화 또는 함정이 있습니까?
  4. APK와 같이 항아리에 서명해야합니까?
+1

좋은 질문 한 –

답변

29

Google은 공유 라이브러리를 처리하는 SDK의 새로운 버전을 출시합니다!

https://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject

ADT 0.9.7 (2010 년 5 월)

라이브러리 프로젝트 :
ADT 플러그인은 지금 개발 중에 라이브러리 프로젝트의 사용을 지원, 당신을 할 수있는 능력 별도의 개발 프로젝트 에 Android 응용 프로그램 코드와 리소스를 공유합니다. 다음 다른 Android 프로젝트의 라이브러리 프로젝트를 참조하고 빌드 시간에 공유 코드 및 리소스를 종속 응용 프로그램 의 일부로 컴파일합니다. 이 기능에 대한 정보는 이며 ADT 문서가있는 Eclipse에서 개발 중입니다.Eclipse에서 을 개발하지 않은 경우 SDK 도구 r6 은 해당 빌드 프로젝트를 Ant 빌드 시스템을 통해 제공합니다.

+0

나는이 MotoDev Studio를 쓰는 시점에서 라이브러리를 사용할 수있는 기능을 지원하지 않는다는 점을 언급하고자합니다. 표준 ADT GUI를 대체하며 프로젝트를 라이브러리로 만들 수있는 숨 깁니다. 나는 그것이 시간 내에 고쳐질 것이라고 확신한다. – ddcruver

+0

MotoDev Studio 1.2.1은 공유 라이브러리를 지원합니다. –

+0

예, Google에서 출시 한 약 ADT가 업데이트를 잊어 버린 지 약 2 일 후에 업데이트됩니다. – ddcruver

29

Android 앱에서 작동 할 jar 파일을 만들려면 프로젝트 설정에서 특별히해야 할 것은 없습니다. Eclipse에서 일반 Java 프로젝트를 작성하기 만하면됩니다.

  1. Android 용으로 컴파일 할 필요가 없습니다. Android에 포함되지 않은 클래스를 참조하지 않는 한 모든 jar 파일을 포함 할 수 있습니다. jar 파일을 Eclipse의 Android 프로젝트 빌드 경로에 포함하면 APK 파일에 자동으로 포함됩니다.

  2. 잘 모르겠지만 jar 파일의 모든 클래스가 APK에 포함되어 있다고 가정합니다.

  3. 단지 병과 프로젝트의 일부 클래스를 직접 포함 시키면 결과 APK에 어떤 차이가 생길 것이라고 생각하지 않습니다.

+9

4. JAR 서명 할 필요가 없습니다. –

+1

방금로드 블록을 만났습니다. R.java 파일에 ID를 추가하는 사용자 정의 레이아웃이 있고 다른 Android 종속성이 있습니다. 이것들을 jar 형식으로 가져 오는 방법은 무엇입니까? –

+3

Java 클래스 파일은 항아리에만 넣을 수 있습니다. 거기에 사용자 정의 레이아웃 XML을 넣을 수 없습니다. 그것들을 프로젝트에 복사해야합니다. –

0

당신은 플랫폼/안드로이드 - X.X 아래 android.jar 파일에 보면/android.jar 당신은뿐만 아니라 하나를 만들 수 있어야 있도록 레이아웃 XML 항목을 포함 않는 파일을합니다. 나는 당신이 이것을하는 방법과 당신이 다른 프로젝트에서 그것들을 참조하는 방법에 대해서 정확히 모르겠습니다.

5

나는 myselft에게 동일한 질문을 던졌습니다. 안드로이드에서 레이아웃을 내보내고 재사용 할 수 있습니까? XML 리소스가있는 프로젝트를 JAR 파일로 내 보낸 다음 R.layout을 통해 레이아웃에 액세스하려고했습니다. 물론 R.layout.main은 호스트 프로젝트의 R.layout에 정의 된 단일 레이아웃 (relative.xml)과 연관된 정수와 같은 정수 였기 때문에 작동하지 않았습니다.

안드로이드 SDK는 레이아웃 XML 파일을 View 리소스로 komp합니다. 포함 된 JAR 파일의 XML 파일은 레이아웃 xml 파일이 아니기 때문에 컴파일되지 않으며 R.layout에서 ID가 연관되지 않습니다.

프로젝트에서 레이아웃을 내보내려면 XML로 내보내고 외부 프로젝트의 일부가 아닌 레이아웃 리소스로 새 프로젝트로 가져와야합니다.

JAR에서 레이아웃을 다시 사용하려면보기의 하위 메뉴를 만들어 코드에서 레이아웃을 만들어야합니다. 인스턴스를 생성하고 생성 된 인스턴스를 활동 뷰로 설정하거나 인스턴스를 활동 뷰에 추가 할 수 있습니다.

3

jar 파일을 만들려면 Eclipse의 내보내기 옵션을 사용해야합니다. 내보내기 대화 상자에서 java 및 하위 옵션 JAR을 선택하십시오. 일부 선택이 필요한 부분에 마법사가 표시됩니다. jar 파일이 저장 될 위치를 지정해야합니다.

처음으로 jar 파일을 만들 때 오류가 발생했습니다. Android Manifest를 포함 시켰습니다. 생성 된 jar 파일을 추가 할 때 이중 안드로이드 매니페스트 충돌이 발생했습니다.

5

나를 위해이 작품 !!!. attrs.xml과 같은 리소스를 사용하는 라이브러리 프로젝트에서 .jar 파일을 응용 프로그램으로 사용하려는 경우 (레이아웃, 문자열 등 다른 리소스를 가정) R.java를 생성합니다. 당신은 export->Java/Jar file->에 가서 체크 아웃 projects -> Finish에 대한 모든 출력 폴더 내보내기 체크 ... 이것은 런타임에이 항아리를 사용하는 응용 프로그램이 누락 된 클론 및 리소스에 대한 예외를 생성하지 않도록합니다.

물론, 당신에게 새로운 프로젝트로 항아리를 포함하십시오. project properties-> Java build path -> Libraries -> Add external jar -> 그리고 끝났습니다.

희망이 도움이됩니다.

1

사용자 정의 방법을 사용하여 동적으로 R 파일에 접근 할 수 있습니다 (예 : 아래 링크 참조).

Packaging Android resource files within a distributable Jar file

public static int getResourseIdByName(String packageName, String className, String name) { 
    Class r = null; 
    int id = 0; 
try { 
    r = Class.forName(packageName + ".R"); 

    Class[] classes = r.getClasses(); 
    Class desireClass = null; 

    for (int i = 0; i < classes.length; i++) { 
     if(classes[i].getName().split("\\$")[1].equals(className)) { 
      desireClass = classes[i]; 

      break; 
     } 
    } 

    if(desireClass != null) 
     id = desireClass.getField(name).getInt(desireClass); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (SecurityException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} 

return id; 
} 
관련 문제