2013-04-17 4 views
14

내부적으로 정적 리소스 (이미지/xml 등)가 필요한 안드로이드 라이브러리 프로젝트를 빌드 중입니다.안드로이드 라이브러리 프로젝트에서 리소스에 액세스하는 방법

그런 다음이 리소스를 어디에 둘 수 있으며 리소스에 액세스 할 수 있는지 궁금합니다.

자원을 assets 폴더에 넣었습니다. 그리고 자원에 액세스 할 AssetManager를 사용 W/System.err(19583): java.io.FileNotFoundException: t.jpg

문제가 무엇인가

public class DataProvider { 
    byte[] getDrawableData(int num) { 
     AssetManager am = Resources.getSystem().getAssets(); 
     InputStream is = null; 
     try { 
      is = am.open("t.jpg"); 
     } catch (IOException e) { 
      return "".getBytes(); 
     } 
     if (is != null) { 
      Drawable dw = Drawable.createFromStream(is, null); 
      Bitmap bm = ((BitmapDrawable) dw).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      return stream.toByteArray(); 
     } 

     return "".getBytes(); 
    } 
} 

그러나 나는 오류가 발생했습니다? Sankar V으로


라이브러리 프로젝트는 원시 자산을 지원하지 않습니다 말했다. 그렇다면 나는 그 숫자를 res 폴더 밑에 넣어야 할 것 같습니다.

그러나 내가 원하는 것을 얻을 수없는 Resources.getSystem().getResources().... 메서드를 사용하려고했습니다. 그리고 사람들은이 방법이 애플리케이션 레벨 리소스가 아닌 시스템 레벨 리소스 만 가질 수 있다고 말했다.

이것이 사실이라면. 리소스를 얻고 자하는 곳에서 Context 개체의 참조를 보유해야한다는 것을 의미합니까?

+0

해결책으로 제공 한 링크를 완전히 확인 했습니까? "네가 도서관의 패키지 이름을 안다면 할 수있어."하고 해결책이있다. –

+0

나는 그 글을 읽었다. 하지만'context' 객체에 접근 할 수 없기 때문에 getResources() ....를 호출 할 수 없습니다. – hguser

+0

DataProvider 클래스가 어디에 있는지 확인하고 싶습니다. 라이브러리 프로젝트 또는 응용 프로그램 프로젝트 –

답변

7

그런 다음이 리소스를 어디에 둘 수 있으며 액세스 할 수 있는지 궁금합니다. 안드로이드 문서의

라이브러리 프로젝트에서

는 도구 라이브러리 프로젝트 (자산/디렉토리에 저장) 원시 자산 파일의 사용을 지원하지 않는 원시 자산

을 포함 할 수 없습니다. 애플리케이션에서 사용하는 모든 자산 리소스는 애플리케이션 프로젝트 자체의 자산/디렉토리에 저장해야합니다. 그러나 res/디렉토리에 저장된 리소스 파일은을 지원합니다.

문서 참조 링크 :LibraryProjects

솔루션 : 당신이하지 assetsres/ directory에 리소스를 추가 도서관 프로젝트 자체에서 리소스에 액세스하려면 : How to access resource files saved in res/ directory of library project from application project

. 애셋의 파일은 .jar 파일과 함께 번들로 제공되지 않기 때문입니다. R.java 파일에 생성 된 참조를 사용하여 평소와 같이 액세스 할 수 있습니다.

예 :는 내가 Context 객체 어디서나 내가 모든 자원을 얻고 싶은의 참조를 유지해야한다는 뜻 당김 사용

R.drawable.image_name 

에서 이미지에 액세스하려면?

정말 당신은 자원

에 액세스 할 컨텍스트에 대한 참조를 보유해야

업데이트 : 당신이 자원 번들 할 수 있습니다 이제 안드로이드 라이브러리 프로젝트가 AAR로 생성 할 수

(안드로이드 아카이브) 파일 Java 클래스를 번들로 묶을 수있는 오래된 jar (Java Archive) 파일 대신 라이브러리 프로젝트에 필요한 파일.

+0

Sankar : '라이브러리 프로젝트에는 원시 자산을 포함 할 수 없습니다.' 그러나 클래스와 자산 폴더를 함께 묶는 3 부 라이브러리를 사용했습니다. 문제가 무엇입니까? – hguser

+0

제 3 자 라이브러리가 무엇인지 알 수 있습니까? –

+0

그것은 안드로이드 SDK입니다. 이 스크린 샷을보십시오 : http : //i.imgur.com/7I6aq1D.png. – hguser

0

Eclipse에서 링크 된 폴더를 사용하고 자산 폴더를 새 프로젝트에 연결할 수 있습니다.

+0

아마도 이클립스에서 안드로이드 스튜디오에 도움이되지 않습니다 지금은 일을 선호한다. 하지만 나는 프로젝트가 빌드 될 때 링크 된 폴더가 링크되어 있지 않기 때문에 이것이 Eclipse에서도 도움이된다고 나는 믿지 않는다. –

관련 문제