我在sdCard上有1个.jar文件(我用dx工具编译一个通常的.jar到dex ..否则
android会在运行时抱怨)
我想要使用的课程实际上是一个Activity&通过“使用”我的意思是充气!
A)我注意到,如果我像这样加载类,加载类将具有parrent类的包(其中我运行代码的那个包):示例:jar库中的类的实际包:“com .something“& my-app-package:”com.wonderfull“ – >加载类在”com.wonderfull.com.something“:)) – >重新测试:它保留原始的包,就像在库中一样
B)在“最好”的情况下,我得到这个错误:
Unable to instantiate activity
ComponentInfo{com.appno2/com.appno1.futureLib.LibActivity}:
java.lang.ClassNotFoundException: com.appno1.futureLib.LibActivity in
loader dalvik.system.PathClassLoader[/data/app/com.appno2-1.apk]
C)在清单中,我已经放置了Activity(一个被dinamically加载),如下所示:
活动
机器人:名字= “com.appno1.futureLib.LibActivity”
android:label =“@ string / app_name”>
/活性GT;
所以我重复题目的问题:是否可能dinamically加载一个活动类从jar库sdCard&其实用吗
万一“为什么要这样?” – 只是古玩!
作为一个概念:在用户输入有效许可证之后,下载实际的应用程序代码(以一种某种事物的形式)的可能性
更新:
– 这个ideea与片段一起工作(意思是要导入的类是片段)
当前结论:
– 可以在外部.jar(例如sdCard或从internet..etc下载)中具有:lame java类或甚至android UI相关类.在需要时加载它们.哦,是的,你不能这样做这个活动:( ..甚至不能服务..
Regardin URLClassLoader:这个工作(不涉及DalvikClassLoader – ClassNotFoundException&& obviosly:仍然不能充满这样加载的活动)
File file = new File("/sdcard/myLib.jar");
File tmpDir = getDir("dex", 0);
ClassLoader loader = new URLClassLoader(new URL[]{file.toURI().toURL()}, this.getClass().getClassLoader());
DexClassLoader classloader = new DexClassLoader(file.getAbsolutePath(), tmpDir.getAbsolutePath(), null, loader);
Class classref = (Class) classloader.loadClass("packageInLib.ClassName");
Object myInstance = classref.getConstructor().newInstance();
Or instead of "loadClass"
Class> classref = Class.forName("packageInLib.ClassName", true, dalvikClassLoader);