Я пытаюсь сделать что-то похожее на это stackoverflow posting. Что я хочу сделать, так это прочитать определение активности или услуги с SD-карты. Чтобы избежать явных проблем с разрешениями, я создаю оболочную версию этого действия в .apk, но пытаюсь заменить его активностью с тем же именем, который находится на SD-карте во время выполнения. К сожалению, я могу загрузить определение класса активности с SD-карты с помощью DexClassLoader, но исходное определение класса - это тот, который выполняется. Есть ли способ указать, что новое определение класса заменяет старый, или какие-либо предложения по устранению проблем с разрешениями манифеста без фактического предоставления необходимой активности в пакете? Пример кода: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 о запуске com.android.my.path.to.a.loaded.activity
указанных в /sdcard/mypath/My.apk
, он запускает деятельность статический загруженную в проект.
У меня такое чувство, что это невозможно сделать просто из-за того, как Android обрабатывает активы. Если вы вызвали startActivity для класса в другом приложении, ему пришлось бы загружать в поток этого приложения не свой собственный и, следовательно, быть просто опасной альтернативой намерениям Android. – Tom