【发布时间】:2011-01-31 23:06:24
【问题描述】:
我正在尝试做类似stackoverflow posting 的事情。我想做的是从 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) {
在启动/sdcard/mypath/My.apk 中指定的com.android.my.path.to.a.loaded.activity 后,它会启动静态加载到项目中的活动。
【问题讨论】:
-
我有一种感觉,这不能仅仅因为 Android 处理资产的方式。如果您在另一个应用程序中的一个类上调用 startActivity,它必须加载到该应用程序的线程而不是您自己的线程中,因此只是一个危险的 Android Intent 替代方案。
标签: android auto-update