Как совместить DJI android SDK с Unity - PullRequest
0 голосов
/ 20 апреля 2020

Я пытался интегрировать пустой проект UniDid в DJI SDK, используя собственный плагин (файл aar), и на прошлой неделе я изо всех сил пытался заставить его работать. Кажется, что DJI mobile sdk не очень хорошо работает с Unity.

Я следовал официальной документации и сумел создать плагин, который успешно подключается к SDK, вопрос в том, буду ли я использовать Unity для перекомпиляции этого плагина и запуска игры, При запуске он просто набрал бы sh (без ошибок gradle или compile).

Dji Mobile SDK

В соответствии с документами, я должен переопределить attachBaseContext () метод для добавления Helper.install (MApplication.this); строка кода.

Это приводит к следующей ошибке:

2020-04-20 12:19:32.727 6473-6473/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kandabi.DroneGame, PID: 6473
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/secneo/sdk/Helper;
    at com.kandabi.droneplugin.MApplication.attachBaseContext(MApplication.java:13)
    at android.app.Application.attach(Application.java:215)

Необходимое переопределение attachBaseContext:

import com.secneo.sdk.Helper;

public class MApplication extends Application {
    @Override
    protected void attachBaseContext(Context paramContext) {
        super.attachBaseContext(paramContext);
        Helper.install(MApplication.this);
    }
}

Сборка Gradle:

apply plugin: 'com.android.library'
android {
    compileSdkVersion 29
    buildToolsVersion "28.0.3"

    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 29
        ndk {
            // On x86 devices that run Android API 23 or above, if the application is targeted with API 23 or
            // above, FFmpeg lib might lead to runtime crashes or warnings.
            abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions{
        doNotStrip "*/*/libdjivideo.so"
        doNotStrip "*/*/libSDKRelativeJNI.so"
        doNotStrip "*/*/libFlyForbid.so"
        doNotStrip "*/*/libduml_vision_bokeh.so"
        doNotStrip "*/*/libyuv2.so"
        doNotStrip "*/*/libGroudStation.so"
        doNotStrip "*/*/libFRCorkscrew.so"
        doNotStrip "*/*/libUpgradeVerify.so"
        doNotStrip "*/*/libFR.so"
        doNotStrip "*/*/libDJIFlySafeCore.so"
        doNotStrip "*/*/libdjifs_jni.so"
        doNotStrip "*/*/libsfjni.so"
        exclude 'META-INF/rxjava.properties'
    }
}

dependencies {
    compileOnly files ('libs/unity-classes.jar')
    compile ('com.dji:dji-sdk:4.11.2')
    provided ('com.dji:dji-sdk-provided:4.11.2')
}

Android Манифест -

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kandabi.droneplugin">

    <!-- Permissions and features -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature
        android:name="android.hardware.usb.host"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.usb.accessory"
        android:required="true" />
    <!-- Permissions and features -->

    <application
        android:name=".MApplication"
        android:allowBackup="true"
        android:supportsRtl="true">

        <!-- DJI SDK -->
        <uses-library android:name="com.android.future.usb.accessory" />
        <uses-library android:name="org.apache.http.legacy" android:required="false" />
        <meta-data
            android:name="com.dji.sdk.API_KEY"
            android:value="------" />
        <activity
            android:name="dji.sdk.sdkmanager.DJIAoaControllerActivity"
            android:theme="@android:style/Theme.Translucent" >
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
            </intent-filter>
            <meta-data
                android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
                android:resource="@xml/accessory_filter" />
        </activity>
        <!-- DJI SDK -->

        <activity android:name=".Controller"
            android:configChanges="orientation"
            android:screenOrientation="portrait">
        </activity>
    </application>
</manifest>

Файл Gradle и Android Файл манифеста настроен правильно. Полагаю, я был бы очень признателен, если бы вы мне помогли, так как я довольно сильно озадачен. сейчас же! ?

...