Android-приложение с внешним кодом / приложением? - PullRequest
1 голос
/ 12 августа 2010

Мне нужно приложение 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. Я пишу основную программу для извлечения данных из Интернета и динамического создания страниц.

Итак, мне определенно нужна ваша помощь!

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Я ищу метод, который автоматически устанавливает приложение и затем запускает его (возможно ли это?);

Нет, это невозможно. Это было бы проблемой безопасности.

С вашей помощью я понимаю как инициализировать второе «приложение» внутри моего собственного (со своим собственным R и все вещи);

Я подозреваю, что будет в диапазоне от трудного до невозможного.

Я пишу основную программу для извлечения данных из Интернета и динамического конструирования страниц.

Есть, безусловно, вещи, которые соответствуют этому описанию, которые должны работать. Лично я бы порекомендовал вам просто использовать HTML5, возможно, размещенный в WebView, поскольку HTML - это проверенное решение для динамического создания пользовательских интерфейсов (как показывает эта веб-страница).

0 голосов
/ 12 августа 2010

Я почти уверен, что вы не можете установить новое приложение без вывода сообщений.Кроме того, мне не удалось найти какой-либо способ регистрации новой активности в существующем приложении во время выполнения.Я полагаю, что вы могли бы написать WrapperActivity, которое передает все вызовы другому, который вы загружаете динамически, но это все равно оставило бы нерешенной проблему возможности загрузки данных ресурса.

В конце вам, вероятно, потребуетсялибо напишите свой код, чтобы полностью избежать использования системы ресурсов Android (возможно, но сложно), либо просто используйте WebView и HTML с JavaScript (сложнее для кеширования и менее наглядным, но гораздо проще в реализации) для динамических битов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...