【发布时间】:2011-10-13 16:35:46
【问题描述】:
我正在创建一个框架,供我工作环境中的许多部门使用。我需要一种将类从各个部门的 apk 动态加载到框架中的方法。例如,一种将部门 A 的内容提供程序类动态加载到框架中的方法。
我没有运气试图解决这个问题,任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: android dynamic frameworks load apk
我正在创建一个框架,供我工作环境中的许多部门使用。我需要一种将类从各个部门的 apk 动态加载到框架中的方法。例如,一种将部门 A 的内容提供程序类动态加载到框架中的方法。
我没有运气试图解决这个问题,任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: android dynamic frameworks load apk
如果您想从当前安装在您设备上的另一个 .apk 加载已知类,您可以采用以下方法(假设您的类具有默认构造函数)。另外请记住,您必须知道其他 .apk 文件的包名,并且其他 .apk 文件的包名必须与您的应用程序包名不同。
private Object loadClass(String packageName, String className){
Object plugin = null;
try {
PackageManager packageManager = getPackageManager();
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);
DexFile df = new DexFile(appInfo.sourceDir);
ClassLoader cl = getClassLoader();
Class classToInvestigate = df.loadClass(className, cl);
plugin = classToInvestigate.newInstance();
} catch (Exception e) {
System.out.println("EXCEPTION");
}
finally{
return plugin;
}
}
【讨论】:
如果允许这样做,我预计这将是一个安全漏洞,并且您的设计存在风险,因为您将自己的程序与其他人的程序紧密耦合。
更好的解决方案是能够只使用您的活动中的内容提供者,就像您可以访问 Android 中的联系人一样。
【讨论】: