这个问题实际上有几个部分:
如何创建可动态加载的外部jar文件?你能加载一个.apk文件作为.jar文件吗?你可以加载classes.dex吗?你需要使用dx工具转换一个jar文件吗?
我看到这段代码动态加载一个类:
String jarfile = "test2.jar";
DexClassLoader classloader = new DexClassLoader(
jarfile, "/tmp", null, getClass().getClassLoader());
Class<?> myclass = classloader.loadClass("Test2Activity");
在这种情况下,jar文件位于何处?换句话说,当我安装我的主Android应用程序时,我需要test2.jar文件的路径。
感谢您的帮助。
答案 0 :(得分:0)
我认为这是不可能的,至少您可以启动的每个Activity的引用都需要存在于项目清单中。所以,即使这是可能的,我认为它仍然会失败。您是否尝试过考虑Setting up a Library Project作为替代方案?
答案 1 :(得分:0)
我其实正在寻找类似的答案 - 我已经设法找到一种方法来动态地将jar文件加载到android应用程序 - 就在这里通过这个链接溢出堆栈: - 你需要的一切都在这里 - 除了我添加了一些我花时间试图找出链接下面的东西 - 这可能对你有用
<强> http://stackoverflow.com/questions/11453614/how-can-i-load-a-jar-file-dynamically-in-an-android-application-4-0-3 强>
以下是需要注意的一些事项:
创建.jar时:您只需要动态加载的.class文件 - 您不需要在.jar文件中包含接口IPeripheral。
使用IDE构建.jar文件 - 我不会使用以下命令编辑通过在命令行中调用jar选项而生成的默认清单文件 - 像这样:“jar cmf manifest-addition jar-文件输入文件“。而是打开eclipse,转到文件&gt;出口&gt; Java和GT; Jar文件并遵循它。
选择清单文件时 - 选择自定义,只需在项目中创建清单文件作为无文本文本文件,并将其保存为Whatever.manifest确保此文本文件最后一行为空该文件!
在上面链接的示例代码中:确保仔细检查此行的实际操作:
dalvik.system.PathClassLoader myClassLoader = new dalvik.system.PathClassLoader(urls.get(index).toString(), ModuleLoader.class.getClassLoader());
我说这是因为urls.get(index).toString()将返回file:/ pathname,你想要的只是路径名。我只是简单地解析了它以使其工作。
创建SDCard - 只需从Android设备管理器执行 - 有一个设置外部存储的选项 - 选择一个大小。在DDMS中,您将能够打开“文件资源管理器”,您将在mnt文件夹中找到SD卡,并能够将您的jar文件推送到SD卡文件夹中。
这是我的Main_activity类,它调用模块加载器。
public class MainActivity extends Activity
{
private static Context context;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Get this classes context
MainActivity.context = getApplicationContext();
// method to return a list of modules that all implement the interface IPeripheral
List<IPeripheral> modules = ModuleLoader.loadModules("/mnt/sdcard", getApplicationContext());
//Accessing a method - and display is just a method that toasts.
display(modules.get(0).getName());
}
}
希望这会有所帮助 - 我认为你不可能动态添加实际上是“屏幕”或Android活动的Java文件的jar文件,因为这需要你以编程方式编辑Projects Android Manifest文件您正试图动态加载jar。我不认为这会带来安全风险。