【引子】
- 本篇文章将介绍如何将MSDK V5 Sample中的MSDK包和UXSDK开源框架移植到一个空白的项目之中。
- 本篇文章里作者使用的Android Studio版本为4.2.2。
- 本篇文章里作者使用的MSDK版本为5.2.0。
- 本片文章里作者使用的gradle版本为gradle-6.7.1-bin。
- 5.8.0版本及其以上版本可以参考这篇文档:https://developer.dji.com/doc/mobile-sdk-tutorial/cn/quick-start/user-project-caution.html
【新建项目】
- 新建一个空白项目,选择New Project-Phone and Tablet-Empty Activity。
- Name为My Application,Package name为com.dji.myapplication,Minimum SDK为21。
- compileSdkVersion和targetSdkVersion为29。
【新建MyApplication.kt文件】
- 编辑成如下,这行代码的作用是引入SDK的解密加固包,请参考Sample的DJIAllApplication。
package com.dji.myapplication
import android.app.Application
import android.content.Context
class MyApplication : Application() {
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
com.secneo.sdk.Helper.install(this)
}
}
【修改build.gradle(Project)文件】
- 设置一些项目配置。
buildscript {
ext.kotlin_version = "1.6.10"
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
【修改build.gradle(Module)文件】
- 在dependencies项里添加MSDK飞行器包,如需全量包或手持包请参考Sample添加。
implementation "com.dji:dji-sdk-v5-aircraft:5.2.0"
implementation "com.dji:dji-sdk-v5-networkImp:5.2.0"
compileOnly "com.dji:dji-sdk-v5-aircraft-provided:5.2.0"
implementation 'com.squareup.okio:okio:1.15.0'
implementation 'com.squareup.wire:wire-runtime:2.2.0'
implementation 'com.airbnb.android:lottie:3.3.1' - 在android项里添加packagingOptions。
packagingOptions {
doNotStrip "*/*/libconstants.so"
doNotStrip "*/*/libdji_innertools.so"
doNotStrip "*/*/libdjibase.so"
doNotStrip "*/*/libDJICSDKCommon.so"
doNotStrip "*/*/libDJIFlySafeCore-CSDK.so"
doNotStrip "*/*/libdjifs_jni-CSDK.so"
doNotStrip "*/*/libDJIRegister.so"
doNotStrip "*/*/libdjisdk_jni.so"
doNotStrip "*/*/libDJIUpgradeCore.so"
doNotStrip "*/*/libDJIUpgradeJNI.so"
doNotStrip "*/*/libDJIWaypointV2Core-CSDK.so"
doNotStrip "*/*/libdjiwpv2-CSDK.so"
doNotStrip "*/*/libffmpeg.so"
doNotStrip "*/*/libFlightRecordEngine.so"
doNotStrip "*/*/libvideo-framing.so"
doNotStrip "*/*/libwaes.so"
doNotStrip "*/*/libagora-rtsa-sdk.so"
doNotStrip "*/*/libc++.so"
doNotStrip "*/*/libc++_shared.so"
doNotStrip "*/*/libmrtc_28181.so"
doNotStrip "*/*/libmrtc_agora.so"
doNotStrip "*/*/libmrtc_core.so"
doNotStrip "*/*/libmrtc_core_jni.so"
doNotStrip "*/*/libmrtc_data.so"
doNotStrip "*/*/libmrtc_log.so"
doNotStrip "*/*/libmrtc_onvif.so"
doNotStrip "*/*/libmrtc_rtmp.so"
doNotStrip "*/*/libmrtc_rtsp.so"
} - 拷贝sample.pro文件的内容复制到你的项目中的proguard-rules文件中。
【修改AndroidManifest.xml文件】
- 参照Sample的AndroidManifest.xml添加SDK需要的最基础权限,详情请阅读MSDK V5都需要什么安卓系统权限?
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> - 参照Sample的AndroidManifest.xml添加USB相关权限,为了连接遥控器使用。
<uses-feature
android:name="android.hardware.usb.host"
android:required="false"/>
<uses-feature
android:name="android.hardware.usb.accessory"
android:required="true"/> - 在application标签下添加Myapplication文件的声明,启动的时候需要加载。
<application
android:name="com.dji.myapplication.MyApplication" - 参照Sample的AndroidManifest.xml添加SDK API KEY。X处需依照AndroidManifest.xml中的package前往开发者网站申请appkey,成功后将appkey填写到X处。此案例里package=com.dji.myapplication。申请appkey时,Package Name处需填写com.dji.myapplication。
<meta-data
android:name="com.dji.sdk.API_KEY"
android:value="X"/> - 在activity标签下添加intent-filter和meta-data。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
【修改MainActivity.kt文件】
-
添加MSDK的init函数即可。
package com.dji.myapplication
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import dji.v5.common.error.IDJIError
import dji.v5.common.register.DJISDKInitEvent
import dji.v5.manager.SDKManager
import dji.v5.manager.interfaces.SDKManagerCallback
class MainActivity : AppCompatActivity() {
private val TAG = "myApp"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
registerApp()
}
private fun registerApp() {
SDKManager.getInstance().init(this, object : SDKManagerCallback {
override fun onRegisterSuccess() {
Log.i(TAG, "myApp onRegisterSuccess")
}
override fun onRegisterFailure(error: IDJIError) {
Log.i(TAG, "myApp onRegisterFailure")
}
override fun onProductDisconnect(productId: Int) {
Log.i(TAG, "myApp onProductDisconnect")
}
override fun onProductConnect(productId: Int) {
Log.i(TAG, "myApp onProductConnect")
}
override fun onProductChanged(productId: Int) {
Log.i(TAG, "myApp onProductChanged")
}
override fun onInitProcess(event: DJISDKInitEvent, totalProcess: Int) {
Log.i(TAG, "myApp onInitProcess")
if (event == DJISDKInitEvent.INITIALIZE_COMPLETE) {
Log.i(TAG, "myApp start registerApp")
SDKManager.getInstance().registerApp()
}
}
override fun onDatabaseDownloadProgress(current: Long, total: Long) {
Log.i(TAG, "myApp onDatabaseDownloadProgress")
}
})
}
}
【导入UXSDK开源框架】
- 将Sample中的UXSDK项目整个复制到myapplication项目路径的app/libs文件夹下。
- 点击File->New->Import Module,选择myapplication项目路径的app/libs文件夹下的android-sdk-v5-uxsdk,选择结束。
-
修改settings.gradle文件。
rootProject.name = "My Application"
include ':app', ':android-sdk-v5-uxsdk'
project(':android-sdk-v5-uxsdk').projectDir = new File(rootDir, 'app/libs/android-sdk-v5-uxsdk/') -
修改build.gradle(:android-sdk-v5-uxsdk)文件中的配置和myApplication项目一致。
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 29
resourcePrefix "uxsdk_"
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions{
jvmTarget = JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.squareup.okio:okio:1.15.0'
implementation 'com.squareup.wire:wire-runtime:2.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1'
implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1'
implementation 'androidx.lifecycle:lifecycle-process:2.3.1'
implementation 'androidx.media:media:1.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "androidx.core:core-ktx:1.3.2"
api 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.airbnb.android:lottie:3.3.1'
implementation 'androidx.cardview:cardview:1.0.0'
api 'org.maplibre.gl:android-plugin-annotation-v9:1.0.0'
api 'org.maplibre.gl:android-sdk-turf:5.9.0'
api 'org.maplibre.gl:android-sdk:9.4.2'
api 'com.amap.api:3dmap:7.3.0'
api 'com.amap.api:search:7.3.0'
api 'com.google.android.gms:play-services-places:16.0.0'
api 'com.google.android.gms:play-services-maps:16.0.0'
api 'com.google.android.gms:play-services-location:16.0.0'
api 'com.google.android.gms:play-services-base:16.0.0'
compileOnly "com.dji:dji-sdk-v5-aircraft-provided:5.2.0"
compileOnly "com.dji:dji-sdk-v5-aircraft:5.2.0"
} - 同步后点击Build-Build APK进行编译。
评论
2 条评论
相比v4,v5的文档非常简略
请登录写评论。