摘录


最近发现Android有一个发展方向,插件化,像360等等,他把功能索引放在主界面,当使用哪个功能就调用哪个jar,dex,或者apk,这种技术叫做动态加载,那么我们来看看这个dex实现了什么功能 
插件化的原理实际是 Java ClassLoader 的原理, 
Android 也有自己的 ClassLoader,分为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件。 
那么我们来看代码,怎么动态加载一个dex

使用到的工具都比较常规:javac、dx、eclipse等其中dx工具最好是指明–no-strict,因为class文件的路径可能不匹配 加载好类后,通常我们可以通过Java反射机制来使用这个类但是这样效率相对不高,而且老用反射代码也比较复杂凌乱。更好的做法是定义一个interface,并将这个interface写进容器端。待加载的类,继承自这个interface,并且有一个参数为空的构造函数,以使我们能够通过Class的newInstance方法产生对象然后将对象强制转换为interface对象,于是就可以直接调用成员方法了,下面是具体的实现步骤了:

点评

NULL

原文

点击这里查看原文

其它

本帖内容由21QA云收藏工具自动生成,欢迎使用。

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055

asked 01 Jun, 10:28

%E8%B7%AF%E4%BA%BA%E7%94%B2's gravatar image

路人甲
131598710886

Be the first one to answer this question!
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link: [text](http://url.com/ "title")
  • image: ![alt](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×885
×94
×2

question asked: 01 Jun, 10:28

question was seen: 139 times

last updated: 01 Jun, 10:28

powered by O*S*Q*A

粤ICP备14040061号-1