我正在尝试做与此stackoverflow 发布类似的事情。我想做的是从 SD 卡中读取活动或服务的定义。为避免清单权限问题,我在 .apk 中创建了此活动的 shell 版本,但尝试将其替换为运行时驻留在 SD 卡上的同名活动。不幸的是,我可以使用 DexClassLoader 从 SD 卡加载活动类定义,但执行的是原始类定义。有没有办法指定新的类定义替换旧的类定义,或者有什么建议可以避免清单权限问题而不实际在包中提供所需的活动?代码示例:
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) {
它不会启动 in 中com.android.my.path.to.a.loaded.activity
指定的/sdcard/mypath/My.apk
内容,而是启动静态加载到项目中的活动。