Приложение Android работает внешний код / ​​приложение?

StackOverflow https://stackoverflow.com/questions/3470862

  •  28-09-2019
  •  | 
  •  

Вопрос

Мне нужна приложение для Android, которое должно иметь возможность получать данные из сети (возможно .apk или a .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. Я пишу свою главную программу, чтобы принести данные с веб-сайтов и динамически строить страницы.

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Я подозреваю, что будет в труднодобывающемся диапазоне.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top