0

このチュートリアルに従って、OSGi を Android アプリケーションに組み込みます。ただし、バンドルをインストールして開始した後、その状態は本来あるべき ACTIVE (32) ではなく、RESOLVED (4) になりました。もう一度開始しようとすると、例外がスローされます。

Bundle#1 start failed
java.lang.ClassNotFoundException: org.knopflerfish.tutorial.simplebundle.impl.Activator
org.knopflerfish.framework.BundleImpl.start0(BundleImpl.java:421)
org.knopflerfish.framework.BundleThread.run(BundleThread.java:145)

このバンドルは、 Knopflerfish の例のソースからのサンプル バンドルです。Knopflerfish destop (framework.jar) にインストールするとうまく動作します

私はすでにdexのことを考えていましたが、jarファイルとそのdexファイルをマージするのは役に立たず、まだ機能しません。

ここで何が問題ですか?どうもありがとうございました!

4

1 に答える 1

0

数日後、この問題の解決策を見つけました。気になる方のために、ここに掲載しておきます。

まず、この問題は dex ファイルに関連しています。dex ファイルが見つからないため、BundleClassLoader が Activator クラスを見つけることができません。dx および aapt コマンドを実行した後の jar ファイルでは、*.dex が最上位パスに配置されている必要があります。これは、jar ファイルを抽出して確認することで確認できます。

bundler.jar
----META-INF
----org
----classes.dex

アプリがまだ機能しない場合は、考慮すべきもう 1 つのポイントがあります。Androidの新しいバージョンでは、dexファイルを外部ストレージに配置できないため(ここで説明されているようにhttp://developer.android.com/reference/dalvik/system/DexClassLoader.html)、orgを設定するコードを変更する必要があります.osgi.framework.storage プロパティ。

それ以外の:

Map<String, String> fwprops = new Hashtable<String, String>();
fwprops.put("org.osgi.framework.storage", Environment.getExternalStorageDirectory().getAbsolutePath() + "/fwdir");

私はこれを使用します:

Map<String, String> fwprops = new Hashtable<String, String>();
File dexOutputDir = getDir("dex", 0);
fwprops.put("org.osgi.framework.storage", dexOutputDir.getAbsolutePath());

この助けを願っています。

于 2013-09-10T09:30:22.440 に答える