diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 95599fd8d..f2f625c66 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -14,15 +14,15 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Gradle Wrapper Validation
- uses: gradle/actions/wrapper-validation@v3
+ uses: gradle/actions/wrapper-validation@v4
- - name: Set up JDK 11
- uses: actions/setup-java@v3
+ - name: Set up JDK 21
+ uses: actions/setup-java@v4
with:
- java-version: '11'
+ java-version: '21'
distribution: 'zulu'
- name: Set up Python
@@ -83,16 +83,16 @@ jobs:
needs: [build]
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Gradle Wrapper Validation
- uses: gradle/actions/wrapper-validation@v3
+ uses: gradle/actions/wrapper-validation@v4
- - name: Install JDK 11
- uses: actions/setup-java@v3
+ - name: Install JDK 21
+ uses: actions/setup-java@v4
with:
distribution: 'zulu'
- java-version: 11
+ java-version: 21
- name: Set up Python
uses: actions/setup-python@v3
@@ -107,7 +107,7 @@ jobs:
run: ./update-submodules
- name: Upload Artifacts
- run: ./gradlew publishAllPublicationsToMavenCentralRepository --no-daemon --no-parallel --no-configuration-cache --stacktrace
+ run: ./gradlew publishToMavenCentral --no-daemon --no-parallel --no-configuration-cache --stacktrace
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }}
@@ -119,7 +119,7 @@ jobs:
echo "VERSION_NAME=$(cat gradle.properties | grep -w "VERSION_NAME" | cut -d'=' -f2)" >> $GITHUB_ENV
- name: Publish Release to Maven Central
- run: ./gradlew closeAndReleaseRepository --no-daemon --no-parallel
+ run: ./gradlew publishAndReleaseToMavenCentral --no-daemon --no-parallel
if: "!endsWith(env.VERSION_NAME, '-SNAPSHOT')"
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
diff --git a/README.md b/README.md
index 500750209..906f7167e 100644
--- a/README.md
+++ b/README.md
@@ -284,7 +284,7 @@ If you leverage jettifier and see the following errors then please add `android.
Failed to transform jackson-core-2.15.0.jar (com.fasterxml.jackson.core:jackson-core:2.15.0) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api}.
```
-The Android code in this SDK is written in Kotlin (as of 5.4.x) and Kotlin is now a runtime dependency. If you do not already have Kotlin in your project, you will need to add `implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21")` to your dependencies block in order to avoid a runtime exception.
+The Android code in this SDK is written in Kotlin (as of 5.4.x) and Kotlin is now a runtime dependency. If you do not already have Kotlin in your project, you will need to add `implementation("org.jetbrains.kotlin:kotlin-stdlib:2.4.0")` to your dependencies block in order to avoid a runtime exception.
If the [official Dropbox App](https://play.google.com/store/apps/details?id=com.dropbox.android) is installed, it will attempt to use it to do authorization. If it is not, a web authentication flow is launched in-browser.
@@ -370,7 +370,7 @@ dependencies {
The JAR's manifest has the following line:
```
-Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=11))"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
```
Most OSGi containers should provide this capability. Unfortunately, some OSGi containers don't do this correctly and will reject the bundle JAR in the OSGi subsystem context.
@@ -440,4 +440,3 @@ OkHttpClient httpClient = OkHttpRequestor.defaultOkHttpClient().clone()
.setCertificatePinner(myCertificatePinner)
.build();
```
-
diff --git a/android/build.gradle b/android/build.gradle
index 72777ebf5..b3cb3750f 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,8 +1,10 @@
-import com.vanniktech.maven.publish.SonatypeHost
+import com.vanniktech.maven.publish.AndroidSingleVariantLibrary
+import kotlinx.validation.KotlinApiBuildTask
+import kotlinx.validation.KotlinApiCompareTask
+import kotlinx.validation.SyncFile
plugins {
id 'com.android.library'
- id 'org.jetbrains.kotlin.android'
id "org.jetbrains.kotlinx.binary-compatibility-validator"
id "com.vanniktech.maven.publish"
id "com.github.ben-manes.versions"
@@ -11,14 +13,26 @@ plugins {
android {
namespace = "com.dropbox.core.sdk.android"
- compileSdk dropboxJavaSdkLibs.versions.android.compile.sdk.get().toInteger()
+ compileSdk = dropboxJavaSdkLibs.versions.android.compile.sdk.get().toInteger()
+
+ buildFeatures {
+ buildConfig = true
+ }
+
defaultConfig {
- minSdk dropboxJavaSdkLibs.versions.android.min.sdk.get().toInteger()
- targetSdk dropboxJavaSdkLibs.versions.android.target.sdk.get().toInteger()
+ minSdk = dropboxJavaSdkLibs.versions.android.min.sdk.get().toInteger()
+ targetSdk = dropboxJavaSdkLibs.versions.android.target.sdk.get().toInteger()
}
- kotlinOptions {
- freeCompilerArgs += '-Xexplicit-api=strict'
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+kotlin {
+ compilerOptions {
+ freeCompilerArgs.add('-Xexplicit-api=strict')
}
}
@@ -26,11 +40,56 @@ dependencies {
api(project(path: ":core", configuration: "withoutOsgi"))
}
+configurations {
+ androidApiValidationRuntime
+}
+
+dependencies {
+ androidApiValidationRuntime("org.jetbrains.kotlinx:binary-compatibility-validator:${dropboxJavaSdkLibs.versions.binary.compatibility.validator.get()}")
+ androidApiValidationRuntime(dropboxJavaSdkLibs.kotlin.stdlib)
+ androidApiValidationRuntime("org.jetbrains.kotlin:kotlin-metadata-jvm:${dropboxJavaSdkLibs.versions.kotlin.asProvider().get()}")
+}
+
+def androidApiBuild = tasks.register("apiBuild", KotlinApiBuildTask) {
+ description = "Builds Kotlin API for release variant of ${project.name}."
+
+ def bundleReleaseClassesJar = tasks.named("bundleLibCompileToJarRelease")
+ dependsOn(bundleReleaseClassesJar)
+ inputJar.set(bundleReleaseClassesJar.flatMap { it.output })
+ inputDependencies.from(configurations.named("releaseCompileClasspath"))
+ ignoredClasses.add("com.dropbox.core.sdk.android.R")
+ outputApiFile.set(layout.buildDirectory.file("api/${project.name}.api"))
+ runtimeClasspath.from(configurations.named("androidApiValidationRuntime"))
+}
+
+tasks.register("apiCheck", KotlinApiCompareTask) {
+ group = "verification"
+ description = "Checks signatures of public API against the golden value in API folder for ${project.name}."
+
+ dependsOn(androidApiBuild)
+ projectApiFile.set(layout.projectDirectory.file("api/${project.name}.api"))
+ generatedApiFile.set(androidApiBuild.flatMap { it.outputApiFile })
+}
+
+tasks.register("apiDump", SyncFile) {
+ group = "verification"
+ description = "Syncs the API file for ${project.name}."
+
+ dependsOn(androidApiBuild)
+ from.set(androidApiBuild.flatMap { it.outputApiFile })
+ to.set(layout.projectDirectory.file("api/${project.name}.api"))
+}
+
+tasks.named("check") {
+ dependsOn(tasks.named("apiCheck"))
+}
+
dependencyGuard {
configuration("releaseRuntimeClasspath")
}
mavenPublishing {
- publishToMavenCentral(SonatypeHost.S01)
+ configure(new AndroidSingleVariantLibrary("release", true, true))
+ publishToMavenCentral()
signAllPublications()
-}
\ No newline at end of file
+}
diff --git a/android/dependencies/releaseRuntimeClasspath.txt b/android/dependencies/releaseRuntimeClasspath.txt
index a2cb92815..3714582e4 100644
--- a/android/dependencies/releaseRuntimeClasspath.txt
+++ b/android/dependencies/releaseRuntimeClasspath.txt
@@ -2,8 +2,5 @@ ch.randelshofer:fastdoubleparser:0.8.0
com.fasterxml.jackson.core:jackson-core:2.15.0
com.fasterxml.jackson:jackson-bom:2.15.0
com.google.code.findbugs:jsr305:3.0.2
-org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib:1.6.21
+org.jetbrains.kotlin:kotlin-stdlib:2.4.0
org.jetbrains:annotations:13.0
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 7894a720e..972508b8a 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,9 +1,8 @@
-
+
-
\ No newline at end of file
+
diff --git a/build.gradle b/build.gradle
index 9fb6f6279..fd7f49fa5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,7 +16,7 @@ plugins {
alias(dropboxJavaSdkLibs.plugins.dependency.guard)
alias(dropboxJavaSdkLibs.plugins.maven.publish.plugin) apply false
alias(dropboxJavaSdkLibs.plugins.gradle.version.plugin) apply false
- alias(dropboxJavaSdkLibs.plugins.blind.pirate.osgi) apply false
+ alias(dropboxJavaSdkLibs.plugins.bnd.builder) apply false
alias(dropboxJavaSdkLibs.plugins.binary.compatibility.validator) apply false
}
diff --git a/core/build.gradle b/core/build.gradle
index cfee3c2e7..06cf5e7a5 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -1,11 +1,10 @@
import com.dropbox.stone.java.StoneTask
import com.dropbox.stone.java.model.ClientSpec
import com.dropbox.stone.java.model.StoneConfig
-import com.vanniktech.maven.publish.SonatypeHost
plugins {
id 'java-library'
- id "com.github.blindpirate.osgi"
+ id "biz.aQute.bnd.builder"
id "org.jetbrains.kotlin.jvm"
id "com.vanniktech.maven.publish"
id "com.github.ben-manes.versions"
@@ -18,8 +17,10 @@ dependencyGuard {
configuration("runtimeClasspath")
}
-sourceCompatibility = JavaVersion.VERSION_1_8
-targetCompatibility = JavaVersion.VERSION_1_8
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
ext {
mavenName = 'Official Dropbox Java SDK'
@@ -28,6 +29,27 @@ ext {
authInfoPropertyName = 'com.dropbox.test.authInfoFile'
}
+def toOsgiBundleVersion(Object versionValue) {
+ String version = versionValue.toString()
+ if (version == Project.DEFAULT_VERSION) {
+ return "0.0.0.${Project.DEFAULT_VERSION}"
+ }
+
+ def matcher = version =~ /^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:[-.]?(.+))?$/
+ if (!matcher.matches()) {
+ return "0.0.0.${version.replaceAll(/[^A-Za-z0-9_-]/, '_')}"
+ }
+
+ String major = matcher[0][1]
+ String minor = matcher[0][2] ?: "0"
+ String micro = matcher[0][3] ?: "0"
+ String qualifier = matcher[0][4]
+ ? ".${matcher[0][4].replaceAll(/[^A-Za-z0-9_-]/, '_')}"
+ : ""
+
+ return "${major}.${minor}.${micro}${qualifier}"
+}
+
tasks.register('versionWriterTask') {
String versionName
if (project.hasProperty("VERSION_NAME")) {
@@ -82,6 +104,10 @@ configurations {
withoutOsgi.extendsFrom api
}
+tasks.withType(JavaCompile).configureEach {
+ options.release.set(8)
+}
+
tasks.named("compileJava", JavaCompile) {
options.compilerArgs << '-Xlint:all'
options.warnings = true
@@ -97,8 +123,8 @@ tasks.named("test", Test) {
useTestNG()
// TestNG specific options
- options.parallel 'methods'
- options.threadCount 4
+ options.parallel = 'methods'
+ options.threadCount = 4
// exclude integration tests
exclude '**/IT*.class'
@@ -150,7 +176,7 @@ tasks.register('integrationTest', Test) {
reports {
html {
- destination = file("${buildDir}/reports/integration-tests")
+ outputLocation = layout.buildDirectory.dir("reports/integration-tests")
}
}
@@ -178,8 +204,8 @@ tasks.named("javadoc", Javadoc) {
versionName = ""
}
- title "${project.mavenName} ${versionName} API"
- failOnError true
+ title = "${project.mavenName} ${versionName} API"
+ failOnError = true
// JDK 8's javadoc has an on-by-default lint called "missing", which requires that everything
// be documented. Disable this lint because we intentionally don't document some things.
@@ -193,25 +219,29 @@ tasks.named("javadoc", Javadoc) {
}
tasks.named("jar", Jar) {
- // OsgiManifest since we import 'osgi' plugin
- manifest {
- name project.name
- description project.description
- license 'http://opensource.org/licenses/MIT'
- instruction 'Import-Package',
- 'android.*;resolution:=optional',
- 'com.google.appengine.*;resolution:=optional',
- 'com.squareup.okhttp;resolution:=optional',
- 'okhttp3;resolution:=optional',
- 'okio;resolution:=optional',
- 'kotlin.*;resolution:=optional',
- '*'
-
- def noeeProp = 'osgi.bnd.noee'
- def noee = providers.gradleProperty(noeeProp).forUseAtConfigurationTime().getOrElse(
- providers.systemProperty(noeeProp).forUseAtConfigurationTime().getOrElse('false')
- )
- instruction '-noee', noee
+ bundle {
+ def bndProperties = [
+ 'Bundle-SymbolicName': "${rootProject.name}.${project.name}",
+ 'Bundle-Version' : toOsgiBundleVersion(project.version),
+ 'Bundle-Name' : project.name,
+ 'Bundle-License' : 'http://opensource.org/licenses/MIT',
+ 'Export-Package' : 'com.dropbox.core,com.dropbox.core.*',
+ 'Import-Package' : [
+ 'com.google.appengine.*;resolution:=optional',
+ 'com.squareup.okhttp;resolution:=optional',
+ 'okhttp3;resolution:=optional',
+ 'okio;resolution:=optional',
+ '*',
+ ].join(','),
+ '-noee' : providers.gradleProperty('osgi.bnd.noee')
+ .orElse(providers.systemProperty('osgi.bnd.noee'))
+ .orElse('false')
+ .get()
+ ]
+ if (project.description != null) {
+ bndProperties['Bundle-Description'] = project.description
+ }
+ bnd(bndProperties)
}
}
@@ -234,11 +264,13 @@ tasks.register('javadocJar', Jar) {
}
artifacts {
- archives sourcesJar
- archives javadocJar
withoutOsgi jarWithoutOsgi
}
+tasks.named("assemble") {
+ dependsOn(tasks.named("sourcesJar"), tasks.named("javadocJar"))
+}
+
// reject dependencyUpdates candidates with alpha or beta in their names:
tasks.named("dependencyUpdates") {
resolutionStrategy {
@@ -294,7 +326,6 @@ tasks.named("generateStone", StoneTask) {
])
outputDir.set(project.layout.buildDirectory.dir("generated_stone_source/main/src"))
- sourceSets { main { java.srcDir(outputDir) } }
}
tasks.named("generateTestStone", StoneTask) {
@@ -315,10 +346,9 @@ tasks.named("generateTestStone", StoneTask) {
),
])
outputDir.set(project.layout.buildDirectory.dir("generated_stone_source/test/src"))
- sourceSets { test { java.srcDir(outputDir) } }
}
mavenPublishing {
- publishToMavenCentral(SonatypeHost.S01)
+ publishToMavenCentral()
signAllPublications()
}
diff --git a/core/src/test/java/com/dropbox/core/v2/files/TagObjectIT.java b/core/src/test/java/com/dropbox/core/v2/files/TagObjectIT.java
index a9a03605e..af80389d6 100644
--- a/core/src/test/java/com/dropbox/core/v2/files/TagObjectIT.java
+++ b/core/src/test/java/com/dropbox/core/v2/files/TagObjectIT.java
@@ -6,6 +6,7 @@
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
+import java.util.Collections;
import java.util.List;
import java.util.Random;
@@ -18,7 +19,7 @@
public class TagObjectIT {
private List getTagsForPath(DbxClientV2 client, String dropboxPath) throws DbxException {
- List pathToTags = client.files().tagsGet(List.of(dropboxPath)).getPathsToTags();
+ List pathToTags = client.files().tagsGet(Collections.singletonList(dropboxPath)).getPathsToTags();
assertEquals(1, pathToTags.size()); // There is only one path (the one we asked for)
PathToTags pathToTag = pathToTags.get(0);
assertEquals(dropboxPath, pathToTag.getPath()); // This is the path we are looking for
diff --git a/core/src/test/java/com/dropbox/core/v2/teamlog/GetTeamEventsResultTest.java b/core/src/test/java/com/dropbox/core/v2/teamlog/GetTeamEventsResultTest.java
index 18871bc63..c1a7b4204 100644
--- a/core/src/test/java/com/dropbox/core/v2/teamlog/GetTeamEventsResultTest.java
+++ b/core/src/test/java/com/dropbox/core/v2/teamlog/GetTeamEventsResultTest.java
@@ -6,7 +6,6 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.nio.file.Path;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
@@ -68,6 +67,6 @@ private GetTeamEventsResult readGetTeamEventsResultFromFile(String filename) thr
private String readJsonFromFile(String filename) throws IOException {
File file = new File("src/test/java/com/dropbox/core/v2/teamlog/" + filename);
System.out.println(file.getCanonicalPath());
- return Files.readString(Path.of(file.toURI()), StandardCharsets.US_ASCII);
+ return new String(Files.readAllBytes(file.toPath()), StandardCharsets.US_ASCII);
}
-}
\ No newline at end of file
+}
diff --git a/dependencies/classpath.txt b/dependencies/classpath.txt
index 43ea88ee8..8447090e3 100644
--- a/dependencies/classpath.txt
+++ b/dependencies/classpath.txt
@@ -1,168 +1,149 @@
-androidx.databinding:databinding-common:7.4.2
-androidx.databinding:databinding-compiler-common:7.4.2
-biz.aQute.bnd:biz.aQute.bndlib:5.2.0
-com.android.databinding:baseLibrary:7.4.2
-com.android.tools.analytics-library:crash:30.4.2
-com.android.tools.analytics-library:protos:30.4.2
-com.android.tools.analytics-library:shared:30.4.2
-com.android.tools.analytics-library:tracker:30.4.2
+androidx.databinding:databinding-common:9.2.1
+androidx.databinding:databinding-compiler-common:9.2.1
+biz.aQute.bnd.builder:biz.aQute.bnd.builder.gradle.plugin:7.3.0
+biz.aQute.bnd:biz.aQute.bnd.embedded-repo:7.3.0
+biz.aQute.bnd:biz.aQute.bnd.gradle:7.3.0
+biz.aQute.bnd:biz.aQute.bnd.util:7.3.0
+biz.aQute.bnd:biz.aQute.bndlib:7.3.0
+biz.aQute.bnd:biz.aQute.repository:7.3.0
+biz.aQute.bnd:biz.aQute.resolve:7.3.0
+com.android.databinding:baseLibrary:9.2.1
+com.android.tools.analytics-library:crash:32.2.1
+com.android.tools.analytics-library:protos:32.2.1
+com.android.tools.analytics-library:shared:32.2.1
+com.android.tools.analytics-library:tracker:32.2.1
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10
-com.android.tools.build:aapt2-proto:7.4.2-8841542
-com.android.tools.build:aaptcompiler:7.4.2
-com.android.tools.build:apksig:7.4.2
-com.android.tools.build:apkzlib:7.4.2
-com.android.tools.build:builder-model:7.4.2
-com.android.tools.build:builder-test-api:7.4.2
-com.android.tools.build:builder:7.4.2
-com.android.tools.build:bundletool:1.11.4
-com.android.tools.build:gradle-api:7.4.2
-com.android.tools.build:gradle-settings-api:7.4.2
-com.android.tools.build:gradle:7.4.2
-com.android.tools.build:manifest-merger:30.4.2
-com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api
-com.android.tools.ddms:ddmlib:30.4.2
-com.android.tools.layoutlib:layoutlib-api:30.4.2
-com.android.tools.lint:lint-model:30.4.2
-com.android.tools.lint:lint-typedef-remover:30.4.2
-com.android.tools.utp:android-device-provider-ddmlib-proto:30.4.2
-com.android.tools.utp:android-device-provider-gradle-proto:30.4.2
-com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.4.2
-com.android.tools.utp:android-test-plugin-host-coverage-proto:30.4.2
-com.android.tools.utp:android-test-plugin-host-retention-proto:30.4.2
-com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.4.2
-com.android.tools:annotations:30.4.2
-com.android.tools:common:30.4.2
-com.android.tools:dvlib:30.4.2
-com.android.tools:repository:30.4.2
-com.android.tools:sdk-common:30.4.2
-com.android.tools:sdklib:30.4.2
-com.android:signflinger:7.4.2
-com.android:zipflinger:7.4.2
-com.dropbox.dependency-guard:com.dropbox.dependency-guard.gradle.plugin:0.4.3
-com.dropbox.dependency-guard:dependency-guard:0.4.3
-com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.42.0
-com.github.ben-manes:gradle-versions-plugin:0.42.0
-com.github.blindpirate.osgi:com.github.blindpirate.osgi.gradle.plugin:0.0.6
-com.github.gundy:semver4j:0.16.4
-com.google.android:annotations:4.1.1.4
-com.google.api.grpc:proto-google-common-protos:2.0.1
+com.android.tools.build:aapt2-proto:9.2.1-15009934
+com.android.tools.build:aaptcompiler:9.2.1
+com.android.tools.build:apksig:9.2.1
+com.android.tools.build:apkzlib:9.2.1
+com.android.tools.build:builder-model:9.2.1
+com.android.tools.build:builder-test-api:9.2.1
+com.android.tools.build:builder:9.2.1
+com.android.tools.build:bundletool:1.18.3
+com.android.tools.build:gradle-api:9.2.1
+com.android.tools.build:gradle-common-api:9.2.1
+com.android.tools.build:gradle-settings-api:9.2.1
+com.android.tools.build:gradle:9.2.1
+com.android.tools.build:manifest-merger:32.2.1
+com.android.tools.ddms:ddmlib:32.2.1
+com.android.tools.layoutlib:layoutlib-api:32.2.1
+com.android.tools.lint:lint-model:32.2.1
+com.android.tools.lint:lint-typedef-remover:32.2.1
+com.android.tools.utp:gradle-work-action-api:32.2.1
+com.android.tools:annotations:32.2.1
+com.android.tools:common:32.2.1
+com.android.tools:dvlib:32.2.1
+com.android.tools:repository:32.2.1
+com.android.tools:sdk-common:32.2.1
+com.android.tools:sdklib:32.2.1
+com.android:signflinger:9.2.1
+com.android:zipflinger:9.2.1
+com.dropbox.dependency-guard:com.dropbox.dependency-guard.gradle.plugin:0.5.0
+com.dropbox.dependency-guard:dependency-guard:0.5.0
+com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.54.0
+com.github.ben-manes:gradle-versions-plugin:0.54.0
com.google.auto.value:auto-value-annotations:1.6.2
com.google.code.findbugs:jsr305:3.0.2
-com.google.code.gson:gson:2.8.9
-com.google.crypto.tink:tink:1.3.0-rc2
+com.google.code.gson:gson:2.11.0
+com.google.crypto.tink:tink:1.7.0
com.google.dagger:dagger:2.28.3
-com.google.errorprone:error_prone_annotations:2.4.0
+com.google.errorprone:error_prone_annotations:2.28.0
com.google.flatbuffers:flatbuffers-java:1.12.0
-com.google.guava:failureaccess:1.0.1
-com.google.guava:guava:30.1-jre
+com.google.guava:failureaccess:1.0.2
+com.google.guava:guava:33.3.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
-com.google.j2objc:j2objc-annotations:1.3
+com.google.j2objc:j2objc-annotations:3.0.0
com.google.jimfs:jimfs:1.1
-com.google.protobuf:protobuf-java-util:3.17.2
-com.google.protobuf:protobuf-java:3.17.2
-com.google.testing.platform:core-proto:0.0.8-alpha08
-com.googlecode.java-diff-utils:diffutils:1.3.0
+com.google.protobuf:protobuf-java-util:3.25.5
+com.google.protobuf:protobuf-java:3.25.5
com.googlecode.juniversalchardet:juniversalchardet:1.0.3
-com.squareup.moshi:moshi:1.14.0
-com.squareup.okhttp3:okhttp:4.10.0
-com.squareup.okio:okio-jvm:3.0.0
-com.squareup.okio:okio:3.0.0
-com.squareup.retrofit2:converter-moshi:2.9.0
-com.squareup.retrofit2:retrofit:2.9.0
-com.squareup:javapoet:1.10.0
+com.squareup.moshi:moshi-kotlin:1.15.2
+com.squareup.moshi:moshi:1.15.2
+com.squareup.okhttp3:okhttp-jvm:5.1.0
+com.squareup.okhttp3:okhttp:5.1.0
+com.squareup.okio:okio-jvm:3.15.0
+com.squareup.okio:okio:3.15.0
+com.squareup.retrofit2:converter-moshi:3.0.0
+com.squareup.retrofit2:converter-scalars:3.0.0
+com.squareup.retrofit2:retrofit:3.0.0
+com.squareup:javapoet:1.13.0
com.squareup:javawriter:2.5.0
-com.sun.activation:javax.activation:1.2.0
com.sun.istack:istack-commons-runtime:3.0.8
com.sun.xml.fastinfoset:FastInfoset:1.2.16
-com.thoughtworks.xstream:xstream:1.4.17
-com.vanniktech.maven.publish:com.vanniktech.maven.publish.gradle.plugin:0.24.0
-com.vanniktech:gradle-maven-publish-plugin:0.24.0
-com.vanniktech:nexus:0.24.0
-commons-codec:commons-codec:1.11
-commons-io:commons-io:2.4
+com.vanniktech.maven.publish:com.vanniktech.maven.publish.gradle.plugin:0.37.0
+com.vanniktech:central-portal:0.37.0
+com.vanniktech:gradle-maven-publish-plugin:0.37.0
+commons-codec:commons-codec:1.17.1
+commons-io:commons-io:2.16.1
commons-logging:commons-logging:1.2
-de.undercouch:gradle-download-task:4.1.1
-gradle.plugin.com.github.blindpirate:gradle-legacy-osgi-plugin:0.0.6
-io.github.x-stream:mxparser:1.2.1
-io.grpc:grpc-api:1.39.0
-io.grpc:grpc-context:1.39.0
-io.grpc:grpc-core:1.39.0
-io.grpc:grpc-netty:1.39.0
-io.grpc:grpc-protobuf-lite:1.39.0
-io.grpc:grpc-protobuf:1.39.0
-io.grpc:grpc-stub:1.39.0
-io.netty:netty-buffer:4.1.52.Final
-io.netty:netty-codec-http2:4.1.52.Final
-io.netty:netty-codec-http:4.1.52.Final
-io.netty:netty-codec-socks:4.1.52.Final
-io.netty:netty-codec:4.1.52.Final
-io.netty:netty-common:4.1.52.Final
-io.netty:netty-handler-proxy:4.1.52.Final
-io.netty:netty-handler:4.1.52.Final
-io.netty:netty-resolver:4.1.52.Final
-io.netty:netty-transport:4.1.52.Final
-io.perfmark:perfmark-api:0.23.0
+io.github.java-diff-utils:java-diff-utils:4.12
jakarta.activation:jakarta.activation-api:1.2.1
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2
-javax.annotation:javax.annotation-api:1.3.2
javax.inject:javax.inject:1
net.java.dev.jna:jna-platform:5.6.0
net.java.dev.jna:jna:5.6.0
net.sf.jopt-simple:jopt-simple:4.9
net.sf.kxml:kxml2:2.3.0
-org.apache.commons:commons-compress:1.20
-org.apache.httpcomponents:httpclient:4.5.13
-org.apache.httpcomponents:httpcore:4.4.13
+org.apache.commons:commons-compress:1.27.1
+org.apache.commons:commons-lang3:3.16.0
+org.apache.httpcomponents:httpclient:4.5.14
+org.apache.httpcomponents:httpcore:4.4.16
org.apache.httpcomponents:httpmime:4.5.6
-org.bitbucket.b_c:jose4j:0.7.0
-org.bouncycastle:bcpkix-jdk15on:1.67
-org.bouncycastle:bcprov-jdk15on:1.67
-org.checkerframework:checker-qual:3.5.0
-org.codehaus.mojo:animal-sniffer-annotations:1.19
+org.bitbucket.b_c:jose4j:0.9.5
+org.bouncycastle:bcpkix-jdk18on:1.79
+org.bouncycastle:bcprov-jdk18on:1.79
+org.bouncycastle:bcutil-jdk18on:1.79
+org.checkerframework:checker-qual:3.43.0
org.glassfish.jaxb:jaxb-runtime:2.3.2
org.glassfish.jaxb:txw2:2.3.2
org.jdom:jdom2:2.0.6
-org.jetbrains.intellij.deps:trove4j:1.0.20200330
-org.jetbrains.kotlin:kotlin-android-extensions:1.6.21
-org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.6.21
-org.jetbrains.kotlin:kotlin-build-common:1.6.21
-org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21
-org.jetbrains.kotlin:kotlin-compiler-runner:1.6.21
-org.jetbrains.kotlin:kotlin-daemon-client:1.6.21
-org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.21
-org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.6.21
-org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.6.21
-org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21
-org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.6.21
-org.jetbrains.kotlin:kotlin-native-utils:1.6.21
-org.jetbrains.kotlin:kotlin-project-model:1.6.21
-org.jetbrains.kotlin:kotlin-reflect:1.7.10
-org.jetbrains.kotlin:kotlin-scripting-common:1.6.21
-org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.21
-org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.21
-org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0
-org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0
-org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
-org.jetbrains.kotlin:kotlin-stdlib:1.8.0
-org.jetbrains.kotlin:kotlin-tooling-metadata:1.6.21
-org.jetbrains.kotlin:kotlin-util-io:1.6.21
-org.jetbrains.kotlin:kotlin-util-klib:1.6.21
-org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.11.1
-org.jetbrains.kotlinx:binary-compatibility-validator:0.11.1
-org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0
-org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0
-org.jetbrains:annotations:13.0
-org.json:json:20180813
+org.jetbrains.kotlin:fus-statistics-gradle-plugin:2.4.0
+org.jetbrains.kotlin:kotlin-bom:2.0.21
+org.jetbrains.kotlin:kotlin-build-statistics:2.4.0
+org.jetbrains.kotlin:kotlin-build-tools-api:2.4.0
+org.jetbrains.kotlin:kotlin-compiler-runner:2.4.0
+org.jetbrains.kotlin:kotlin-daemon-client:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugin-api:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugin-idea:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.0
+org.jetbrains.kotlin:kotlin-gradle-plugins-bom:2.4.0
+org.jetbrains.kotlin:kotlin-klib-commonizer-api:2.4.0
+org.jetbrains.kotlin:kotlin-native-utils:2.4.0
+org.jetbrains.kotlin:kotlin-reflect:2.2.10
+org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.10
+org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.10
+org.jetbrains.kotlin:kotlin-stdlib:2.2.10
+org.jetbrains.kotlin:kotlin-tooling-core:2.4.0
+org.jetbrains.kotlin:kotlin-util-io:2.4.0
+org.jetbrains.kotlin:kotlin-util-klib-metadata:2.4.0
+org.jetbrains.kotlin:kotlin-util-klib:2.4.0
+org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.18.1
+org.jetbrains.kotlinx:binary-compatibility-validator:0.18.1
+org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0
+org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0
+org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0
+org.jetbrains:annotations:23.0.0
org.jvnet.staxex:stax-ex:1.8.1
-org.ow2.asm:asm-analysis:9.2
-org.ow2.asm:asm-commons:9.2
-org.ow2.asm:asm-tree:9.2
-org.ow2.asm:asm-util:9.2
-org.ow2.asm:asm:9.2
-org.slf4j:slf4j-api:1.7.30
-org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2
-xerces:xercesImpl:2.12.0
-xml-apis:xml-apis:1.4.01
-xmlpull:xmlpull:1.1.3.1
+org.osgi:org.osgi.dto:1.0.0
+org.osgi:org.osgi.framework:1.8.0
+org.osgi:org.osgi.resource:1.0.0
+org.osgi:org.osgi.service.coordinator:1.0.2
+org.osgi:org.osgi.service.log:1.3.0
+org.osgi:org.osgi.service.repository:1.1.0
+org.osgi:org.osgi.service.resolver:1.1.1
+org.osgi:org.osgi.service.serviceloader:1.0.0
+org.osgi:org.osgi.util.function:1.2.0
+org.osgi:org.osgi.util.promise:1.3.0
+org.osgi:org.osgi.util.tracker:1.5.4
+org.osgi:osgi.annotation:8.1.0
+org.ow2.asm:asm-analysis:9.9
+org.ow2.asm:asm-commons:9.9
+org.ow2.asm:asm-tree:9.9
+org.ow2.asm:asm-util:9.9
+org.ow2.asm:asm:9.9
+org.slf4j:slf4j-api:2.0.18
+org.tensorflow:tensorflow-lite-metadata:0.2.0
diff --git a/examples/android/build.gradle b/examples/android/build.gradle
index 1ceee7dbb..55e2d7e78 100644
--- a/examples/android/build.gradle
+++ b/examples/android/build.gradle
@@ -1,19 +1,22 @@
plugins {
id 'com.android.application'
- id 'org.jetbrains.kotlin.android'
alias(dropboxJavaSdkLibs.plugins.dependency.guard)
}
android {
- compileSdkVersion dropboxJavaSdkLibs.versions.android.compile.sdk.get().toInteger()
- buildToolsVersion "33.0.1"
+ namespace = "com.dropbox.core.examples.android"
+ compileSdk = dropboxJavaSdkLibs.versions.android.compile.sdk.get().toInteger()
+
+ buildFeatures {
+ buildConfig = true
+ }
defaultConfig {
- applicationId "com.dropbox.core.examples.android"
- minSdkVersion dropboxJavaSdkLibs.versions.android.min.sdk.get()
- targetSdkVersion dropboxJavaSdkLibs.versions.android.target.sdk.get()
- versionCode 1
- versionName "1.0"
+ applicationId = "com.dropbox.core.examples.android"
+ minSdk = dropboxJavaSdkLibs.versions.android.min.sdk.get().toInteger()
+ targetSdk = dropboxJavaSdkLibs.versions.android.target.sdk.get().toInteger()
+ versionCode = 1
+ versionName = "1.0"
Properties localProperties = getLocalProperties()
String dropboxKey = localProperties['DROPBOX_APP_KEY']
@@ -27,34 +30,35 @@ android {
buildTypes {
release {
- minifyEnabled true
- shrinkResources true
+ minifyEnabled = true
+ shrinkResources = true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
- minifyEnabled false
- shrinkResources false
+ minifyEnabled = false
+ shrinkResources = false
}
}
- packagingOptions {
- exclude 'META-INF/LICENSE'
- exclude 'META-INF/LICENSE.txt'
- exclude 'META-INF/NOTICE'
- exclude 'META-INF/NOTICE.txt'
+ packaging {
+ resources {
+ excludes += [
+ 'META-INF/LICENSE',
+ 'META-INF/LICENSE.txt',
+ 'META-INF/NOTICE',
+ 'META-INF/NOTICE.txt'
+ ]
+ }
}
- lintOptions {
- disable 'InvalidPackage'
- abortOnError false
+ lint {
+ disable += 'InvalidPackage'
+ abortOnError = false
}
- kotlinOptions {
- jvmTarget = '1.8'
- }
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
}
}
diff --git a/examples/android/dependencies/releaseRuntimeClasspath.txt b/examples/android/dependencies/releaseRuntimeClasspath.txt
index 16f3912ea..7fca3d431 100644
--- a/examples/android/dependencies/releaseRuntimeClasspath.txt
+++ b/examples/android/dependencies/releaseRuntimeClasspath.txt
@@ -58,10 +58,10 @@ com.google.code.findbugs:jsr305:3.0.2
com.google.guava:listenablefuture:1.0
com.squareup.okhttp3:okhttp:4.0.0
com.squareup.okio:okio:2.2.2
-org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21
-org.jetbrains.kotlin:kotlin-stdlib:1.6.21
+org.jetbrains.kotlin:kotlin-stdlib-common:2.4.0
+org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0
+org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
+org.jetbrains.kotlin:kotlin-stdlib:2.4.0
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.4
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4
diff --git a/examples/android/src/main/AndroidManifest.xml b/examples/android/src/main/AndroidManifest.xml
index fb97c7de1..de457641d 100644
--- a/examples/android/src/main/AndroidManifest.xml
+++ b/examples/android/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
-
+
diff --git a/examples/examples/build.gradle b/examples/examples/build.gradle
index 89b8a115c..c8807e09e 100644
--- a/examples/examples/build.gradle
+++ b/examples/examples/build.gradle
@@ -1,6 +1,6 @@
plugins {
id("java")
- id("kotlin")
+ id("org.jetbrains.kotlin.jvm")
}
description = 'Consolidated Examples'
@@ -10,6 +10,16 @@ java {
targetCompatibility = JavaVersion.VERSION_1_8
}
+kotlin {
+ compilerOptions {
+ jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.release.set(8)
+}
+
dependencies {
implementation(project(":core"))
implementation(dropboxJavaSdkLibs.apache.commons.lang)
diff --git a/examples/java/build.gradle b/examples/java/build.gradle
index d45027021..b56f44fc1 100644
--- a/examples/java/build.gradle
+++ b/examples/java/build.gradle
@@ -15,6 +15,10 @@ java {
targetCompatibility = JavaVersion.VERSION_1_8
}
+tasks.withType(JavaCompile).configureEach {
+ options.release.set(8)
+}
+
dependencies {
implementation(project(":core"))
diff --git a/gradle.properties b/gradle.properties
index 6a42913ce..c5ec64f2d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -16,7 +16,7 @@ POM_DEVELOPER_NAME = Dropbox API Team
POM_DEVELOPER_URL = https://github.com/dropbox/
POM_DEVELOPER_EMAIL = api-support@dropbox.com
-org.gradle.unsafe.configuration-cache=true
+org.gradle.configuration-cache=true
org.gradle.caching=true
# Use AndroidX
diff --git a/gradle/dropboxJavaSdkLibs.versions.toml b/gradle/dropboxJavaSdkLibs.versions.toml
index e98935612..9b8c77bcc 100644
--- a/gradle/dropboxJavaSdkLibs.versions.toml
+++ b/gradle/dropboxJavaSdkLibs.versions.toml
@@ -1,13 +1,13 @@
[versions]
-android-compile-sdk = "33"
-android-gradle-plugin = "7.4.2"
+android-compile-sdk = "36"
+android-gradle-plugin = "9.2.1"
android-min-sdk = "26"
android-target-sdk = "33"
androidx-activity = "1.5.0"
-binary-compatibility-validator = "0.11.1"
-dependency-guard = "0.4.3"
+binary-compatibility-validator = "0.18.1"
+dependency-guard = "0.5.0"
junit-jupiter = "5.8.2"
-kotlin = "1.6.21"
+kotlin = "2.4.0"
kotlin-coroutines = "1.6.4"
[libraries]
@@ -23,7 +23,7 @@ androidx-recyclerview = 'androidx.recyclerview:recyclerview:1.2.1'
apache-commons-lang = "org.apache.commons:commons-lang3:3.4"
appengine-api = 'com.google.appengine:appengine-api-1.0-sdk:1.9.38'
glide = 'com.github.bumptech.glide:glide:4.12.0'
-guardsquare-proguard-gradle = 'com.guardsquare:proguard-gradle:7.3.1'
+guardsquare-proguard-gradle = 'com.guardsquare:proguard-gradle:7.9.1'
jackson-core = 'com.fasterxml.jackson.core:jackson-core:2.15.0'
jackson-databind = 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
jetty-server = "org.eclipse.jetty:jetty-server:11.0.15"
@@ -56,8 +56,8 @@ truth = "com.google.truth:truth:1.1.2"
[plugins]
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
-blind-pirate-osgi = "com.github.blindpirate.osgi:0.0.6"
+bnd-builder = "biz.aQute.bnd.builder:7.3.0"
dependency-guard = { id = "com.dropbox.dependency-guard", version.ref = "dependency-guard" }
-gradle-version-plugin = "com.github.ben-manes.versions:0.42.0"
+gradle-version-plugin = "com.github.ben-manes.versions:0.54.0"
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
-maven-publish-plugin = "com.vanniktech.maven.publish:0.24.0"
\ No newline at end of file
+maven-publish-plugin = "com.vanniktech.maven.publish:0.37.0"
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index afba10928..b1b8ef56b 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 4e86b9270..eb84db68d 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip
networkTimeout=10000
+retries=0
+retryBackOffMs=500
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 65dcd68d6..249efbb03 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -15,10 +15,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
-# Gradle start up script for POSIX generated by Gradle.
+# gradlew start up script for POSIX generated by Gradle.
#
# Important for running:
#
@@ -27,7 +29,7 @@
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
-# ksh Gradle
+# ksh gradlew
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -83,10 +85,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -133,10 +132,13 @@ location of your Java installation."
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
@@ -144,7 +146,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +154,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -169,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -197,16 +198,19 @@ if "$cygwin" || "$msys" ; then
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 6689b85be..8508ef684 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,16 +13,18 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
-@rem Gradle startup script for Windows
+@rem gradlew startup script for Windows
@rem
@rem ##########################################################################
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
+@rem Set local scope for the variables, and ensure extensions are enabled
+setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@@ -43,13 +45,13 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
-goto fail
+"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
@@ -57,36 +59,24 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
-goto fail
+"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
+@rem Execute gradlew
+@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
+@rem which allows us to clear the local environment before executing the java command
+endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
-:omega
+:exitWithErrorLevel
+@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
+"%COMSPEC%" /c exit %ERRORLEVEL%
diff --git a/proguard/build.gradle b/proguard/build.gradle
index 5bf4a5552..82c7654d7 100644
--- a/proguard/build.gradle
+++ b/proguard/build.gradle
@@ -2,9 +2,19 @@ apply plugin: 'java'
description = 'ProGuard minified SDK test suite for ProGuard compatibility tests.'
group = 'com.dropbox.core.test'
-archivesBaseName = 'dropbox-proguard-test'
-sourceCompatibility = JavaVersion.VERSION_1_8
-targetCompatibility = JavaVersion.VERSION_1_8
+
+base {
+ archivesName = 'dropbox-proguard-test'
+}
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.release.set(8)
+}
ext {
authInfoPropertyName = 'com.dropbox.test.authInfoFile'
@@ -39,32 +49,16 @@ tasks.named("compileJava", JavaCompile).configure {
options.encoding = 'utf-8'
}
-// copied from rootProject's build.gradle. We avoid using subprojects due to Android Studio bug and
-// dbapp-android integration.
-def getAuthInfoFile() {
- if (!project.hasProperty(authInfoPropertyName)) {
- throw new GradleException('' +
- "These tests require the \"${authInfoPropertyName}\" " +
- "project property be set to point to an authorization JSON file " +
- "(e.g. ./gradlew proguardTest -P${authInfoPropertyName}=auth.json)."
- )
- }
-
- def authInfoFile = file(project.property(authInfoPropertyName))
- if (!authInfoFile.exists()) {
- throw new GradleException('' +
- "The test auth info file does not exist: \"${authInfoFile.absolutePath}\". " +
- "Please ensure the \"${authInfoPropertyName}\" project property is set to point to " +
- "the correct authorization JSON file."
- )
- }
- return authInfoFile
+def projectDirPath = layout.projectDirectory.asFile.toPath()
+def authInfoFileProvider = providers.gradleProperty(authInfoPropertyName).map { authInfoFilePath ->
+ projectDirPath.resolve(authInfoFilePath).normalize().toFile()
}
-
tasks.register('proguard', proguard.gradle.ProGuardTask) {
- def buildDir = project.buildDir
- def archivesBaseName = project.archivesBaseName
+ def mainRuntimeClasspath = sourceSets.main.runtimeClasspath
+ def mainCompileClasspath = sourceSets.main.compileClasspath
+ def buildDir = layout.buildDirectory.get().asFile
+ def archivesBaseName = base.archivesName.get()
def version = project.version
ext {
configDir = file("src/main/resources/proguard/")
@@ -75,7 +69,7 @@ tasks.register('proguard', proguard.gradle.ProGuardTask) {
inputs.dir configDir
inputs.file configFile
- injars sourceSets.main.runtimeClasspath, filter: '!META-INF/*'
+ injars mainRuntimeClasspath, filter: '!META-INF/*'
if (System.getProperty('java.version').startsWith('1.')) {
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
} else {
@@ -85,8 +79,8 @@ tasks.register('proguard', proguard.gradle.ProGuardTask) {
//libraryjars "${System.getProperty('java.home')}/jmods/java.sql.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
//libraryjars "${System.getProperty('java.home')}/jmods/....."
}
- libraryjars sourceSets.main.compileClasspath.filter { file ->
- return !sourceSets.main.runtimeClasspath.contains(file)
+ libraryjars mainCompileClasspath.filter { file ->
+ return !mainRuntimeClasspath.contains(file)
}
outjars proguardJar
@@ -100,10 +94,25 @@ tasks.register('proguard', proguard.gradle.ProGuardTask) {
tasks.register('proguardTest', JavaExec) {
dependsOn(tasks.named("proguard"))
classpath = files(proguard.proguardJar)
- main = 'com.dropbox.core.test.proguard.Main'
- ignoreExitValue false
+ mainClass = 'com.dropbox.core.test.proguard.Main'
+ ignoreExitValue = false
doFirst {
- args getAuthInfoFile().absolutePath
+ def authInfoFile = authInfoFileProvider.orNull
+ if (authInfoFile == null) {
+ throw new GradleException('' +
+ "These tests require the \"${authInfoPropertyName}\" " +
+ "project property be set to point to an authorization JSON file " +
+ "(e.g. ./gradlew proguardTest -P${authInfoPropertyName}=auth.json)."
+ )
+ }
+ if (!authInfoFile.exists()) {
+ throw new GradleException('' +
+ "The test auth info file does not exist: \"${authInfoFile.absolutePath}\". " +
+ "Please ensure the \"${authInfoPropertyName}\" project property is set to point to " +
+ "the correct authorization JSON file."
+ )
+ }
+ args authInfoFile.absolutePath
}
}
diff --git a/stone-java-gradle-plugin/src/main/kotlin/com/dropbox/stone/java/StonePlugin.kt b/stone-java-gradle-plugin/src/main/kotlin/com/dropbox/stone/java/StonePlugin.kt
index 93b2d1b8d..cedfd5b62 100644
--- a/stone-java-gradle-plugin/src/main/kotlin/com/dropbox/stone/java/StonePlugin.kt
+++ b/stone-java-gradle-plugin/src/main/kotlin/com/dropbox/stone/java/StonePlugin.kt
@@ -42,27 +42,27 @@ class StonePlugin : Plugin {
val taskName: String = if (isMainSourceSet) {
"generateStone"
} else {
- "generate${sourceSet.name.capitalize()}Stone"
+ "generate${sourceSet.name.replaceFirstChar { it.uppercaseChar() }}Stone"
}
+ val generatedSourceDir = project.layout.buildDirectory.dir("generated/source/stone/${sourceSet.name}/src")
- project.tasks.register(taskName, StoneTask::class.java) {
+ val taskProvider = project.tasks.register(taskName, StoneTask::class.java) {
description = "Generate Stone Java source files for ${sourceSet.name}."
val routeWhitelistFilterPropName = "com.dropbox.api.${sourceSet.name}.routeWhitelistFilter"
- val routeWhitelistFilterValue: String? = project.properties[routeWhitelistFilterPropName] as String?
+ val routeWhitelistFilterValue: String? = project.findProperty(routeWhitelistFilterPropName) as String?
if (!routeWhitelistFilterValue.isNullOrBlank()) routeWhitelistFilter.set(File(routeWhitelistFilterValue))
val specDirPropName = "com.dropbox.api.${sourceSet.name}.specDir"
- val specDirPropNameValue: String? = project.properties[specDirPropName] as String?
+ val specDirPropNameValue: String? = project.findProperty(specDirPropName) as String?
val mySpecDir: String = specDirPropNameValue ?: "src/${sourceSet.name}/stone"
specDir.set(File(mySpecDir))
generatorFile.set(File("${project.layout.projectDirectory}/generator/java/java.stoneg.py"))
stoneDir.set(File("stone"))
pythonCommand.set("python")
- outputDir.set(File("${project.layout.buildDirectory}/generated/source/stone/${sourceSet.name}/src"))
-
- sourceSet.java.srcDir("${outputDir}/src")
+ outputDir.set(generatedSourceDir)
}
+ sourceSet.java.srcDir(taskProvider.flatMap { it.outputDir })
}
}