stackoverflow posting과 비슷한 작업을하려고합니다. 내가하고 싶은 것은 SD 카드에서 활동이나 서비스의 정의를 읽는 것입니다. 명시적인 사용 권한 문제를 피하기 위해 .apk에서이 활동의 셸 버전을 만들지 만 런타임에 SD 카드에있는 동일한 이름의 활동으로 바꾸려고합니다. 불행히도 DexClassLoader를 사용하여 SD 카드에서 액티비티 클래스 정의를로드 할 수 있지만 원래 클래스 정의는 실행 된 클래스 정의입니다. 새 클래스 정의가 이전 클래스를 대체하도록 지정하거나 패키지에 필요한 활동을 실제로 제공하지 않고 매니페스트 사용 권한 문제를 피하는 방법을 제안 할 수 있습니까? 코드 샘플 : /sdcard/mypath/My.apk
에 지정된 com.android.my.path.to.a.loaded.activity
을 발사Android, DexClassLoader를 사용하여 활동 또는 서비스를 동적으로 바꾸는 방법
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
Intead, 그것은 정적으로 프로젝트에로드 활동을 시작합니다.
안드로이드가 자산을 처리하는 방식 때문에이 작업을 수행 할 수 없다는 느낌이 들었습니다. 다른 애플리케이션의 클래스에서 startActivity를 호출 한 경우 애플리케이션의 스레드에서로드하지 않으면 안되므로 Android의 Intents에 대한 위험한 대안 일 수 있습니다. – Tom