我正在尝试开发一个新的 android 应用程序,但我有点陷入了死胡同。
我的应用严重依赖于流行的 python 库 ( youtube-dl )。
我做了一些研究,发现了Jep,它使用 JNI 将 python 嵌入到 java 中。使用该库,我可以从 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 构建做了同样的事情(jep.dll 而不是 .so)并得到了同样的错误。
它可能会失败,因为它是在 jdk 7 上的 ubuntu 16.04/Windows 10 上构建的。我的问题是我应该使用哪个编译器来为 arm/x86 设备构建这个 Jep?它是一个带有 JNI 的本地 C 调用的 Java 项目,在项目中他们表示可以在 android 上运行它。
感谢您的帮助,我没有为某些架构编译项目的经验,所以我来这里询问。