11

AIR 3でのネイティブ拡張サポートを取り巻くすべての新しい誇大宣伝で、ネイティブAndroid実装内に外部JARを含めて使用できることを確認または拒否するものは1つも見つかりませんでした。

すべての例は、基本的に、組み込みのAndroidAPIにフックする機能を示しています。しかし、誰かがそれを簡単にする何百ものライブラリの1つを使用したい場合はどうでしょうか?確かにこれは可能だと思われます。私がやったことの概要を説明しようとすると、誰かが欠陥を見つけるかもしれません:

  1. サードパーティのAndroidライブラリXYZからのコンパイル済みインポートを使用して、ネイティブAndroidライブラリを正常に作成しました。
  2. AndroidプロジェクトをJARファイルとしてエクスポートしました。 注:参照されるサードパーティのJARは、jar内の/libにあります。
  3. ネイティブAndroidライブラリとインターフェイスするActionScriptライブラリ(SWC)が正常に作成されました。
  4. SWC、extension.xml、Android JAR、およびlibrary.swcからANEパッケージを作成しました(プラットフォームAndroid-ARMの場合、SWCから抽出)。
    注:サードパーティのライブラリをここに概説されているファイル構造に配置してみました:http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-24823354 12ffea65006-8000.html#WSf268776665d7970d-6be13ace1308aaebeca-7fff。これは、JNIなどを使用した実行時型の実行に適していると思います。そのため、この記事では少し混乱しました。
  5. FlexMobileプロジェクトの例でANEを使用しました。
  6. テストDroidXデバイスにAPKファイルをビルドしてインストールしました。
  7. LogCatでAIRアプリケーションのロード(およびトレースステートメント)を正常に確認できます"ActivityManager: Displayed com.me.androidapp/.AppEntry"
  8. 拡張機能とコンテキストをインスタンス化するために、AIRアプリによってランタイムを介して呼び出されるネイティブAndroidJavaコードを正常に確認できます。"mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
  9. AIRアプリがネイティブ関数を呼び出そうとするとすぐに爆発し、サードパーティのAndroidライブラリからクラスを見つけることができません。E dalvikvm: Could not find class 'com.thirdparty.SomeClass', referenced from method com.me.nativeExtentions.MyExtensionFunction.call

何か案は?このように機能するはずです。

私が気づいたことの1つは、私の純粋なJava Androidアプリ(サードパーティのAndroidライブラリもあります)からAPKとDexを分解すると、サードパーティのクラスがその中に含まれているように見えることです( jarリファレンス)。Flex APKで同じことをすると、自分のJavaクラスとAdobeのクラスだけが見つかり、サードパーティのクラスはどこにも見つかりません。

これをアドビのフォーラムに投稿しましたが、SOシンクタンクを試してみようと思いました。ありがとうございました。

4

2 に答える 2

5

すべての瓶を 1 つに結合する必要があります。http://code.google.com/p/jarjar/または独自の Ant スクリプトのようなものが役立ちます。

例を追加するために編集: メインの拡張 jar ファイルが extension.jar で、external.jar のコードを使用しているとします。次に、Java jar ツールを使用して、external.jar から extension.jar にクラスを配置できます。

jar -xf 外部.jar

これにより、.class ファイルがパッケージ フォルダーに抽出されます。最上位パッケージが「com」の場合、次を使用してそれらを extension.jar に追加できます。

jar -uf extension.jar com

(外部 jar の最上位パッケージごとに 2 番目のコマンドを繰り返します。)

于 2011-11-01T20:37:49.510 に答える
3

また、ライブラリ jar を手動で zip ファイルに変換して結合し (名前を .zip に変更するだけ)、サード パーティ ライブラリのクラスをメイン ライブラリにコピーし、その名前を .jar に戻すこともできます。

于 2012-08-08T17:38:46.837 に答える