AIR 3でのネイティブ拡張サポートを取り巻くすべての新しい誇大宣伝で、ネイティブAndroid実装内に外部JARを含めて使用できることを確認または拒否するものは1つも見つかりませんでした。
すべての例は、基本的に、組み込みのAndroidAPIにフックする機能を示しています。しかし、誰かがそれを簡単にする何百ものライブラリの1つを使用したい場合はどうでしょうか?確かにこれは可能だと思われます。私がやったことの概要を説明しようとすると、誰かが欠陥を見つけるかもしれません:
- サードパーティのAndroidライブラリXYZからのコンパイル済みインポートを使用して、ネイティブAndroidライブラリを正常に作成しました。
- AndroidプロジェクトをJARファイルとしてエクスポートしました。 注:参照されるサードパーティのJARは、jar内の/libにあります。
- ネイティブAndroidライブラリとインターフェイスするActionScriptライブラリ(SWC)が正常に作成されました。
- 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などを使用した実行時型の実行に適していると思います。そのため、この記事では少し混乱しました。 - FlexMobileプロジェクトの例でANEを使用しました。
- テストDroidXデバイスにAPKファイルをビルドしてインストールしました。
- LogCatでAIRアプリケーションのロード(およびトレースステートメント)を正常に確認できます
"ActivityManager: Displayed com.me.androidapp/.AppEntry"
- 拡張機能とコンテキストをインスタンス化するために、AIRアプリによってランタイムを介して呼び出されるネイティブAndroidJavaコードを正常に確認できます。
"mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
- 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シンクタンクを試してみようと思いました。ありがとうございました。