私は新しい Android アプリを開発しようとしていますが、ちょっと行き詰まりました。私のアプリは、人気のある Python ライブラリ ( youtube-dl
)
に大きく依存しています。
私はいくつかの調査を行い、JNIを使用してPythonをJavaに埋め込むJepについて知りました。ライブラリを使用すると、Java コードから Python スクリプトを実行できます。これはまさに私が必要としているものです。
指定された .jar とプラットフォーム固有のライブラリ (.dll 、 .so ) を使用しようと (あまり期待せずに) 試み、それらをライブラリとして Android アプリに追加して呼び出しようとしましたが、この次のエラーでアプリがクラッシュします:
08-17 08:41:26.323 7784-7784/com.example.david.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.david.app, PID: 7784
java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-support-annotations-23.4.0_6d851d9a3cbbe5d1dac573180ea50da442a0ff00-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-jep-3.5.3_f02f85ba11a6b623a504a722d6d675f3916fbad2-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-internal_impl-23.4.0_17f1606a4177dabe6c6459fef4a647cc09a8d4a2-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-instant-run_25d13f3103c85cc8587c7242c22774f6eb360c23-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-instant-run-bootstrap_18b4f46f105b17869f88f950a22298ce35e60199-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.4.0_b9a1f0b67bddb638f672d79083f55605807f0183-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_23798b62923b0a9c9033d72c0147e777ccfe1c4a-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.4.0_cd9016a3c981ed8ed409576c975226d0ed4d587d-classes.dex", dex file "/data/data/com.example.david.app/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-23.4.0_f4f79f21b3754baabcc99a1c7ebcf721372ecb14-classes.dex"],nativeLibraryDirectories=[/data/app/com.example.david.app-1/lib/x86, /vendor/lib, /system/lib]]] couldn't find "libjep.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at jep.Jep$TopInterpreter$1.run(Jep.java:118)
at java.lang.Thread.run(Thread.java:818)
私のライブラリには以下が含まれています:
- jep-3.5.3.jar
- jep.so
- libjep.so
そして私のbuild.gradleでは、すべての.jar/.soファイルを含めるように設定しました:
compile fileTree(dir: 'libs', include: ['.jar','.so'])
Windowsビルド(.soではなくjep.dll)で同じことを行ったところ、同じエラーが発生したことに注意してください。
jdk 7のubuntu 16.04 / Windows 10でビルドされたため、おそらく失敗しています。私の質問は、このJepをarm / x86デバイス用にビルドするには、どのコンパイラを使用すればよいですか? JNIを使用したネイティブC呼び出しを備えたJavaプロジェクトであり、プロジェクトでは、Androidで実行できると述べています。
助けてくれてありがとう、私は特定のアーキテクチャのプロジェクトをコンパイルした経験がないので、ここに尋ねに来ました。