1

我需要一个 Android 应用程序,它应该能够从网络(可能是 .apk 或 .jar)获取数据并从中启动“某些东西”。

如果它是一个“微不足道”的课程,那根本没有问题。这是我的装载机

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”方法。

我想我有三个街道:

  1. 我寻找一种静默安装应用程序然后运行它的方法(可能吗?);
  2. 在您的帮助下,我了解如何在我自己的应用程序中初始化第二个“应用程序”(使用它自己的 R 和所有东西);
  3. 我编写我的主程序来从 Web 获取数据并动态构建页面。

所以,我绝对需要你的帮助!

4

2 回答 2

1

我寻找一种静默安装应用程序然后运行它的方法(可能吗?);

不,这是不可能的。那将是一个安全问题。

在您的帮助下,我了解如何在我自己的应用程序中初始化第二个“应用程序”(使用它自己的 R 和所有东西);

我怀疑这将在难以实现的范围内。

我编写我的主程序来从网络上获取数据并动态地构建页面。

肯定有符合这个描述的东西应该起作用。就个人而言,我建议您只使用 HTML5,可能由 WebView 托管,因为 HTML 是一种用于动态生成 UI 的久经考验的解决方案(正如这个网页所示)。

于 2010-08-12T18:52:03.360 回答
0

我很确定您不能静默安装新应用程序。此外,我一直无法找到在运行时将新 Activity 注册到现有应用程序中的任何方法。我想您可以编写一个 WrapperActivity 将所有调用传递给您动态加载的另一个调用,但这仍然无法解决能够加载资源数据的问题。

最后,您可能需要编写代码以完全避免使用 Android 资源系统(可能但很困难),或者只使用带有 JavaScript 的 WebView 和 HTML(更难缓存且不那么原生,但更简单实现)用于动态位。

于 2010-08-12T18:58:43.610 回答