MAVSDK-Java
MAVSDK-Java copied to clipboard
Crash when receiving connection
Hey, When using MAVSDK-Java, the app crashes immediately for me once a connection is made, something to do with the Telemetry plugin not being available when accessed. I am trying to debug more but am unfamiliar with the codebase.
This happens both in the sample app and also my own app. The crashes don't always happen but I would say 90 % of the time.
I am using mavsdk:2.1.0 and mavsdk-server:2.1.5. Compiling from source I get the same behaviour.
Cmdline: io.mavsdk.androidclient
pid: 30649, tid: 30726, name: mavsdk-event-qu >>> io.mavsdk.androidclient <<<
#01 pc 000000000136662c /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so
#02 pc 00000000013c4598 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (mavsdk::mavsdk_server::LazyPlugin<mavsdk::Telemetry>::maybe_plugin()+408)
#03 pc 00000000013bc2b0 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (mavsdk::mavsdk_server::TelemetryServiceImpl<mavsdk::Telemetry, mavsdk::mavsdk_server::LazyPlugin<mavsdk::Telemetry>>::SubscribeArmed(grpc::ServerContext*, mavsdk::rpc::telemetry::SubscribeArmedRequest const*, grpc::ServerWriter<mavsdk::rpc::telemetry::ArmedResponse>*)+48)
#04 pc 000000000169c470 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (grpc::internal::ServerStreamingHandler<mavsdk::rpc::telemetry::TelemetryService::Service, mavsdk::rpc::telemetry::SubscribeArmedRequest, mavsdk::rpc::telemetry::ArmedResponse>::RunHandler(grpc::internal::MethodHandler::HandlerParameter const&)+180)
#05 pc 00000000018f0dc0 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (grpc::Server::SyncRequest::ContinueRunAfterInterception()+252)
#06 pc 00000000018f0c6c /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (grpc::Server::SyncRequest::Run(std::__ndk1::shared_ptr<grpc::Server::GlobalCallbacks> const&, bool)+552)
#07 pc 0000000001905548 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so (grpc::ThreadManager::MainWorkLoop()+504)
#08 pc 0000000001905e08 /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so
#09 pc 0000000001edb7dc /data/app/~~B4fqy0_HyiWpQN6UPut7Bg==/io.mavsdk.androidclient-D-UQ2OG32JPvsUiIUs8_7A==/lib/arm64/libmavsdk_server.so
Another one:
Cmdline: my.own.app.id.debug
pid: 5949, tid: 6084, name: mavsdk-event-qu >>> my.own.app.id.debug <<<
#01 pc 000000000136662c /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (std::__ndk1::__throw_bad_optional_access()+8)
#02 pc 00000000013c4598 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (mavsdk::mavsdk_server::LazyPlugin<mavsdk::Telemetry>::maybe_plugin()+408)
#03 pc 00000000013bb700 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (mavsdk::mavsdk_server::TelemetryServiceImpl<mavsdk::Telemetry, mavsdk::mavsdk_server::LazyPlugin<mavsdk::Telemetry>>::SubscribePosition(grpc::ServerContext*, mavsdk::rpc::telemetry::SubscribePositionRequest const*, grpc::ServerWriter<mavsdk::rpc::telemetry::PositionResponse>*)+48)
#04 pc 0000000001698220 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc::internal::ServerStreamingHandler<mavsdk::rpc::telemetry::TelemetryService::Service, mavsdk::rpc::telemetry::SubscribePositionRequest, mavsdk::rpc::telemetry::PositionResponse>::RunHandler(grpc::internal::MethodHandler::HandlerParameter const&)+180)
#05 pc 00000000018f0dc0 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc::Server::SyncRequest::ContinueRunAfterInterception()+252)
#06 pc 00000000018f0c6c /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc::Server::SyncRequest::Run(std::__ndk1::shared_ptr<grpc::Server::GlobalCallbacks> const&, bool)+552)
#07 pc 0000000001905548 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc::ThreadManager::MainWorkLoop()+504)
#08 pc 0000000001905e08 /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc::ThreadManager::WorkerThread::WorkerThread(grpc::ThreadManager*)::$_0::__invoke(void*)+20)
#09 pc 0000000001edb7dc /data/app/~~5FAa42BElBaL2xm0sshCYg==/my.own.app.id.debug-XTY80fDeWQxX3plXbZtv8A==/lib/arm64/libmavsdk_server.so (grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&)::'lambda'(void*)::__invoke(void*)+136)
I just did the following changes to get the project to build
diff --git a/mavsdk_server/build.gradle b/mavsdk_server/build.gradle
--- a/mavsdk_server/build.gradle (revision b880fd2dfb01fa868bd9dcbffe222e4408bd3218)
+++ b/mavsdk_server/build.gradle (date 1738615138008)
@@ -5,7 +5,7 @@
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.2.2'
+ classpath 'com.android.tools.build:gradle:8.8.0'
}
}
@@ -150,6 +150,6 @@
}
}
- ndkVersion "25.1.8937393"
+ ndkVersion "28.0.12916984-rc2"
namespace 'io.mavsdk.mavsdkserver'
}
Index: examples/android-client/settings.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/examples/android-client/settings.gradle b/examples/android-client/settings.gradle
--- a/examples/android-client/settings.gradle (revision b880fd2dfb01fa868bd9dcbffe222e4408bd3218)
+++ b/examples/android-client/settings.gradle (date 1738681061179)
@@ -4,8 +4,8 @@
// This will require `protoc-gen-mavsdk` to be in your PATH. See
// the README in ../../sdk for more instructions about building
// from sources.
-//includeBuild '../../sdk'
+includeBuild '../../sdk'
// Uncomment the following line to use the mavsdk_server built
// from sources.
-//includeBuild '../../mavsdk_server'
+includeBuild '../../mavsdk_server'
Index: examples/android-client/app/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/examples/android-client/app/build.gradle b/examples/android-client/app/build.gradle
--- a/examples/android-client/app/build.gradle (revision b880fd2dfb01fa868bd9dcbffe222e4408bd3218)
+++ b/examples/android-client/app/build.gradle (date 1738679947101)
@@ -7,7 +7,7 @@
android {
namespace "io.mavsdk.androidclient"
- compileSdkVersion 33
+ compileSdkVersion 34
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
@@ -53,19 +53,19 @@
dependencies {
checkstyleClasspath 'com.puppycrawl.tools:checkstyle:8.17'
- implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'com.github.tony19:logback-android:2.0.0'
- implementation 'com.google.android.material:material:1.2.0'
+ implementation 'com.google.android.material:material:1.12.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:7.0.0'
implementation 'io.mavsdk:mavsdk:2.1.0'
- implementation 'io.mavsdk:mavsdk-server:2.1.0'
+ implementation 'io.mavsdk:mavsdk-server:2.1.5'
implementation 'org.slf4j:slf4j-api:2.0.13'
- testImplementation 'junit:junit:4.13'
+ testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
- androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
+ androidTestImplementation 'androidx.test:runner:1.6.2'
}
Index: examples/android-client/gradle/wrapper/gradle-wrapper.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>ISO-8859-1
===================================================================
diff --git a/examples/android-client/gradle/wrapper/gradle-wrapper.properties b/examples/android-client/gradle/wrapper/gradle-wrapper.properties
--- a/examples/android-client/gradle/wrapper/gradle-wrapper.properties (revision b880fd2dfb01fa868bd9dcbffe222e4408bd3218)
+++ b/examples/android-client/gradle/wrapper/gradle-wrapper.properties (date 1738681083396)
@@ -3,4 +3,4 @@
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
Index: examples/android-client/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/examples/android-client/build.gradle b/examples/android-client/build.gradle
--- a/examples/android-client/build.gradle (revision b880fd2dfb01fa868bd9dcbffe222e4408bd3218)
+++ b/examples/android-client/build.gradle (date 1738681236961)
@@ -5,13 +5,23 @@
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.4.1'
+ classpath 'com.android.tools.build:gradle:8.8.0'
}
}
allprojects {
repositories {
google()
+ maven {
+ url 'https://api.mapbox.com/downloads/v2/releases/maven'
+ authentication {
+ basic(BasicAuthentication)
+ }
+ credentials {
+ username = "mapbox"
+ password = "xxxx (censored)"
+ }
+ }
jcenter()
}
}
On my app, I seem to have worked around it by adding a 2 second wait before allowing the System object to be accessed
No longer an issue on newer versions