2010-08-12 4 views
1

Мне нужно приложение Android, которое должно иметь возможность извлекать данные из Интернета (возможно, .apk или .jar) и запускать «что-то» из него.Приложение для Android, использующее внешний код/​​приложение?

Если это «тривиальный» класс, проблем нет. Это мой погрузчик

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

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

ответ

0

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

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

+0

, то как работает приложение devAppsDirect? https://play.google.com/store/apps/details?id=com.inappsquared.devappsdirect. Я имею в виду, я знаю, что он не устанавливает apks, но он работает очень хорошо, и кажется, что они существуют внутри внутреннего хранилища приложения. –

1

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

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

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

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

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

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

+0

Как я и подозревал ... Я дам вам знать! –

Смежные вопросы