【问题标题】:Dynamically load classes from other APK's从其他 APK 动态加载类
【发布时间】:2011-10-13 16:35:46
【问题描述】:

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

我没有运气试图解决这个问题,任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: android dynamic frameworks load apk


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果允许这样做,我预计这将是一个安全漏洞,并且您的设计存在风险,因为您将自己的程序与其他人的程序紧密耦合。

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

      【讨论】:

      • 它将紧密耦合。本质上,我有一个发送和接收数据的服务。应用程序可以向服务注册,因此当接收到数据时,它知道将内容存储在哪里(因此我需要能够为该特定数据库加载内容提供程序类)。我猜框架不是一个好词。它更像是一个开发工具包,提供了一个 jar 文件来访问服务。但我被这个问题困住了......
      • 所以将所有内容提供者放在一个地方,但 Android 的优势在于只需调用一个可以处理您需要的内容并保存/更新数据的内容提供者。 Android 基于松散耦合,因此您可能希望保持这种设计。
      • 我同意。此应用程序将处理非常敏感的信息。现在我有一个远程前台服务运行它并接收和发送网络数据。 APK 可以绑定到服务并注册广播接收器和内容观察器。这个想法是,当新数据进入手机时,可以将其放入数据库并触发将发送广播的内容观察者光标。这样,部门 apk 的开发人员就可以按照自己的意愿处理呼叫。它还保证死 apk 将收到他们有新数据的信号。我只需要一种存储内容的方法
      • 在正确的数据库中。我看到通过使用 apk 的内容提供程序来做到这一点。这为部门开发人员提供了灵活性。 (相信我一个地方听起来不错——但这可能会被数百个不同的部门使用——我需要动态和抽象,但要处理数据流)
      • 詹姆斯...我是个白痴。内容提供者可供所有人使用。我只需要接收到的数据的正确 URI.... 我已经有了。哇我......谢谢你的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多