MAVSDK-Java icon indicating copy to clipboard operation
MAVSDK-Java copied to clipboard

Crash when receiving connection

Open matthieu-db opened this issue 10 months ago • 2 comments

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)

matthieu-db avatar Feb 04 '25 14:02 matthieu-db

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()
     }
 }

matthieu-db avatar Feb 04 '25 15:02 matthieu-db

On my app, I seem to have worked around it by adding a 2 second wait before allowing the System object to be accessed

matthieu-db avatar Feb 04 '25 16:02 matthieu-db

No longer an issue on newer versions

matthieu-db avatar Jun 24 '25 08:06 matthieu-db