Android应用运行外部代码/应用程序?

时间:2010-08-12 18:36:19

标签: android apk urlclassloader

我需要一个能够从网络上获取数据的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”方法。

我想我有三条街道:

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

在你的帮助下,我明白了   初始化第二个“应用程序”   在我自己的里面(有自己的R和   所有东西);

我怀疑这将是难以置信的范围。

  

我编写了我的主程序,用于从网络上获取数据并以dinamically方式构建页面。

有些东西适合这种描述应该有效。就个人而言,我建议你只使用HTML5,也许是由WebView托管,因为HTML是一个动态生成UI的经过验证的解决方案(正如这个网页所示)。

答案 1 :(得分:0)

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

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