Androidアプリケーション外部コード/アプリケーションを実行していますか?
-
28-09-2019 - |
質問
Webからデータを取得し(.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」方法を呼び出すことはできません。
私は3つの通りを推測します:
- 私は、アプリケーションを静かにインストールしてから実行する方法を探します(可能ですか?)。
- あなたの助けを借りて、私は自分のものの中に2番目の「アプリケーション」を初期化する方法を理解しています(自分のRとすべてのものがあります)。
- マスタープログラムを作成して、Webからデータを取得し、ページを動的に構築します。
だから、私は間違いなくあなたの助けが必要です!
解決
新しいアプリを静かにインストールできないと確信しています。また、実行時に既存のアプリケーションに新しいアクティビティを登録する方法を見つけることができませんでした。動的にロードするすべての呼び出しを別の呼び出しに渡すラッペラアクティビティを書くことができると思いますが、それでもリソースデータをロードできるという問題が解決されていません。
最終的に、Androidリソースシステムの使用を完全に避けるためにコードを作成する必要があります(可能ですが難しい)か、JavaScriptを使用してWebViewとHTML(キャッシュが難しく、ネイティブが少ないが、はるかにシンプルですが、動的ビット用に実装する。
他のヒント
私は、アプリケーションを静かにインストールしてから実行する方法を探します(可能ですか?)。
いいえ、不可能です。それはセキュリティの問題です。
あなたの助けを借りて、私は自分のものの中に2番目の「アプリケーション」を初期化する方法を理解しています(自分のRとすべてのものがあります)。
それは不可能な範囲にあると思います。
マスタープログラムを作成して、Webからデータを取得し、ページをディナミーに作成します。
確かに機能するはずのこの説明に合ったものがあります。個人的には、HTMLはUISを動的に生成するための実証済みのソリューションであるため、WebViewでホストされるHTML5を使用することをお勧めします(このWebページが示すように)。