ImportSDKDemo Tutorial Проблема: не найдена реализация для byte [] dji.midware.natives.SDKRelativeJNI.native_getXXXX (java.lang.String)

У меня проблема с эмуляцией проекта ImportSDKDemo.

Я слежу за этим руководство, но отсутствует информация, например по поводу MainActivity.class.

Когда я пытаюсь запустить эмуляцию, я получаю следующую ошибку:

java.lang.UnsatisfiedLinkError: No implementation found for byte[] dji.midware.natives.SDKRelativeJNI.native_getXXXX(java.lang.String) (tried Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX and Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX__Ljava_lang_String_2)

Вот весь журнал:

09-14 05:04:29.389 3080-3080/? I/m.importsdkdem: Not late-enabling -Xcheck:jni (already on)
09-14 05:04:29.499 3080-3080/? W/m.importsdkdem: Unexpected CPU variant for X86 using defaults: x86
09-14 05:04:30.082 3080-3080/dji.com.importsdkdemo E/sdk: install begin
09-14 05:04:30.086 3080-3080/dji.com.importsdkdemo V/sdk: DexInstall beging
    installSecondarDexs
09-14 05:04:30.086 3080-3080/dji.com.importsdkdemo W/m.importsdkdem: Accessing hidden field Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; (light greylist, reflection)
    Accessing hidden method Ldalvik/system/DexPathList;->makeInMemoryDexElements([Ljava/nio/ByteBuffer;Ljava/util/List;)[Ldalvik/system/DexPathList$Element; (light greylist, JNI)
09-14 05:04:30.320 3080-3080/dji.com.importsdkdemo W/m.importsdkdem: Accessing hidden field Ldalvik/system/DexPathList;->dexElements:[Ldalvik/system/DexPathList$Element; (light greylist, reflection)
09-14 05:04:30.320 3080-3080/dji.com.importsdkdemo V/sdk: DexInstall end
09-14 05:04:30.376 3080-3098/dji.com.importsdkdemo I/m.importsdkdem: Background concurrent copying GC freed 3588(1814KB) AllocSpace objects, 0(0B) LOS objects, 42% free, 8MB/14MB, paused 12.441ms total 165.671ms
09-14 05:04:30.549 3080-3080/dji.com.importsdkdemo W/m.importsdkdem: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
    Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
09-14 05:04:30.594 3080-3142/dji.com.importsdkdemo E/linker: "/data/app/dji.com.importsdkdemo-jCjys7hOmf0GKv6jezsaUw==/lib/x86/libffmpeg.so" has text relocations (https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#Text-Relocations-Enforced-for-API-level-23)
09-14 05:04:30.614 3080-3142/dji.com.importsdkdemo W/System.err: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/dji.com.importsdkdemo-jCjys7hOmf0GKv6jezsaUw==/lib/x86/libffmpeg.so" has text relocations (https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#Text-Relocations-Enforced-for-API-level-23)
        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
        at java.lang.System.loadLibrary(System.java:1669)
        at dji.midware.natives.SDKRelativeJNI.<clinit>(Unknown Source:2)
        at dji.midware.natives.SDKRelativeJNI.native_getXXXX(Native Method)
        at com.dji.g.a.a.b.a(Unknown Source:24)
        at com.dji.g.a.a.b.a(Unknown Source:5)
        at dji.sdk.sdkmanager.DJISDKManager.<clinit>(Unknown Source:2)
        at dji.sdk.sdkmanager.DJISDKManager.getInstance(Unknown Source:0)
        at dji.com.importsdkdemo.MainActivity$1.run(MainActivity.java:121)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
09-14 05:04:30.615 3080-3142/dji.com.importsdkdemo W/System.err:     at java.lang.Thread.run(Thread.java:764)
09-14 05:04:30.615 3080-3142/dji.com.importsdkdemo D/SDKRelativeJNI: Couldn't load lib
09-14 05:04:30.615 3080-3142/dji.com.importsdkdemo E/m.importsdkdem: No implementation found for byte[] dji.midware.natives.SDKRelativeJNI.native_getXXXX(java.lang.String) (tried Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX and Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX__Ljava_lang_String_2)
09-14 05:04:30.625 3080-3142/dji.com.importsdkdemo E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: dji.com.importsdkdemo, PID: 3080
    java.lang.UnsatisfiedLinkError: No implementation found for byte[] dji.midware.natives.SDKRelativeJNI.native_getXXXX(java.lang.String) (tried Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX and Java_dji_midware_natives_SDKRelativeJNI_native_1getXXXX__Ljava_lang_String_2)
        at dji.midware.natives.SDKRelativeJNI.native_getXXXX(Native Method)
        at com.dji.g.a.a.b.a(Unknown Source:24)
        at com.dji.g.a.a.b.a(Unknown Source:5)
        at dji.sdk.sdkmanager.DJISDKManager.<clinit>(Unknown Source:2)
        at dji.sdk.sdkmanager.DJISDKManager.getInstance(Unknown Source:0)
        at dji.com.importsdkdemo.MainActivity$1.run(MainActivity.java:121)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
09-14 05:04:30.655 3080-3080/dji.com.importsdkdemo D/OpenGLRenderer: Skia GL Pipeline
09-14 05:04:30.656 3080-3142/dji.com.importsdkdemo I/Process: Sending signal. PID: 3080 SIG: 9

Как я могу решить эту проблему?

Не стесняйтесь спрашивать код или скриншоты :)

Вы должны поделиться кодом, чтобы ответить на этот вопрос.

Nico Haase 14.09.2018 14:59

Что ж, я только что выполнил руководство DJI (Интеграция SDK в приложение), и в конце, когда я запустил эмуляцию, я получил этот код ошибки в logcat (см. Ссылку pastebin). Я не могу вставить все строки, потому что мой вопрос будет слишком длинным: s

ADinhLux 14.09.2018 15:05

Спасибо @scopchanov за редактирование моего вопроса :). Я все еще новичок в текстовом редакторе Stackoverflow.

ADinhLux 14.09.2018 15:17

Думаю, теперь стало понятнее. Не стесняйтесь исправлять некоторые неточности, если я что-то неправильно понял. Удачи в поиске помощи!

scopchanov 14.09.2018 15:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
4
2 200
1

Ответы 1

Похоже, вы используете SDK 4.7.1 и, вероятно, ориентируетесь на современный Android SDK. Проблема, с которой вы столкнулись, заключается в том, что DJI решил связать версию libffmpeg.so, несовместимую с современными версиями SDK на платформе x86 (платформа x86 - это то, на чем работает ваш эмулятор).

У вас есть 2, возможно, три варианта:

  1. В Android Studio, когда вы создаете новое виртуальное устройство, когда вы дойдете до «Выбрать системный образ», перейдите на вкладку «Другие изображения». Оттуда выберите любое изображение «руки» и используйте его. С этой опцией эмулятор будет работать очень медленно и может вообще не работать, если ваш компьютер старый или медленный.
  2. Подключите к компьютеру настоящее Android-устройство с включенным режимом отладки и запустите на нем демонстрацию.
  3. В вашем файле build.gradle установите compileSdkVersion и targetSdkVersion на 23, что является последней версией, в которой будет загружен предоставленный DJI файл libffmpeg.so. Однако это худший вариант, поскольку Google больше не позволяет никому публиковать приложения с такими низкими версиями SDK. Версия должна быть 26 или выше: https://support.google.com/googleplay/android-developer/answer/113469#targetsdk

Итак, медленный эмулятор, необходимость в реальном устройстве или использование старой (не рекомендованной) версии Android для таргетинга? Есть ли лучшее решение от DJI?

user754730 09.10.2018 12:46

Я всего лишь сторонний разработчик, как и вы, но ответ в том, что вы правы. Пока DJI не решит связать правильно собранную версию libffmpgeg.so в обновлении SDK, мы застряли на этих параметрах. Настоящая боль заключается в том, что наши приложения не будут работать ни на одном реальном устройстве x86 (хотя их не так много для начала).

Dan O. 10.10.2018 15:33

Согласно поддержке DJI, версия должна быть установлена ​​на 22, а не на 23. Это не работает для последней версии SDK 4.9, которая, по-видимому, требует, чтобы версия была не ниже 24. Я собираюсь попробовать 4.4.1, поскольку большая часть текущая документация все равно ошибочно ссылается на эту конфигурацию. stackoverflow.com/questions/52010511/…

SChalice 02.03.2019 04:24

Версия 4.4.1 работает на x86 даже с целевой версией, установленной на 24. Кто-то из другого потока предположил, что версия 4.6 также будет работать. github.com/dji-sdk/Mobile-UXSDK-Android/releases

SChalice 02.03.2019 04:59

Другие вопросы по теме