2015-01-19 2 views
6

라이브러리를 작성하려고합니다. 라이브러리 프로젝트의 코드에 액세스하려는 res 디렉토리 아래에 Android 라이브러리 프로젝트와 일부 리소스가 있습니다. 안드로이드 문서는 말한다 : 라이브러리 모듈Android 라이브러리 프로젝트에서 리소스에 액세스 하시겠습니까?

소스 코드는 R 클래스

을 통해 자신의 리소스에 액세스 할 수 있습니다하지만 난 그냥이 작업을 수행하는 방법을 알아낼 수 없습니다. 라이브러리이기 때문에 다른 응용 프로그램에서 사용하기 위해 자체적으로 실행하지 않으므로 Activity이 없으므로 ContextgetResources()으로 사용할 수 없습니다. 컨텍스트없이 이러한 리소스에 명시 적으로 액세스하려면 어떻게해야합니까?

+0

라이브러리 란 라이브러리 프로젝트 또는 JAR/AAR 파일을 의미합니까? JAR 파일이 아닌 라이브러리 프로젝트 또는 AAR 파일에서만 자원에 액세스 할 수 있습니다. – shkschneider

+0

JAR 파일이 아닌 라이브러리 프로젝트입니다. – sqshemet

+0

공정하기 때문에 신청서를받지 못했습니다. "활동 없음"또는 "컨텍스트"가 있습니까? Android 애플리케이션을 구축하고 있습니까? – shkschneider

답변

0

활동이 없으면 R 클래스를 사용할 수없는 것처럼 보입니다. 라이브러리 내에 테스트 응용 프로그램이 있으면 테스트 응용 프로그램은 R에 액세스 할 수 있지만 lib 자체에는 액세스 할 수 없습니다.

그래도 이름으로 리소스에 액세스 할 수 있습니다. 예를 들어, 내가

public class MyContext extends ContextWrapper { 
    public MyContext(Context base) { 
    super(base); 
    } 

    public int getResourceId(String resourceName) { 
    try{ 
     // I only access resources inside the "raw" folder 
     int resId = getResources().getIdentifier(resourceName, "raw", getPackageName()); 
     return resId; 
    } catch(Exception e){ 
     Log.e("MyContext","getResourceId: " + resourceName); 
     e.printStackTrace(); 
    } 
    return 0; 
    } 
} 

그리고 라이브러리에있는 개체의 생성자 (자세한 ContextWrappers에 대한 자세한 내용은 https://stackoverflow.com/a/24972256/1765629 참조), 내 라이브러리 내에서 이런 클래스가, 즉 컨텍스트 래퍼 소요

public class MyLibClass { 
    public MyLibClass(MyContext context) { 
    int resId = context.getResourceId("a_file_inside_my_lib_res"); 
    } 
} 

그런 다음, lib 디렉토리를 사용하는 응용 프로그램에서, 나는 상황을 통과해야

public class MyActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    MyLibClass a = new MyLibClass(new MyContext(this)); 
    } 
} 

MyContext, MyLibClass 및 a_file_inside_my_lib_res는 모두 라이브러리 프로젝트 내에 있습니다.

도움이되기를 바랍니다.

관련 문제