Проблема с инициализацией собственного SDK во Flutter: java.lang.UnsatisfiedLinkError: не найдена реализация для java.lang.Object
Я пытаюсь интегрировать SDK от компании TUYA (Smart Life App SDK) в проект Flutter в качестве собственного SDK с использованием Java. Я выполнил шаги, которые размещены на официальном сайте, с некоторыми адаптациями, чтобы заставить его работать в проекте Flutter. Когда вся интеграция завершена, сборка приложения в порядке, и я пытаюсь инициализировать SDK, он показывает НЕУСТОЙЧИВОЕ ИСКЛЮЧЕНИЕ: main
Запуск lib\main.dart на sdk gphone64 x86 64 в режиме отладки... lib\main.dart:1
√ Встроенный build\app\outputs\flutter-apk\app-debug.apk.
E/AndroidRuntime(12996): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main E/AndroidRuntime(12996): Процесс: com.example.project, PID: 12996E/AndroidRuntime(12996): java.lang.UnsatisfiedLinkError: Реализация для java.lang не найдена. Object com.tuya.smart.security.jni.SecureNativeApi.doCommandNative(android.content.Context, int, byte[], byte[], boolean, boolean) (tried Java_com_tuya_smart_security_jni_SecureNativeApi_doCommandNative and Java_com_tuya_smart_security_jni_SecureNativeApi_doCommandNative__Landroid_content_Context_2I_3B_3BZZ)E/AndroidRuntime(12996): at com .tuya.smart.security.jni.SecureNativeApi.doCommandNative(собственный метод) E/AndroidRuntime(12996): в com.tuya.smart.security.jni.JNICLibrary.doCommandNative(JNICLibrary.java:55) E/AndroidRuntime(12996) : в com.tuya.sdk.network.TuyaNetworkSecurity.initJNI(TuyaNetworkSecurity.java:9) E/AndroidRuntime(12996):в com.tuya.smart.android.network.TuyaSmartNetWork.initialize(TuyaSmartNetWork.java:35) E/AndroidRuntime(12996): в com.tuya.smart.sdk.TuyaSdk.initTuyaData(TuyaSdk.java:81) E/AndroidRuntime (12996): в com.tuya.smart.sdk.TuyaSdk.init(TuyaSdk.java:220) E/AndroidRuntime(12996): в com.tuya.smart.sdk.TuyaSdk.init(TuyaSdk.java:60) E /AndroidRuntime(12996): в com.tuya.smart.home.sdk.TuyaHomeSdk.init(TuyaHomeSdk.java:107) E/AndroidRuntime(12996): в com.example.project.FTuyaSmartApp.onCreate(FTuyaSmartApp.java:14) ) E/AndroidRuntime(12996): в android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1211) E/AndroidRuntime(12996): в android.app.ActivityThread.handleBindApplication(ActivityThread.java:6725) E/AndroidRuntime(12996) ): в android.app.ActivityThread.access$1500(ActivityThread.java:247) E/AndroidRuntime(12996): в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053) E/AndroidRuntime(12996): в android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(12996): в android.os.Looper.loopOnce( Looper.java:201) E/AndroidRuntime(12996): в android.os.Looper.loop(Looper.java:288) E/AndroidRuntime(12996): в android.app.ActivityThread.main(ActivityThread.java:7839) E/AndroidRuntime(12996): в java.lang.reflect.Method.invoke(собственный метод) E/AndroidRuntime(12996): в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) E /AndroidRuntime(12996): в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)201) E/AndroidRuntime(12996): в android.os.Looper.loop(Looper.java:288) E/AndroidRuntime(12996): в android.app.ActivityThread.main(ActivityThread.java:7839) E/AndroidRuntime( 12996): в java.lang.reflect.Method.invoke(собственный метод) E/AndroidRuntime(12996): в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) E/AndroidRuntime(12996) ): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)201) E/AndroidRuntime(12996): в android.os.Looper.loop(Looper.java:288) E/AndroidRuntime(12996): в android.app.ActivityThread.main(ActivityThread.java:7839) E/AndroidRuntime( 12996): в java.lang.reflect.Method.invoke(собственный метод) E/AndroidRuntime(12996): в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) E/AndroidRuntime(12996) ): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Если у кого-то была похожая проблема, сообщите, пожалуйста, потому что я действительно не знаю, как решить эту проблему.
1 ответ
Tuya Smart Life SDK не работает на x86 android, так как они называют нативные библиотеки для конкретной платформы, которые они не упаковывают для x86.
Из документа быстрой интеграции:
App SDK v3.10.0 и более ранние версии поддерживают только armeabi-v7a. В App SDK версии 3.11.0 и более поздних версиях интегрированы armeabi-v7a и arm64-v8a. Если вы добавили в проект библиотеки .so, вы должны удалить их и использовать только библиотеку, включенную в SDK.
Поэтому вам нужно настроить эмулированное устройство ARM в диспетчере AVD, используя образ arm64.
Однако обратите внимание, что обычный эмулятор на основе QEMU2 запускает только образы ARM, где API < 27 (т.е. нуга), и очень медленно.
К счастью, Google добавил частичную эмуляцию руки (т. е. большая часть ОС работает под управлением x86, но приложения, скомпилированные для руки, работают под эмуляцией) в версии x86_64 >= 11. Источник: блог Google.
Протестировал, и API Tuya работает нормально на Android 11.0 x86_64.
Заставить флаттер строить для руки, а не для x86_64, как часть обычного инструментария, сложнее — я пока только пытался вручную заставить его:
flutter build apk --debug --split-per-abi
adb -e install .\build\app\outputs\flutter-apk\app-armeabi-v7a-debug.apk