2011-10-30 2 views
4

런타임시 Android 플랫폼에서 동적으로 클래스를로드하려고합니다. 이 클래스는 별개의 라이브러리 JAR 파일에 포함되어 있지만 SDK의 새 라이브러리 메커니즘에 따라 APK로 패키지되어 있습니다. Class.forname 메서드를 사용할 때 클래스를 찾을 수 없습니다. 예외가 발생했습니다. DexClassLoader 메소드에 대한 논의를 보았지만 사용 방법에 대한 좋은 예는 찾을 수 없습니다 (그리고 이것이 가장 좋은 방법인지는 모르겠지만 forname 접근법보다 훨씬 복잡합니다!).Android : JAR 파일에서 클래스를 동적으로로드하는 방법?

누군가가이 문제를 해결하는 방법에 대한 코드 스 니펫을 제공 할 수 있다면 매우 감사하게 생각합니다.

많은 도움에 감사드립니다.

답변

4

다음은 동적으로 DevicePolicyManager 클래스를로드하는 예입니다.

Class myClass =                   
    ClassLoader.getSystemClassLoader().loadClass("android.app.admin.DevicePolicyManager") 

Object DPMInstance = myClass.newInstance();            

Method myMethod = myClass.getMethod("setPasswordQuality",        
            new Class[] { ComponentName.class,     
                int.class });       
myMethod.invoke(DPMInstance,               
       new Object[] { myComponentName,           
           PASSWORD_QUALITY_NUMERIC }); 

장치가 충분히 높은 SDK 버전을 실행 중일 때만 클래스를로드하도록 선택할 수 있으므로 유용합니다.

+0

감사합니다. Dan. 그러나이 메서드를 사용하여 여전히 ClassNotFoundException이 발생합니다. 클래스가 JAR 파일이 아니라 기본 응용 프로그램 내에 있으면 클래스가 정상적으로로드되므로 코드가 직접 참조되지 않아 ClassLoader가로드하지 않으면 JAR 파일을 먼저 확장해야합니다. – Jon

+0

JAR이 이미 APK에 포함되어 있다면 해당 클래스가 사용 가능할 것으로 기대됩니다. 그러나이 질문을 통해 추가 힌트를 얻을 수 있습니까? http://stackoverflow.com/questions/194698/how-to-load-a-jar-file-at-runtime –

+0

이클립스를 사용한다고 가정 할 때, 필자는 Properties -> Java Build Path -> Projects - > 필요한 프로젝트에 추가하십시오. 나는 그것이 어떻게 Properties -> Android -> Library 기능 (당신이 사용하고있는 것으로 추측하는지)과 관련이 있는지 모른다 ... –

관련 문제