Android应用程序插件架构

时间:2012-05-09 01:48:00

标签: android plugins android-ndk

我正在尝试在Android中实现插件架构,更具体地说,是跨apk类加载

假设我有以下内容: apk A和apk B,sharedUserId中定义的AndroidManifest.xml相同 接口I 在apk A中定义,而apk B包含类IB ,它实现了 I

我尝试了以下方法

    在apk A中使用
  1. ,使用createPackageContext获取B的上下文,然后调用Context.getClassLoader并加载所需的类名。但是,由于这会创建两个类加载器,因此我无法将加载到B中的类IB 转换为接口I ;这意味着我需要使用反射......

  2. 将apk B传递给DexClassLoader(由ApplicationInfo.sourceDir获取的apk B的路径)并且失败并显示“由意外的DEX解析的”,可能是因为有我在apk B中的重复界面......

  3. 修改build xml并按照Custom Class Loading in Dalvik中的方法创建一个单独的jar,其中包含实现 I 的B中的类IB 并将jar放入apk B的assets目录。这种方法看起来很有希望,因为我可以加载类IB 并将其转换为 I 而不会出现问题。但是,它创建了复制jar的需要,我不确定在涉及NDK共享库时会发生什么。

  4. 我的问题是,是否有一种方法不涉及修改build.xml / ant.properties并且与NDK这样的库一起使用?

1 个答案:

答案 0 :(得分:1)

不确定其他方法,但对于方法2,您可以在将B打包到apk时排除接口I.只要排除生成的I.class文件就足够了。

您可能会发现Fred Chung的这篇文章很有帮助,可能会给您一些提示。 http://android-developers.blogspot.kr/2011/07/custom-class-loading-in-dalvik.html