diff --git a/.gitignore b/.gitignore index 536d876..38197f9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ build local.properties gradle.properties +keystore.properties .cxx venv diff --git a/mavsdk_server/build.gradle b/mavsdk_server/build.gradle deleted file mode 100644 index 175e178..0000000 --- a/mavsdk_server/build.gradle +++ /dev/null @@ -1,155 +0,0 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:8.10.1' - } -} - -allprojects { - apply plugin: 'com.android.library' - apply plugin: 'maven-publish' - apply plugin: 'signing' - - repositories { - google() - mavenCentral() - } - - def mavsdk_server_release = "v3.6.0" - - tasks.register('extractMavsdkServer', Copy) { - mkdir project.buildDir.getAbsolutePath() + "/tmp" - - def extractForArch = { arch -> - def archiveName = "mavsdk_server_android-" + arch + "_" + mavsdk_server_release + ".tar" - def archiveFile = new File(project.buildDir.getAbsolutePath() + "/tmp/" + archiveName) - def archiveUrl = "https://github.com/mavlink/MAVSDK/releases/download/" + mavsdk_server_release + "/mavsdk_server_android-" + arch + ".tar" - def destDir = project.projectDir.getAbsolutePath() + "/src/main/prebuiltLibs" - - if (!archiveFile.exists()) { - project.logger.lifecycle("Downloading " + archiveFile.getName() + " into " + archiveFile.getAbsolutePath() + "...") - new URL(archiveUrl).withInputStream { i -> archiveFile.withOutputStream { it << i } } - } else { - project.logger.lifecycle("Archive already exists! Skipping download!") - } - - project.logger.lifecycle("Extracting into " + destDir) - copy { - from tarTree(archiveFile) - eachFile({ file -> if (file.getName().endsWith(".so")) file.setMode(0755) }) - into(destDir) - } - } - - extractForArch("arm64") - extractForArch("arm") - extractForArch("x86") - extractForArch("x86_64") - } - build.dependsOn extractMavsdkServer - - if (project.hasProperty('ossrhUsername') - && project.hasProperty('ossrhPassword')) { - afterEvaluate { - publishing { - publications { - release(MavenPublication) { - from components.release - - pom { - name = 'MAVSDK-Server' - packaging = 'aar' - description = 'MAVSDK server for Android.' - url = 'https://github.com/mavlink/MAVSDK-Java' - - scm { - connection = 'scm:git:https://github.com/mavlink/MAVSDK-Java' - developerConnection = 'scm:git:https://github.com/mavlink/MAVSDK-Java' - url = 'https://github.com/mavlink/MAVSDK-Java' - } - - licenses { - license { - name = 'BSD 3-Clause "New"' - url = 'https://opensource.org/licenses/BSD-3-Clause' - } - } - - developers { - developer { - id = 'jonasvautherin' - name = 'Jonas Vautherin' - email = 'dev@jonas.vautherin.ch' - } - } - } - } - } - repositories { - maven { - url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" - - credentials { - username = ossrhUsername - password = ossrhPassword - } - } - } - } - - signing { - useGpgCmd() - sign publishing.publications.release - } - } - } -} - -android { - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - defaultConfig { - minSdkVersion 21 - targetSdkVersion 35 - compileSdk 35 - - archivesBaseName = 'mavsdk-server' - group = 'io.mavsdk' - versionCode 3 - version '3.1.0' - - ndk { - abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' - } - - externalNativeBuild { - cmake { - arguments "-DANDROID_STL=c++_shared" - } - } - } - - externalNativeBuild { - cmake { - path "src/main/cpp/CMakeLists.txt" - } - } - - publishing { - singleVariant('release') { - withSourcesJar() - withJavadocJar() - } - } - - ndkVersion "28.0.13004108" - namespace 'io.mavsdk.mavsdkserver' -} diff --git a/mavsdk_server/build.gradle.kts b/mavsdk_server/build.gradle.kts new file mode 100644 index 0000000..78098b9 --- /dev/null +++ b/mavsdk_server/build.gradle.kts @@ -0,0 +1,226 @@ +import java.util.Properties +import java.io.FileInputStream +import java.io.IOException +import java.net.URI + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.jreleaser) + `maven-publish` +} + +// Load file "keystore.properties" where we keep our keys +val keystorePropertiesFile = rootProject.file("keystore.properties") +val keystoreProperties = Properties() + +try { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} catch (ignored: IOException) { + if (project.hasProperty("centralUsername")) keystoreProperties["centralUsername"] = property("centralUsername") + if (project.hasProperty("centralPassword")) keystoreProperties["centralPassword"] = property("centralPassword") + if (project.hasProperty("gpgPass")) keystoreProperties["gpgPass"] = property("gpgPass") +} + +allprojects { + val mavsdk_server_release = "v3.6.0" + + tasks { + register("extractMavsdkServer") { + val tmpDir = File(layout.buildDirectory.get().asFile, "tmp") + tmpDir.mkdirs() + + fun extractForArch(arch: String) { + val archiveName = "mavsdk_server_android-${arch}_${mavsdk_server_release}.tar" + val archiveFile = File(tmpDir, archiveName) + val archiveUrl = "https://github.com/mavlink/MAVSDK/releases/download/${mavsdk_server_release}/mavsdk_server_android-$arch.tar" + val destDir = "${project.projectDir.getAbsolutePath()}/src/main/prebuiltLibs" + + inputs.file(archiveFile) + outputs.dir(destDir) + + if (!archiveFile.exists()) { + project.logger.warn("Downloading ${archiveFile.getName()} into ${archiveFile.getAbsolutePath()}...") + URI(archiveUrl).toURL().openStream().use { input -> + archiveFile.outputStream().use { output -> + input.copyTo(output) + } + } + } else { + project.logger.warn("Archive already exists! Skipping download.") + } + + project.logger.warn("Extracting $archiveFile into $destDir") + + from(tarTree(archiveFile)) { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + } + eachFile { + if (path.endsWith(".so")) { + filePermissions { + group.execute = true + user.execute = true + other.execute = true + } + } + } + into(destDir) + project.logger.warn("Should be extracted for arch $arch") + } + + extractForArch("arm64") + extractForArch("arm") + extractForArch("x86") + extractForArch("x86_64") + } + } + + tasks.named("preBuild") { + dependsOn("extractMavsdkServer") + } +} + +android { + namespace = "io.mavsdk.mavsdkserver" + compileSdk = 35 + + defaultConfig { + minSdk = 21 + + group = "io.mavsdk" + version = "3.6.0-SNAPSHOT" + + + ndk { + abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64") + } + + externalNativeBuild { + cmake { + arguments.add("-DANDROID_STL=c++_shared") + } + } + } + + externalNativeBuild { + cmake { + path = File("src/main/cpp/CMakeLists.txt") + } + } + + buildTypes { + release { + isMinifyEnabled = false + } + } + + publishing { + singleVariant("release") { + withSourcesJar() + withJavadocJar() + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + ndkVersion = "28.0.13004108" +} + + +if (keystoreProperties.containsKey("centralUsername") && keystoreProperties.containsKey("centralPassword")) { + afterEvaluate { + publishing { + publications { + create("release") { + from(components["release"]) + + pom { + name = "MAVSDK-Server" + packaging = "aar" + description = "MAVSDK server for Android." + url = "https://github.com/mavlink/MAVSDK-Java" + + scm { + connection = "scm:git:https://github.com/mavlink/MAVSDK-Java" + developerConnection = "scm:git:https://github.com/mavlink/MAVSDK-Java" + url = "https://github.com/mavlink/MAVSDK-Java" + } + + licenses { + license { + name = "BSD 3-Clause" + url = "https://opensource.org/licenses/BSD-3-Clause" + } + } + + developers { + developer { + id = "jonasvautherin" + name = "Jonas Vautherin" + email = "dev@jonas.vautherin.ch" + } + developer { + id = "julianoes" + name = "Julian Oes" + email = "julian@oes.ch" + } + } + } + } + } + + repositories { + maven { + url = uri(layout.buildDirectory.dir("target/staging-deploy")) + } + } + } + } + + jreleaser { + signing { + setActive("ALWAYS") + armored.set(true) + setMode("COMMAND") + keystoreProperties["gpgPass"]?.let { + passphrase.set(it as String) + } + } + deploy { + release { + github { + skipRelease = true + skipTag = true + } + } + maven { + mavenCentral { + create("sonatype") { + verifyPom = false + setActive("RELEASE") + username = keystoreProperties["centralUsername"] as String + password = keystoreProperties["centralPassword"] as String + url = "https://central.sonatype.com/api/v1/publisher" + stagingRepository("build/target/staging-deploy") + } + } + nexus2 { + create("snapshot-deploy") { + verifyPom = false + setActive("SNAPSHOT") + snapshotUrl.set("https://central.sonatype.com/repository/maven-snapshots") + url = "https://central.sonatype.com/repository/maven-snapshots" + applyMavenCentralRules = true + snapshotSupported = true + username = keystoreProperties["centralUsername"] as String + password = keystoreProperties["centralPassword"] as String + stagingRepository("build/target/staging-deploy") + } + } + } + } + } +} + diff --git a/mavsdk_server/gradle/libs.versions.toml b/mavsdk_server/gradle/libs.versions.toml new file mode 100644 index 0000000..e7e110c --- /dev/null +++ b/mavsdk_server/gradle/libs.versions.toml @@ -0,0 +1,9 @@ +[versions] +android-gradle-plugin = "8.6.1" +jreleaser-plugin = "1.19.0" + +[libraries] + +[plugins] +android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" } +jreleaser = { id = "org.jreleaser", version.ref = "jreleaser-plugin" } diff --git a/mavsdk_server/settings.gradle b/mavsdk_server/settings.gradle deleted file mode 100644 index 004a467..0000000 --- a/mavsdk_server/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'mavsdk-server' diff --git a/mavsdk_server/settings.gradle.kts b/mavsdk_server/settings.gradle.kts new file mode 100644 index 0000000..a2d2957 --- /dev/null +++ b/mavsdk_server/settings.gradle.kts @@ -0,0 +1,18 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "mavsdk-server" + diff --git a/sdk/build.gradle b/sdk/build.gradle deleted file mode 100644 index 5411a6c..0000000 --- a/sdk/build.gradle +++ /dev/null @@ -1,179 +0,0 @@ -buildscript { - repositories { - jcenter() - mavenCentral() - } - - dependencies { - classpath "com.google.protobuf:protobuf-gradle-plugin:0.9.4" - } -} - -subprojects { - apply plugin: 'com.google.protobuf' - apply plugin: 'idea' - apply plugin: 'java-library' - apply plugin: 'maven-publish' - apply plugin: 'signing' - - group = 'io.mavsdk' - archivesBaseName = 'mavsdk' - version = '3.0.0' - - repositories { - jcenter() - mavenCentral() - } - - configurations { - checkstyleClasspath - } - - dependencies { - checkstyleClasspath 'com.puppycrawl.tools:checkstyle:8.17' - } - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - - def grpcVersion = '1.61.1' - - protobuf { - protoc { - artifact = 'com.google.protobuf:protoc:3.25.2' - } - - plugins { - grpc { - artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" - } - } - - generateProtoTasks { - all()*.each { task -> - task.builtins { - java { - option "lite" - } - } - - task.plugins { - grpc { - option 'lite' - } - - mavsdk { - option 'file_ext=java' - option "template_path=$project.rootDir/templates/" - } - } - } - } - } - - sourceSets { - main { - proto { - srcDir "$project.rootDir/proto/protos/" - } - - java { - srcDir 'build/generated/source/proto/main/javalite' - srcDir 'build/generated/source/proto/main/grpc' - srcDir 'build/generated/source/proto/main/mavsdk' - } - } - } - - tasks.withType(Jar).all { - duplicatesStrategy = DuplicatesStrategy.INCLUDE - } - - java { - withJavadocJar() - withSourcesJar() - } - - if (project.hasProperty('ossrhUsername') - && project.hasProperty('ossrhPassword')) { - - afterEvaluate { - publishing { - publications { - mavenJava(MavenPublication) { - from components.java - - pom { - name = 'MAVSDK-Java' - packaging = 'jar' - description = 'MAVSDK client for Java.' - url = 'https://github.com/mavlink/MAVSDK-Java' - - scm { - connection = 'scm:git:https://github.com/mavlink/MAVSDK-Java' - developerConnection = 'scm:git:https://github.com/mavlink/MAVSDK-Java' - url = 'https://github.com/mavlink/MAVSDK-Java' - } - - licenses { - license { - name = 'BSD 3-Clause "New"' - url = 'https://opensource.org/licenses/BSD-3-Clause' - } - } - - developers { - developer { - id = 'jonasvautherin' - name = 'Jonas Vautherin' - email = 'dev@jonas.vautherin.ch' - } - } - } - } - } - repositories { - maven { - url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" - - credentials { - username = ossrhUsername - password = ossrhPassword - } - } - } - } - - signing { - useGpgCmd() - sign publishing.publications.mavenJava - } - } - } - - idea { - module { - inheritOutputDirs = false - outputDir = compileJava.destinationDir - testOutputDir = compileTestJava.destinationDir - } - } - - dependencies { - // The protobuf configuration which was set earlier would generate well-known - // protos which would create conflicts with other libraries that use them as well - compileOnly "io.grpc:grpc-protobuf:${grpcVersion}" - - implementation "io.grpc:grpc-okhttp:${grpcVersion}" - implementation "io.grpc:grpc-protobuf-lite:${grpcVersion}" - implementation "io.grpc:grpc-stub:${grpcVersion}" - implementation 'org.slf4j:slf4j-api:2.0.12' - api 'io.reactivex.rxjava2:rxjava:2.2.21' - - compileOnly "javax.annotation:javax.annotation-api:1.3.2" - - testImplementation "io.grpc:grpc-testing:${grpcVersion}" - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.13.0' - } -} diff --git a/sdk/build.gradle.kts b/sdk/build.gradle.kts new file mode 100644 index 0000000..b728de1 --- /dev/null +++ b/sdk/build.gradle.kts @@ -0,0 +1,184 @@ +import java.util.Properties +import java.io.FileInputStream +import java.io.IOException + +plugins { + alias(libs.plugins.jreleaser) + alias(libs.plugins.protobuf) + `java-library` + `maven-publish` +} + +// Load file "keystore.properties" where we keep our keys +val keystorePropertiesFile = rootProject.file("keystore.properties") +val keystoreProperties = Properties() + +try { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} catch (ignored: IOException) { + if (project.hasProperty("centralUsername")) keystoreProperties["centralUsername"] = property("centralUsername") + if (project.hasProperty("centralPassword")) keystoreProperties["centralPassword"] = property("centralPassword") + if (project.hasProperty("gpgPass")) keystoreProperties["gpgPass"] = property("gpgPass") +} + +group = "io.mavsdk" +version = "3.6.0-SNAPSHOT" + +val grpcVersion = "1.61.1" + +protobuf { + protoc { + artifact = "com.google.protobuf:protoc:3.25.2" + } + + plugins { + create("grpc") { + artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" + } + } + + generateProtoTasks { + all().forEach { task -> + task.builtins { + getByName("java") { + option("lite") + } + } + task.plugins { + create("grpc") { + option("lite") + } + + create("mavsdk") { + option("file_ext=java") + option("template_path=templates/") + } + } + } + } +} + +tasks.withType().configureEach { + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } + + withJavadocJar() + withSourcesJar() +} + +if (keystoreProperties.containsKey("centralUsername") && keystoreProperties.containsKey("centralPassword")) { + afterEvaluate { + publishing { + publications { + create("java") { + from(components["java"]) + + pom { + name = "MAVSDK-Java" + packaging = "jar" + description = "MAVSDK client for Java." + url = "https://github.com/mavlink/MAVSDK-Java" + + scm { + connection = "scm:git:https://github.com/mavlink/MAVSDK-Java" + developerConnection = "scm:git:https://github.com/mavlink/MAVSDK-Java" + url = "https://github.com/mavlink/MAVSDK-Java" + } + + licenses { + license { + name = "BSD 3-Clause" + url = "https://opensource.org/licenses/BSD-3-Clause" + } + } + + developers { + developer { + id = "jonasvautherin" + name = "Jonas Vautherin" + email = "dev@jonas.vautherin.ch" + } + } + } + } + } + + repositories { + maven { + url = uri(layout.buildDirectory.dir("target/staging-deploy")) + } + } + } + } + + jreleaser { + signing { + setActive("ALWAYS") + armored.set(true) + setMode("COMMAND") + keystoreProperties["gpgPass"]?.let { + passphrase.set(it as String) + } + + command { + keyName.set("72D6223E657BDA72EDEA45F021A81CC9B3DDE00B") + } + } + deploy { + release { + github { + skipRelease = true + skipTag = true + } + } + maven { + mavenCentral { + create("sonatype") { + verifyPom = false + setActive("RELEASE") + username = keystoreProperties["centralUsername"] as String + password = keystoreProperties["centralPassword"] as String + url = "https://central.sonatype.com/api/v1/publisher" + stagingRepository("build/target/staging-deploy") + } + } + nexus2 { + create("snapshot-deploy") { + verifyPom = false + setActive("SNAPSHOT") + snapshotUrl.set("https://central.sonatype.com/repository/maven-snapshots") + url = "https://central.sonatype.com/repository/maven-snapshots" + applyMavenCentralRules = true + snapshotSupported = true + username = keystoreProperties["centralUsername"] as String + password = keystoreProperties["centralPassword"] as String + stagingRepository("build/target/staging-deploy") + } + } + } + } + } +} + +dependencies { + protobuf(files("proto/protos/")) + + compileOnly("io.grpc:grpc-protobuf:${grpcVersion}") + + implementation("io.grpc:grpc-okhttp:${grpcVersion}") + implementation("io.grpc:grpc-protobuf-lite:${grpcVersion}") + implementation("io.grpc:grpc-stub:${grpcVersion}") + implementation("org.slf4j:slf4j-api:2.0.12") + api("io.reactivex.rxjava2:rxjava:2.2.21") + + compileOnly("javax.annotation:javax.annotation-api:1.3.2") + + testImplementation("io.grpc:grpc-testing:${grpcVersion}") + testImplementation("junit:junit:4.12") + testImplementation("org.mockito:mockito-core:2.13.0") +} diff --git a/sdk/gradle/libs.versions.toml b/sdk/gradle/libs.versions.toml new file mode 100644 index 0000000..ab410b5 --- /dev/null +++ b/sdk/gradle/libs.versions.toml @@ -0,0 +1,9 @@ +[versions] +jreleaser-plugin = "1.19.0" +protobuf-gradle-plugin = "0.9.4" + +[libraries] + +[plugins] +jreleaser = { id = "org.jreleaser", version.ref = "jreleaser-plugin" } +protobuf = { id = "com.google.protobuf", version.ref = "protobuf-gradle-plugin" } diff --git a/sdk/mavsdk/settings.gradle b/sdk/mavsdk/settings.gradle deleted file mode 100644 index 5ef60bf..0000000 --- a/sdk/mavsdk/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'mavsdk' diff --git a/sdk/mavsdk/src/test/java/io/mavsdk/MavsdkTest.java b/sdk/mavsdk/src/test/java/io/mavsdk/MavsdkTest.java deleted file mode 100644 index 9084829..0000000 --- a/sdk/mavsdk/src/test/java/io/mavsdk/MavsdkTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.mavsdk; - -import java.util.concurrent.TimeUnit; -import org.junit.Test; - -public class MavsdkTest { - - @Test - public void testStream() throws InterruptedException { - System system = new System(); - system.getTelemetry().getPosition() - .doOnNext(next -> java.lang.System.out.println(next)) - .test() - .await(5, TimeUnit.SECONDS); - } - - @Test - public void testCall() throws InterruptedException { - System system = new System(); - system.getAction().arm() - .andThen(system.getAction().takeoff()) - .delay(5, TimeUnit.SECONDS) - .andThen(system.getAction().land()) - .test() - .await(); - } - - @Test - public void testRequest() throws InterruptedException { - System system = new System(); - system.getAction().getTakeoffAltitude() - .doOnSuccess(result -> java.lang.System.out.println(result)).test().await(); - } -} diff --git a/sdk/proto b/sdk/proto index 20aa335..e053eca 160000 --- a/sdk/proto +++ b/sdk/proto @@ -1 +1 @@ -Subproject commit 20aa335ef85b50d844ffb3d3a53420c6fbcc289b +Subproject commit e053ecabc5b825bb9c831f3f31ab24ff727ce1e6 diff --git a/sdk/settings.gradle b/sdk/settings.gradle deleted file mode 100644 index f47d1fa..0000000 --- a/sdk/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include 'mavsdk' diff --git a/sdk/settings.gradle.kts b/sdk/settings.gradle.kts new file mode 100644 index 0000000..7ec28bd --- /dev/null +++ b/sdk/settings.gradle.kts @@ -0,0 +1,19 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + + +rootProject.name = "mavsdk" + diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/MavsdkEventQueue.java b/sdk/src/main/java/io/mavsdk/MavsdkEventQueue.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/MavsdkEventQueue.java rename to sdk/src/main/java/io/mavsdk/MavsdkEventQueue.java diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/MavsdkException.java b/sdk/src/main/java/io/mavsdk/MavsdkException.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/MavsdkException.java rename to sdk/src/main/java/io/mavsdk/MavsdkException.java diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/Plugin.java b/sdk/src/main/java/io/mavsdk/Plugin.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/Plugin.java rename to sdk/src/main/java/io/mavsdk/Plugin.java diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/System.java b/sdk/src/main/java/io/mavsdk/System.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/System.java rename to sdk/src/main/java/io/mavsdk/System.java diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/internal/LazyPlugin.java b/sdk/src/main/java/io/mavsdk/internal/LazyPlugin.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/internal/LazyPlugin.java rename to sdk/src/main/java/io/mavsdk/internal/LazyPlugin.java diff --git a/sdk/mavsdk/src/main/java/io/mavsdk/internal/Provider.java b/sdk/src/main/java/io/mavsdk/internal/Provider.java similarity index 100% rename from sdk/mavsdk/src/main/java/io/mavsdk/internal/Provider.java rename to sdk/src/main/java/io/mavsdk/internal/Provider.java