Проблемы с интеграцией пространственных привязок Azure. Отсутствующие реализации NativeLibrary

Я возился с API пространственных привязок Azure. Я следовал документам и примерам, предоставленным Microsoft, без особых проблем, пока не попытался сделать из них свой собственный проект. Когда я пытаюсь запустить пользовательский проект с помощью API пространственных привязок, он вылетает при поиске некоторых функций, которые должны быть предоставлены библиотеками, указанными в градиенте. В журнале ошибок написано следующее:

2019-05-28 10:32:10.642 28982-28982/com.azurelib.azureanchorsclean E/AndroidRuntime: FATAL EXCEPTION: main Process: com.azurelib.azureanchorsclean, PID: 28982 java.lang.UnsatisfiedLinkError: No implementation found for com.microsoft.azure.spatialanchors.status com.microsoft.azure.spatialanchors.NativeLibrary.ssc_cloud_spatial_anchor_session_create(com.microsoft.azure.spatialanchors.Out) (tried Java_com_microsoft_azure_spatialanchors_NativeLibrary_ssc_1cloud_1spatial_1anchor_1session_1create and Java_com_microsoft_azure_spatialanchors_NativeLibrary_ssc_1cloud_1spatial_1anchor_1session_1create__Lcom_microsoft_azure_spatialanchors_Out_2) at com.microsoft.azure.spatialanchors.NativeLibrary.ssc_cloud_spatial_anchor_session_create(Native Method) ...

Соответствующие функции ssc_cloud... можно найти в зависимости spaceanchors_java, указанной в сборке gradle: Проблемы с интеграцией пространственных привязок Azure. Отсутствующие реализации NativeLibrary.

Для облачного сеанса я начинаю новую активность в своей основной активности onResume():

@Override
protected void onResume(){
    super.onResume();
    Intent intent = new Intent(this, AzureSpatialAnchorsActivity.class);
    intent.putExtra("BasicDemo", true);
    startActivity(intent);
}

А на AzureSpatialAnchorsActivity я создаю ArCoreSession и запускаю менеджер привязок:

    @Override
    protected void onResume() {
        super.onResume();

        if (session == null) {
            try {
                ...
                // Create the session.
                session = new Session(/* context= */ this);

            ... //Required catch statements
            } catch (Exception e) {
                message = "Failed to create AR session";
                exception = e;
            }
        }


        try {
            session.resume();
            startNewSession();
        } catch (CameraNotAvailableException e) {
            ...
        }
    }

    private void startNewSession() {
        destroySession();

        cloudAnchorManager = new AzureSpatialAnchorsManager(session);
        cloudAnchorManager.addAnchorLocatedListener(this::onAnchorLocated);
        cloudAnchorManager.addLocateAnchorsCompletedListener(this::onLocateAnchorsCompleted);
        cloudAnchorManager.addSessionUpdatedListener(this::onSessionUpdated);
        cloudAnchorManager.start();
    }

Ошибка возникает из-за того, что когда я пытаюсь создать объект CloudSpatialAnchorSession

public AzureSpatialAnchorsManager(Session arCoreSession) {
    spatialAnchorsSession = new CloudSpatialAnchorSession();
    ...
}

конструктор вызывает функцию из NativeLibrary

public CloudSpatialAnchorSession() {
    Out<Long> result_handle = new Out();
    status resultStatus = NativeLibrary.ssc_cloud_spatial_anchor_session_create(result_handle);
    this.handle = (Long)result_handle.value;
    NativeLibraryHelpers.checkStatus(this.handle, resultStatus);
    CookieTracker.add(this);
}

Проблема, похоже, в том, что то, что я ранее показывал на скриншоте банки, — это все, что есть. ssc_cloud_spatial_anchor_session_create вызывается, приложение заходит в тупик:

class NativeLibrary {
    NativeLibrary() {
    }
    ...
    static native status ssc_cloud_spatial_anchor_session_create(Out<Long> var0);
    ...
}

Gradle и другие конфигурации копируются/вставляются из исходного образца Microsoft. Я не могу найти то, чего мне не хватает, из-за чего мой пользовательский проект не находит реализации NativeLibrary. Для справки, вот проект майкрософт, который я использую для своего собственного проекта

Вот мои файлы действительный для справки:

Уровень проекта

buildscript {
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
    }
}

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Модуль градации:

apply plugin: 'com.android.application'
def azureSpatialAnchorsSdkVersion = '1.1.0'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.azurelib.azureanchorsclean"
        minSdkVersion 24
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.google.ar:core:1.7.0'
    implementation "com.microsoft.azure.spatialanchors:spatialanchors_jni:[${azureSpatialAnchorsSdkVersion}]"
    implementation "com.microsoft.azure.spatialanchors:spatialanchors_java:[${azureSpatialAnchorsSdkVersion}]"
    implementation 'de.javagl:obj:0.2.1'
    implementation 'com.microsoft.aad:adal:1.16.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

Спасибо!

Как выглядит файл gradle вашего проекта? Просто убедитесь, что вы не пропустили ни одной зависимости от примера проекта.

Morrison Chang 28.05.2019 05:05

@MorrisonChang добавил файлы Gradle!

Axel 28.05.2019 05:09

@Axel Это решило вашу проблему? Я сталкиваюсь с точно такой же проблемой при попытке создать привязки Xamarin для этого и не уверен, какую разницу вы сделали, что исправило это для вас: github.com/dotMorten/Xamarin.AzureSpatialAnchors

dotMorten 29.05.2019 17:51

Поддерживает ли используемое вами устройство ARCore?

Alberto Vega 04.06.2019 23:50

@AlbertoVega-MSFT да, оригинальный образец Microsoft, для которого требуется ARCore, работает на устройстве без проблем.

Axel 05.06.2019 02:55
0
5
512
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы создаете свой собственный проект, вызываете ли вы метод инициализации внутри вашего OnCreate в классе приложения?

 @Override
    public void onCreate() {
        super.onCreate();

        // Use application's context to initialize CloudServices!
        CloudServices.initialize(this);
    }

Вау, это сработало. Я не ожидал, что у этого будет решение в коде. Я был уверен, что у меня проблема с конфигурацией!

Axel 05.06.2019 08:53

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

Похожие вопросы

Autocompletetextview return Параметр, указанный как ненулевой, имеет значение null
Ошибки заголовка выбора текста
Получить изображение из CameraPreview
Содержимое Recycler удваивается каждый раз, когда фрагмент добавляется в диспетчер фрагментов, даже если он должен быть очищен
Ошибка сохранения растрового изображения Android. сохранение изображения неверно, обновите галерею после сохранения изображения на SD-карту
Сопрограммы: переопределение диспетчера OKHttp для использования ThreadPoolExecutor AsyncTasks, чтобы Espresso мог успешно утверждать
FirebaseNetworkException нельзя преобразовать в com.google.firebase.auth.FirebaseAuthException
Как я могу масштабировать размер шрифта на основе android displayMetrics?
Базовый модуль RNFirebase изначально не был найден на Android, убедитесь, что вы правильно добавили зависимости RNFirebase и Firebase gradle
Служба переднего плана Android onStartCommand не вызывается, вызывается только onCreate