Domanda

Ho bisogno di un'applicazione Android che dovrebbe essere in grado di recuperare i dati dal web (forse un .apk o .jar) e il lancio "qualcosa" da esso.

Se si tratta di una classe "banale" non c'è nessun problema a tutti. Questo è il mio 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);


    }
}

Il problema è che il codice voglio eseguire assomiglia molto ad un programma, che dovrebbe avere una vista "semplice" e qualche interazione su di esso.

Non sono in grado di richiamare il metodo "onCreate" della mia classe scaricato.

Credo di aver tre strade:

  1. cerco un metodo che installa silenziosamente l'applicazione e quindi lo esegue (è possibile?);
  2. Con il vostro aiuto, ho capito come inizializzare un secondo "applicazione" dentro il mio uno (con un proprio R e tutta roba);
  3. I scrivere il mio programma di master per recuperare i dati dalle pagine web e costruire in modo dinamico.

Quindi, ho sicuramente bisogno del vostro aiuto!

È stato utile?

Soluzione

Sono abbastanza sicuro che non è possibile in silenzio installare una nuova app. Inoltre, sono stato in grado di trovare un modo per registrare una nuova attività in un'applicazione esistente in fase di esecuzione. Immagino che si potrebbe scrivere un WrapperActivity che passa tutte le chiamate a un altro che si carica in modo dinamico, ma che lascerebbe ancora irrisolto il problema di essere in grado di caricare i dati delle risorse.

Alla fine, si avrà probabilmente bisogno di uno scrivere il codice per evitare completamente l'utilizzo del sistema di risorse Android (possibile ma difficile), o semplicemente andare con un WebView e HTML con JavaScript (più difficile da cache e meno nativo di aspetto, ma molto più semplice da implementare) per i bit dinamici.

Altri suggerimenti

  

cerco un metodo che installa silenziosamente l'applicazione e quindi lo esegue (è possibile?);

No, non è possibile. Questo sarebbe un problema di sicurezza.

  

Con il vostro aiuto, ho capito come   inizializzare un secondo "applicazione"   all'interno del mio proprio uno (con un proprio R e   tutta roba);

Ho il sospetto che sarà nel range difficile da impossibile.

  

I scrivere il mio programma di master per recuperare i dati dalle pagine web e costruire dinamicamente.

Ci sono certamente cose che si adattano a questa descrizione che dovrebbe funzionare. Personalmente, vi consiglio di usare solo HTML5, forse ospitato da un WebView, dal momento che HTML è una soluzione provato e vero per la generazione di interfacce utente in modo dinamico (come la pagina Web molto illustra).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top