{"id":13490122,"url":"https://github.com/dropbox/dropbox-sdk-java","last_synced_at":"2025-03-28T05:32:02.035Z","repository":{"id":9181028,"uuid":"10983050","full_name":"dropbox/dropbox-sdk-java","owner":"dropbox","description":"A Java library for the Dropbox Core API.","archived":false,"fork":false,"pushed_at":"2025-02-06T14:36:14.000Z","size":112938,"stargazers_count":601,"open_issues_count":29,"forks_count":455,"subscribers_count":62,"default_branch":"main","last_synced_at":"2025-02-06T15:37:15.687Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.dropbox.com/developers/documentation/java","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dropbox.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"License.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-06-27T00:32:18.000Z","updated_at":"2025-02-06T14:36:29.000Z","dependencies_parsed_at":"2023-11-29T19:45:21.727Z","dependency_job_id":"a3dba324-0d30-48c0-95ae-f3a9eb939d63","html_url":"https://github.com/dropbox/dropbox-sdk-java","commit_stats":null,"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fdropbox-sdk-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fdropbox-sdk-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fdropbox-sdk-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fdropbox-sdk-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dropbox","download_url":"https://codeload.github.com/dropbox/dropbox-sdk-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245978199,"owners_count":20703675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T19:00:41.151Z","updated_at":"2025-03-28T05:32:02.028Z","avatar_url":"https://github.com/dropbox.png","language":"Java","funding_links":[],"categories":["SDKs","others"],"sub_categories":["Java SDK"],"readme":"## Important: Make sure you're using v7.0.0 or newer of this SDK by January 2026 for continued compatibility with the Dropbox API servers. Please refer to this blog post for more information: https://dropbox.tech/developers/api-server-certificate-changes\n\n# Dropbox Core SDK for Java\n\n![GitHub](https://img.shields.io/github/license/dropbox/dropbox-sdk-java)\n![Maven Central](https://img.shields.io/maven-central/v/com.dropbox.core/dropbox-core-sdk)\n![GitHub Release Date](https://img.shields.io/github/release-date/dropbox/dropbox-sdk-java)\n\nA Java library to access [Dropbox's HTTP-based Core API v2](https://www.dropbox.com/developers/documentation/http/documentation).  This SDK also supports the older [Core API v1](https://www.dropbox.com/developers-v1/core/docs), but that support will be removed at some point.\n\nLicense: [MIT](License.txt)\n\nDocumentation: [Javadocs](https://dropbox.github.io/dropbox-sdk-java/api-docs/v5.4.3/)\n\n## Setup\n\n### Java Version\n\nThe current release of Dropbox SDK Java supports Java 8+.\n\n### Add a dependency on the Dropbox Java SDK to your project\n\nIf you're using Maven, then edit your project's \"pom.xml\" and add this to the `\u003cdependencies\u003e` section:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.dropbox.core\u003c/groupId\u003e\n    \u003cartifactId\u003edropbox-core-sdk\u003c/artifactId\u003e\n    \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nIf you are using Gradle, then edit your project's \"build.gradle\" and add this to the `dependencies` section:\n\n```groovy\ndependencies {\n    // ...\n    implementation 'com.dropbox.core:dropbox-core-sdk:7.0.0'\n}\n```\n\nYou can also download the Java SDK JAR and and its required dependencies directly from the [latest release page](https://github.com/dropbox/dropbox-sdk-java/releases/latest). Note that the distribution artifacts on the releases pages do not contain optional dependencies.\n\n## Dropbox for Java tutorial\n\nA good way to start using the Java SDK is to follow this quick tutorial. Just make sure you have the Java SDK [installed](#setup) first!\n\n### Register a Dropbox API app\n\nTo use the Dropbox API, you'll need to register a new app in the [App Console](https://www.dropbox.com/developers/apps). Select Dropbox API app and choose your app's permission. You'll need to use the app key created with this app to access API v2.\n\n### Link an account\n\nIn order to make calls to the API, you'll need an instance of the Dropbox object. To instantiate, pass in the access token for the account you want to link. (Tip: You can [generate an access token](https://blogs.dropbox.com/developers/2014/05/generate-an-access-token-for-your-own-account/) for your own account through the [App Console](https://www.dropbox.com/developers/apps)).\n\n```java\nimport com.dropbox.core.DbxException;\nimport com.dropbox.core.DbxRequestConfig;\nimport com.dropbox.core.v2.DbxClientV2;\n\npublic class Main {\n    private static final String ACCESS_TOKEN = \"\u003cACCESS TOKEN\u003e\";\n\n    public static void main(String args[]) throws DbxException {\n        // Create Dropbox client\n        DbxRequestConfig config = DbxRequestConfig.newBuilder(\"dropbox/java-tutorial\").build();\n        DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN);\n    }\n}\n```\n\nTest it out to make sure you've linked the right account:\n\n```java\n// Get current account info\nFullAccount account = client.users().getCurrentAccount();\nSystem.out.println(account.getName().getDisplayName());\n```\n\n### Try some API requests\n\nYou can use the Dropbox object you instantiated above to make API calls. Try out a request to list the contents of a folder.\n\n```java\n// Get files and folder metadata from Dropbox root directory\nListFolderResult result = client.files().listFolder(\"\");\nwhile (true) {\n    for (Metadata metadata : result.getEntries()) {\n        System.out.println(metadata.getPathLower());\n    }\n\n    if (!result.getHasMore()) {\n        break;\n    }\n\n    result = client.files().listFolderContinue(result.getCursor());\n}\n```\n\nTry uploading a file to your Dropbox.\n\n```java\n// Upload \"test.txt\" to Dropbox\ntry (InputStream in = new FileInputStream(\"test.txt\")) {\n    FileMetadata metadata = client.files().uploadBuilder(\"/test.txt\")\n        .uploadAndFinish(in);\n}\n```\n\n### Full Example Snippet\n\n```java\nimport com.dropbox.core.DbxException;\nimport com.dropbox.core.DbxRequestConfig;\nimport com.dropbox.core.v2.DbxClientV2;\nimport com.dropbox.core.v2.files.FileMetadata;\nimport com.dropbox.core.v2.files.ListFolderResult;\nimport com.dropbox.core.v2.files.Metadata;\nimport com.dropbox.core.v2.users.FullAccount;\n\nimport java.io.FileInputStream;\nimport java.io.InputStream;\nimport java.io.IOException;\n\npublic class Main {\n    private static final String ACCESS_TOKEN = \"\u003cACCESS TOKEN\u003e\";\n\n    public static void main(String args[]) throws DbxException, IOException {\n        // Create Dropbox client\n        DbxRequestConfig config = DbxRequestConfig.newBuilder(\"dropbox/java-tutorial\").build();\n        DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN);\n\n        // Get current account info\n        FullAccount account = client.users().getCurrentAccount();\n        System.out.println(account.getName().getDisplayName());\n\n        // Get files and folder metadata from Dropbox root directory\n        ListFolderResult result = client.files().listFolder(\"\");\n        while (true) {\n            for (Metadata metadata : result.getEntries()) {\n                System.out.println(metadata.getPathLower());\n            }\n\n            if (!result.getHasMore()) {\n                break;\n            }\n\n            result = client.files().listFolderContinue(result.getCursor());\n        }\n\n        // Upload \"test.txt\" to Dropbox\n        try (InputStream in = new FileInputStream(\"test.txt\")) {\n            FileMetadata metadata = client.files().uploadBuilder(\"/test.txt\")\n                .uploadAndFinish(in);\n        }\n    }\n}\n```\n\n## Full examples\n\nSome more complete examples can be found here:\n\n* Example for a simple web app: [Web File Browser example](examples/examples/src/main/java/com/dropbox/core/examples/web_file_browser/DropboxAuth.java)\n* Example for an Android app written in Kotlin: [Android Kotlin Example](examples/android)\n\nTo try out running these examples, please follow the instructions below.\n\n### Save your Dropbox API key\n\nSave your Dropbox API key to a JSON file called, say, \"test.app\":\n\n```json\n{\n  \"key\": \"Your Dropbox API app key\",\n  \"secret\": \"Your Dropbox API app secret\"\n}\n```\n\nApp key and secret can be found in you app page in [App Console](https://www.dropbox.com/developers/apps).\n\n### Building from source\n\n```shell\ngit clone https://github.com/dropbox/dropbox-sdk-java.git\ncd dropbox-sdk-java\n./update-submodules    # also do this after every \"git checkout\"\n./gradlew build # requires `python` command to use Python 3.9, pip dropbox\n```\n\nThe output will be in \"build/\".\n\n### Running the examples\n\n1. Follow the instructions in the \"Build from source\" section above.\n2. Save your Dropbox API key in a file called \"test.app\".  See: [Save your Dropbox API key](#save-your-dropbox-api-key), above.\n3. Compile and install the SDK into your local maven repo: `./gradlew build`\n4. To compile all the examples: `cd examples/ \u0026\u0026 ./gradlew classes`\n5. To compile just one example: `cd examples/ \u0026\u0026 ./gradlew :\u003cexample-name\u003e:classes`\n\n#### authorize\n\nThis example runs through the OAuth 2 authorization flow.\n\n```shell\ncd examples\n./run authorize test.app test.auth\n```\n\nThis produces a file named \"test.auth\" that has the access token.  This file can be passed in to the other examples.\n\n#### account-info\n\nA simple example that fetches and displays information about the account associated with the access token.\n\n```shell\ncd examples\n./run account-info test.auth\n```\n\n(You must first generate \"test.auth\" using the \"authorize\" example above.)\n\n#### longpoll\n\nAn example of how to watch for changes in a Dropbox directory.\n\n```shell\ncd examples\n./run longpoll test.auth \"/path/to/watch\"\n```\n\n(You must first generate \"test.auth\" using the \"authorize\" example above.)\n\n#### upload-file\n\nUploads a file to Dropbox. The example includes regular and chunked file uploads.\n\n```shell\ncd examples\n./run upload-file test.auth local-path/file.txt /dropbox-path/file.txt\n```\n\n(You must first generate \"test.auth\" using the \"authorize\" example above.)\n\n#### web-file-browser\n\nA tiny web app that runs through the OAuth 2 authorization flow and then uses Dropbox API calls to let the user browse their Dropbox files.\n\nPrerequisite: In the Dropbox API [app configuration console](https://www.dropbox.com/developers/apps), you need to add \"http://localhost:5000/dropbox-auth-finish\" to the list of allowed redirect URIs.\n\n```shell\ncd examples\n./run web-file-browser 5000 test.app web-file-browser.db\n```\n\n## Running the integration tests\n\n1. Run through the `authorize` example above to get a \"test.auth\" file.\n2. `./gradlew -Pcom.dropbox.test.authInfoFile=\u003cpath-to-test.auth\u003e integrationTest`\n\nTo run individual tests, use the `--tests` gradle test filter:\n\n```shell\n./gradlew -Pcom.dropbox.test.authInfoFile=\u003cpath-to-test.auth\u003e integrationTest --tests '*.DbxClientV1IT.testAccountInfo'\n```\n\n## Usage on Android\n\nEdit your project's \"build.gradle\" and add the following to the dependencies section:\n```\ndependencies {\n    // ...\n    implementation 'com.dropbox.core:dropbox-core-sdk:7.0.0'\n    implementation 'com.dropbox.core:dropbox-android-sdk:7.0.0'\n}\n```\nIf you leverage jettifier and see the following errors then please add `android.jetifier.ignorelist = jackson-core,fastdoubleparser` to your `gradle.properties` file.\n\n```\nFailed 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}.\n```\n\nThe 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.\n\nIf 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.\n\nUse the methods in the [`Auth`](https://github.com/dropbox/dropbox-sdk-java/blob/main/android/src/main/java/com/dropbox/core/android/Auth.kt) to start an authentication sessions.\n* [`Auth.startOAuth2Authentication(...)`](https://github.com/dropbox/dropbox-sdk-java/blob/main/android/src/main/java/com/dropbox/core/android/Auth.kt)\n* [`Auth.startOAuth2PKCE(...)`](https://github.com/dropbox/dropbox-sdk-java/blob/main/android/src/main/java/com/dropbox/core/android/Auth.kt)\n\nPlease look at the `examples/android` sample app for usage as well.\n\n### Required Configuration for Authentication on Android\n\nThe following below is required configuration when using the SDK on Android.\n\n#### AndroidManifest.xml\n\nAdd these following pieces to your `AndroidManifest.xml` to use Dropbox for Authentication in Android.\n\n##### Add `AuthActivity` to the manifest\nUse your Dropbox APP Key in place of `dropboxKey` below.  You need to add the `AuthActivity` entry, and it's associated `intent-filter`.  \n```\n\u003cmanifest\u003e\n    ...\n    \u003capplication\u003e\n        \u003cactivity\n            android:name=\"com.dropbox.core.android.AuthActivity\"\n            android:exported=\"true\"\n            android:configChanges=\"orientation|keyboard\"\n            android:launchMode=\"singleTask\"\u003e\n            \u003cintent-filter\u003e\n                \u003cdata android:scheme=\"db-${dropboxKey}\" /\u003e\n        \n                \u003caction android:name=\"android.intent.action.VIEW\" /\u003e\n        \n                \u003ccategory android:name=\"android.intent.category.BROWSABLE\" /\u003e\n                \u003ccategory android:name=\"android.intent.category.DEFAULT\" /\u003e\n            \u003c/intent-filter\u003e\n            \n            \u003c!-- Additional intent-filter required as a workaround for Apps using targetSdk=33 until the fix in the Dropbox app is available to all users. --\u003e\n            \u003cintent-filter\u003e\n                \u003caction android:name=\"android.intent.action.VIEW\" /\u003e\n                \u003ccategory android:name=\"android.intent.category.DEFAULT\" /\u003e\n            \u003c/intent-filter\u003e\n        \u003c/activity\u003e\n    \u003c/application\u003e\n    ...\n\u003c/manifest\u003e\n```\n\nYour activity starting the authorization flow should also configured with `android:launchMode=\"singleTask\"`. Also, if that activity is configured with `android:taskAffinity`, then the `AuthActivity` should also configured with the same task affinity, such that authorization result can be passed back to your activity.\n\n🚨[There is a known issue regarding apps with `targetSdk=33` regarding app-to-app authentication when the Dropbox App is installed](https://github.com/dropbox/dropbox-sdk-java/pull/471) 🚨\nA fix is being worked on and will be released in an upcoming version of the Dropbox Mobile App.\n\n##### Add Dropbox `package` to `queries`\nAdditionally, you need to allow `queries` from the Dropbox official app for verification during the app-to-app authentication flow.\n```\n\u003cmanifest\u003e\n    ...\n    \u003cqueries\u003e\n        \u003cpackage android:name=\"com.dropbox.android\" /\u003e\n    \u003c/queries\u003e\n    ...\n\u003c/manifest\u003e\n```\n\n## FAQ\n\n### When I use `OkHttp3Requestor` in `DbxRequestConfig`, I get errors like 'class file for okhttp3.OkHttpClient not found'\n\nThe dependency of OKHttp/OKHttp3 is optional. You should add them, only if you explicitly want to use it as the http requestor.\n\nExample in Gradle:\n\n```gradle\ndependencies {\n    // ...\n    api 'com.squareup.okhttp3:okhttp:4.0.0'\n}\n```\n\n### When I use the bundle JAR with some OSGi containers within an OSGi subsystem, I get a \"Missing required capability\" error\n\nThe JAR's manifest has the following line:\n\n```\nRequire-Capability: osgi.ee;filter:=\"(\u0026(osgi.ee=JavaSE)(version=11))\"\n```\n\nMost 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.\n\nAs a workaround, you can build your own version of the JAR that omits the \"osgi.ee\" capability by running:\n\n```shell\n./gradlew clean\n./gradlew -Posgi.bnd.noee=true :core:jar\n```\n\n(This is equivalent to passing the \"-noee\" option to the OSGi \"bnd\" tool.)\n\nAnother workaround is to tell your OSGi container to provide that requirement: [StackOverflow answer](https://stackoverflow.com/a/24673359/163832).\n\n### Does this SDK require any special ProGuard rules for shrink optimizations?\n\nThe only ProGuard rules necessary are for the SDK's required and optional dependencies. If you encounter ProGuard warnings, consider adding the following \"-dontwarn\" directives to your ProGuard configuration file:\n\n```\n-dontwarn okio.**\n-dontwarn okhttp3.**\n-dontwarn com.squareup.okhttp.**\n-dontwarn com.google.apphosting.**\n-dontwarn com.google.appengine.**\n-dontwarn com.google.protos.cloud.sql.**\n-dontwarn com.google.cloud.sql.**\n-dontwarn javax.activation.**\n-dontwarn javax.mail.**\n-dontwarn javax.servlet.**\n-dontwarn org.apache.**\n```\n\n### How do I enable certificate pinning?\n\nAs of version 7.0.0, the SDK no longer provides certificate pinning by default. We provide hooks for you to run each of your requests with\nyour own `SSLSocketFactory` or `CertificatePinner`. To provide this to your calls, you can use any of the requestors provided.\n\n*Note*: If you were previously using `SSLConfig`, this is no longer available. You can view the source in [git history](https://github.com/dropbox/dropbox-sdk-java/blob/0f765cb69940ac047682cf117af7a94a1f66b6eb/core/src/main/java/com/dropbox/core/http/SSLConfig.java)\nbut we no longer provide any default certificate pinning or any other configuration.\n\n#### Using `StandardHttpRequestor`\n\n```java\nStandardHttpRequestor.Config customConfig = StandardHttpRequestor.Config.DEFAULT_INSTANCE.copy()\n        .withSslSocketFactory(mySslSocketFactory)\n        .build();\nStandardHttpRequestor requestor = new StandardHttpRequestor(customConfig);\n```\n\n#### Using `OkHttp3Requestor`\n\nSee: [CertificatePinner](https://square.github.io/okhttp/3.x/okhttp/okhttp3/CertificatePinner.html)\n\n```java\nokhttp3.OkHttpClient httpClient = OkHttp3Requestor.defaultOkHttpClientBuilder()\n        .certificatePinner(myCertificatePinner)\n        .build();\n```\n\n#### Using `OkHttpRequestor`\n\nSee: [CertificatePinner](https://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/CertificatePinner.html)\n\n```java\nOkHttpClient httpClient = OkHttpRequestor.defaultOkHttpClient().clone()\n        .setCertificatePinner(myCertificatePinner)\n        .build();\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdropbox%2Fdropbox-sdk-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdropbox%2Fdropbox-sdk-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdropbox%2Fdropbox-sdk-java/lists"}