Pergunta

Preciso de um aplicativo Android que possa buscar dados da Web (talvez um .apk ou um .jar) e lançar "algo" a partir dele.

Se é uma classe "trivial", não há problema. Este é meu Carregador

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);


    }
}

O problema é que o código que desejo executar se parece muito com um aplicativo, que deve ter uma visão "simples" e alguma interação nele.

Não sou capaz de invocar o método "onCreate" da minha classe baixada.

Acho que tenho três ruas:

  1. Procuro um método que instale silenciosamente o aplicativo e o execute (é possível?);
  2. Com sua ajuda, entendo como inicializar um segundo "aplicativo" dentro do meu próprio (com seu próprio R e todas as coisas);
  3. Escrevo meu programa mestre para buscar dados da web e construir páginas dinamicamente.

Então, eu definitivamente preciso da sua ajuda!

Foi útil?

Solução

Tenho certeza de que você não pode instalar silenciosamente um novo aplicativo. Além disso, não consegui encontrar nenhuma maneira de registrar uma nova atividade em um aplicativo existente em tempo de execução. Suponho que você possa escrever uma atividade de wrapper que passa todas as chamadas para outra que você carrega dinamicamente, mas que ainda deixaria sem resolver o problema de poder carregar os dados do recurso.

No final, você provavelmente precisará escrever seu código para evitar completamente o uso do sistema de recursos do Android (possível, mas difícil) ou apenas ir com um WebView e HTML com JavaScript (mais difícil de armazenar em cache e menos de aparência nativa, mas muito mais simples para implementar) para os bits dinâmicos.

Outras dicas

Procuro um método que instale silenciosamente o aplicativo e o execute (é possível?);

Não, não é possível. Isso seria um problema de segurança.

Com sua ajuda, entendo como inicializar um segundo "aplicativo" dentro do meu próprio (com seu próprio R e todas as coisas);

Eu suspeito que isso estará no alcance difícil de impossível.

Escrevo meu programa mestre para buscar dados da web e construir páginas dinamicamente.

Certamente há coisas que se encaixam nessa descrição que devem funcionar. Pessoalmente, eu recomendo que você use apenas o HTML5, talvez hospedado por um WebView, já que o HTML é uma solução comprovada para gerar dinamicamente as UIs (como ilustra esta página da web).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top