Зависимости формы сцены для 1.16.0 (не совместимы с AndroidX)

#augmented-reality #arcore #sceneform

#дополненная реальность #arcore #форма сцены

Вопрос:

Привет всем тем, кто использует Sceneform 1.16.0, было несколько проблем, которые меня беспокоили. Пожалуйста, дайте мне несколько советов, если вы знаете, как исправить эти проблемы.

После того, как плагин Sceneform 1.15.0 сломался на более новой платформе Android Studio > 3.6 , я перешел на 1.16.0 по совету страницы github sceneform-sdk. После установки Sceneform sdk 1.16.0 я столкнулся с несколькими серьезными проблемами.

  1. SDK не совместим с androidx. Несмотря на то, что я изменил аннотации на androidx вручную: import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; , некоторые вещи просто сломались -> Мой код ViewRenderables трескается, хотя это типичные примеры кодов, взятые со страницы github. Это пример кода, который отдаленно похож на мой текущий код.
           Node tigerTitleNode = new Node();
          tigerTitleNode.setParent(model);
          tigerTitleNode.setEnabled(false);
          tigerTitleNode.setLocalPosition(new Vector3(0.0f, 1.0f, 0.0f));
          ViewRenderable.builder()
                  .setView(this, R.layout.fragment_stage_data)
                  .build()
                  .thenAccept(
                          (renderable) -> {
                              tigerTitleNode.setRenderable(renderable);
                              tigerTitleNode.setEnabled(true);
                          })
                  .exceptionally(
                          (throwable) -> {
                              throw new AssertionError("Could not load card view.", throwable);
                          }
                  );
        });
  
  1. Если я решу использовать старые пакеты поддержки implementation "com.android.support:appcompat-v7:28.0.0" , как предложено на странице примера github, это также проблема, например, если я собираюсь использовать более новые пакеты библиотеки поддержки в androidx, у меня возникнут трудности с управлением конфликтами кода или ошибками.

  2. Состояние библиотек Sceneform SDK. В чатах reddit некоторые люди предложили перейти на другие движки рендеринга, такие как Filament, или другие сторонние игровые движки, такие как Unity. Я понимаю трудности создания библиотек формы сцены и управления ими, но внезапное «устаревание» этого проекта является проблемой для людей, которые хотят создавать собственное программирование для AR.

    Я обнаружил, что также разочаровало то, что «новейшие» образцы кодов 3-месячной давности (est. Июнь 2020) все еще использовали старые библиотеки поддержки, в то время как некоторые из наиболее быстро развивающихся команд Google уже используют лучшие возможности androidx. (Извините Фредсу, тпсиаки, который так усердно работал, пытаясь помочь обновить библиотеку с Filament engine 1.7.0, но я хотел бы увидеть некоторые коды, написанные на androidx для справки).

Прямо сейчас я надеюсь найти кого-нибудь, кто действительно даст несколько предложений для моего текущего проекта:

  1. Перенесите проект в Filament / Unity
  2. Понизьте мои коды до 1.15.0 и переделайте мой проект
  3. Подождите, пока кто-нибудь исправит ошибку, или я пойду исправлю ошибку (что я не знаю, как)

Кстати, у меня также есть вопрос по 1.17.1 и насколько он отличается от 1.16.0 и почему он похож на 1.15.0

Это ошибка моего кода, и я помогу, если мой проект можно сохранить.

 2020-09-01 11:46:43.335 3542-3571/? E/WindowManager: RemoteException occurs on reporting focusChanged, w=Window{41c8196 u0 com.sutd.swatapp/com.sutd.swatapp.mainactivity.MainActivity EXITING}
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:1145)
        at android.view.IWindow$Stub$Proxy.windowFocusChanged(IWindow.java:500)
        at com.android.server.wm.WindowState.reportFocusChangedSerialized(WindowState.java:3981)
        at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5539)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.os.HandlerThread.run(HandlerThread.java:65)
        at com.android.server.ServiceThread.run(ServiceThread.java:44)
  

Ответ №1:

позвольте мне ответить на ваш вопрос, даже если ему уже год. Это правда, что последняя выпущенная версия оригинального Sceneform SDK несовместима с AndroidX. Вы можете довольно легко изменить это самостоятельно, но есть варианты получше.

  • ARCore SDK для Android: создайте Sceneform и работайте напрямую с ARCore, но для этого вам потребуется работать с OpenGL.
  • Google ARCore SDK для Unity: Если вы знаете о Unity
  • Sceneform поддерживается Android SDK: на основе Sceneform с новейшей совместимостью и функциональными возможностями от Android (включая androidx **), ARCore и Filament. В настоящее время небольшое сообщество работает над этим, чтобы поддерживать его в актуальном состоянии и разрабатывать новые функции.

Если вы хотите узнать больше о версии Sceneform, поддерживаемой сообществом, ознакомьтесь с этой статьей Medium