从其他APK动态加载类

时间:2011-10-13 16:35:47

标签: android dynamic frameworks load apk

我正在创建一个框架,供我的工作环境中的许多部门使用。我需要一种方法从单个部门apk中动态地将类加载到框架中。例如,一种将部门A的内容提供者类动态加载到框架中的方法。

我没有运气试图解决这个问题,任何帮助都会非常感激。感谢。

2 个答案:

答案 0 :(得分:8)

如果要从设备上当前安装的另一个.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;
    }
}

答案 1 :(得分:2)

如果允许这样做,我认为这将是一个安全漏洞,而且您的设计风险很大,因为您将程序与其他人的程序紧密结合。

更好的解决方案是能够只使用您活动中的内容提供商,就像您可以访问Android中的联系人一样。