我需要一个能够从网络上获取数据的Android应用程序(可能是.apk或.jar)并从中启动“某些东西”。
如果这是一个“琐碎”的课程,那就完全没问题了。这是我的 Loader
package com.m31.android.urlload;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ClassLoader;
import java.net.URL;
import dalvik.system.PathClassLoader;
import dalvik.system.DexClassLoader;
public class Loader extends ClassLoader {
public Loader() throws IOException {
super(Loader.class.getClassLoader());
}
public Class loadClass(String className) throws ClassNotFoundException {
return findClass(className);
}
private String fetch_package(String url) throws IOException {
BufferedInputStream in = new BufferedInputStream(new URL(url).openStream());
FileOutputStream fos = new FileOutputStream("/mnt/sdcard/_plugins/plugin1.jar");
BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) > 0) {
bout.write(data,0,count);
}
bout.close();
in.close();
return "/mnt/sdcard/_plugins/plugin1.jar";
}
public Class findMyClass(String className, String url) throws IOException, ClassNotFoundException {
String path = fetch_package(url);
DexClassLoader pcl = new DexClassLoader(path, "/mnt/sdcard/_dex/", null, this);
return pcl.loadClass(className);
}
}
问题是我想要执行的代码看起来非常像一个应用程序,它应该有一个“简单”的视图和一些交互。
我无法调用下载课程的“onCreate”方法。
我想我有三条街道:
所以,我绝对需要你的帮助!
答案 0 :(得分:1)
我找一个静默安装应用程序然后运行它的方法(可能吗?);
不,这是不可能的。那将是一个安全问题。
在你的帮助下,我明白了 初始化第二个“应用程序” 在我自己的里面(有自己的R和 所有东西);
我怀疑这将是难以置信的范围。
我编写了我的主程序,用于从网络上获取数据并以dinamically方式构建页面。
有些东西适合这种描述应该有效。就个人而言,我建议你只使用HTML5,也许是由WebView托管,因为HTML是一个动态生成UI的经过验证的解决方案(正如这个网页所示)。
答案 1 :(得分:0)
我很确定你无法安静地安装新应用。此外,我一直无法找到任何方法在运行时将新Activity注册到现有应用程序中。我想您可以编写一个WrapperActivity,将所有调用传递给您动态加载的另一个调用,但这仍然无法解决加载资源数据的问题。
最后,您可能需要编写代码以完全避免使用Android资源系统(可能但很困难),或者只需使用带有JavaScript的WebView和HTML(更难缓存且更少本机,对于动态位,实现起来要简单得多。