1

AIR プロジェクトで JavaCV を使用しようとしています。私はネイティブ拡張機能を構築し、それはうまくコンパイルされますが、実行時に次のエラーが発生します:

W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
I/dalvikvm(16234): Could not find method java.awt.image.BufferedImage.getSampleModel, referenced from method org.bytedeco.javacpp.helper.opencv_core$AbstractIplImage.createFrom
W/dalvikvm(16234): VFY: unable to resolve virtual method 8824: Ljava/awt/image/BufferedImage;.getSampleModel ()Ljava/awt/image/SampleModel;
D/dalvikvm(16234): VFY: replacing opcode 0x6e at 0x0004
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
W/dalvikvm(16234): VFY: unable to find class referenced in signature (Ljava/awt/image/BufferedImage;)
D/dalvikvm(16234): GC_CONCURRENT freed 612K, 7% free 9380K/10028K, paused 3ms+4ms, total 35ms

ライブラリ リソースを適切にリンクしていないようで、トピックに関するドキュメントは非常に限られているようです。

.jar および armeabi/ _ .so ライブラリを ANE にリンクする際のアイデアや落とし穴はありますか?

最新の javacv ソースにアップグレードした後に更新されたエラー ログ:

W/dalvikvm(14799): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/bytedeco/javacpp/avutil;
W/dalvikvm(14799): Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lorg/bytedeco/javacpp/avformat;
W/dalvikvm(14799): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/bytedeco/javacpp/opencv_core;
4

1 に答える 1

1

.so 依存関係のリンク:

フォルダ構造が正しいことを確認する必要があります。Android ネイティブ ライブラリ セクションの「このリンク」を参照してください。.so ネイティブ依存関係を「libs/target_platform/」フォルダー内に配置するだけで、ADT によってそれらが最終的な APK 内の正しい場所に配置されるようになります。

例: YOUR_ANE_ROOT_FOLDER/android/libs/armeabi-v7a/libYourLibrary.so

複数のアーキテクチャをサポートしている場合は、 YOUR_ANE_ROOT_FOLDER/android/libs/ armeabi /libYourLibrary.soもある可能性があります

等々..

また、共有オブジェクトの名前に「lib」プレフィックスが付いていることを確認してください。例: libYourLibrary.so

JAR 依存関係のリンク:

「packagedDependencies」タグの下の platform.xml で JAR 依存関係を指定しても機能しない場合は、すべての外部 JAR を抽出して、最終的な jar 内に含めることができます。

例:

        <javac source="1.6" srcdir="../android/src" destdir="../android/temp/classes" includeantruntime="false">
        <classpath>
          <pathelement location="${android.sdk}/android.jar"/>
          <pathelement location="../android/libs/FlashRuntimeExtensions.jar"/>
          <pathelement location="../android/libs/android-support-v4.jar"/>
          <pathelement location="../android/libs/opencv.jar"/>
          ....
          ....
        </classpath>
      </javac>

      <mkdir dir="../android/temp/zip"/>
      <unzip src="../android/libs/opencv.jar" dest="../android/temp/zip"/>
      <unzip src="../android/libs/android-support-v4.jar" dest="../android/temp/zip"/>
      ...
      ...

      <copydir src="../android/temp/zip/com" dest="../android/temp/classes/com"/>
      <copydir src="../android/temp/zip/android" dest="../android/temp/classes/android"/>

      <mkdir dir="../temp/android/"/>
      <copy todir="../temp/android/res/">
        <fileset dir="../android/res"/>
      </copy>
      <jar destfile="../temp/android/lib${name}.jar">
        <fileset dir="../android/temp/classes"/>
      </jar>
      <delete dir="../android/temp"/>

これらのクラスがまだ最終的な APK に到達しない場合は、こちらを参照してください

于 2014-08-12T13:43:09.323 に答える