我正在创建一个框架,供我工作环境中的许多部门使用。 我需要一种方法,可以从各个部门的apk中动态加载类到框架中。 例如,一种将A部门的内容提供程序类动态加载到框架中的方法。
我一直在努力尝试解决这个问题,任何帮助都将不胜感激。谢谢。
我一直在努力尝试解决这个问题,任何帮助都将不胜感激。谢谢。
如果您想从设备上当前安装的另一个.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中访问联系人一样,只需从您的活动中使用内容提供程序即可。