Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Java library for the Dropbox Core API.

License

NotificationsYou must be signed in to change notification settings

dropbox/dropbox-sdk-java

Repository files navigation

Dropbox Core SDK for Java

GitHubMaven CentralGitHub Release Date

A Java library to accessDropbox's HTTP-based Core API v2. This SDK also supports the olderCore API v1, but that support will be removed at some point.

License:MIT

Documentation:Javadocs

Setup

Java Version

The current release of Dropbox SDK Java supports Java 8+.

Android Version

The current release of Dropbox SDK Java supports Android 8+ (SDK 26+)

Add a dependency on the Dropbox Java SDK to your project

If you're using Maven, then edit your project's "pom.xml" and add this to the<dependencies> section:

<dependency>    <groupId>com.dropbox.core</groupId>    <artifactId>dropbox-core-sdk</artifactId>    <version>7.0.0</version></dependency>

If you are using Gradle, then edit your project's "build.gradle" and add this to thedependencies section:

dependencies {// ...    implementation'com.dropbox.core:dropbox-core-sdk:7.0.0'}

You can also download the Java SDK JAR and and its required dependencies directly from thelatest release page. Note that the distribution artifacts on the releases pages do not contain optional dependencies.

Dropbox for Java tutorial

A good way to start using the Java SDK is to follow this quick tutorial. Just make sure you have the Java SDKinstalled first!

Register a Dropbox API app

To use the Dropbox API, you'll need to register a new app in theApp Console. 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.

Link an account

In 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 cangenerate an access token for your own account through theApp Console).

importcom.dropbox.core.DbxException;importcom.dropbox.core.DbxRequestConfig;importcom.dropbox.core.v2.DbxClientV2;publicclassMain {privatestaticfinalStringACCESS_TOKEN ="<ACCESS TOKEN>";publicstaticvoidmain(Stringargs[])throwsDbxException {// Create Dropbox clientDbxRequestConfigconfig =DbxRequestConfig.newBuilder("dropbox/java-tutorial").build();DbxClientV2client =newDbxClientV2(config,ACCESS_TOKEN);    }}

Test it out to make sure you've linked the right account:

// Get current account infoFullAccountaccount =client.users().getCurrentAccount();System.out.println(account.getName().getDisplayName());

Try some API requests

You can use the Dropbox object you instantiated above to make API calls. Try out a request to list the contents of a folder.

// Get files and folder metadata from Dropbox root directoryListFolderResultresult =client.files().listFolder("");while (true) {for (Metadatametadata :result.getEntries()) {System.out.println(metadata.getPathLower());    }if (!result.getHasMore()) {break;    }result =client.files().listFolderContinue(result.getCursor());}

Try uploading a file to your Dropbox.

// Upload "test.txt" to Dropboxtry (InputStreamin =newFileInputStream("test.txt")) {FileMetadatametadata =client.files().uploadBuilder("/test.txt")        .uploadAndFinish(in);}

Full Example Snippet

importcom.dropbox.core.DbxException;importcom.dropbox.core.DbxRequestConfig;importcom.dropbox.core.v2.DbxClientV2;importcom.dropbox.core.v2.files.FileMetadata;importcom.dropbox.core.v2.files.ListFolderResult;importcom.dropbox.core.v2.files.Metadata;importcom.dropbox.core.v2.users.FullAccount;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.IOException;publicclassMain {privatestaticfinalStringACCESS_TOKEN ="<ACCESS TOKEN>";publicstaticvoidmain(Stringargs[])throwsDbxException,IOException {// Create Dropbox clientDbxRequestConfigconfig =DbxRequestConfig.newBuilder("dropbox/java-tutorial").build();DbxClientV2client =newDbxClientV2(config,ACCESS_TOKEN);// Get current account infoFullAccountaccount =client.users().getCurrentAccount();System.out.println(account.getName().getDisplayName());// Get files and folder metadata from Dropbox root directoryListFolderResultresult =client.files().listFolder("");while (true) {for (Metadatametadata :result.getEntries()) {System.out.println(metadata.getPathLower());            }if (!result.getHasMore()) {break;            }result =client.files().listFolderContinue(result.getCursor());        }// Upload "test.txt" to Dropboxtry (InputStreamin =newFileInputStream("test.txt")) {FileMetadatametadata =client.files().uploadBuilder("/test.txt")                .uploadAndFinish(in);        }    }}

Full examples

Some more complete examples can be found here:

To try out running these examples, please follow the instructions below.

Save your Dropbox API key

Save your Dropbox API key to a JSON file called, say, "test.app":

{"key":"Your Dropbox API app key","secret":"Your Dropbox API app secret"}

App key and secret can be found in you app page inApp Console.

Building from source

git clone https://github.com/dropbox/dropbox-sdk-java.gitcd dropbox-sdk-java./update-submodules# also do this after every "git checkout"./gradlew build# requires `python` command to use Python 3.9, pip dropbox

The output will be in "build/".

Running the examples

  1. Follow the instructions in the "Build from source" section above.
  2. Save your Dropbox API key in a file called "test.app". See:Save your Dropbox API key, above.
  3. Compile and install the SDK into your local maven repo:./gradlew build
  4. To compile all the examples:cd examples/ && ./gradlew classes
  5. To compile just one example:cd examples/ && ./gradlew :<example-name>:classes

authorize

This example runs through the OAuth 2 authorization flow.

cd examples./run authorize test.app test.auth

This produces a file named "test.auth" that has the access token. This file can be passed in to the other examples.

account-info

A simple example that fetches and displays information about the account associated with the access token.

cd examples./run account-info test.auth

(You must first generate "test.auth" using the "authorize" example above.)

longpoll

An example of how to watch for changes in a Dropbox directory.

cd examples./run longpoll test.auth"/path/to/watch"

(You must first generate "test.auth" using the "authorize" example above.)

upload-file

Uploads a file to Dropbox. The example includes regular and chunked file uploads.

cd examples./run upload-file test.auth local-path/file.txt /dropbox-path/file.txt

(You must first generate "test.auth" using the "authorize" example above.)

web-file-browser

A 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.

Prerequisite: In the Dropbox APIapp configuration console, you need to add "http://localhost:5000/dropbox-auth-finish" to the list of allowed redirect URIs.

cd examples./run web-file-browser 5000 test.app web-file-browser.db

Running the integration tests

  1. Run through theauthorize example above to get a "test.auth" file.
  2. ./gradlew -Pcom.dropbox.test.authInfoFile=<path-to-test.auth> integrationTest

To run individual tests, use the--tests gradle test filter:

./gradlew -Pcom.dropbox.test.authInfoFile=<path-to-test.auth> integrationTest --tests'*.DbxClientV1IT.testAccountInfo'

Usage on Android

Edit your project's "build.gradle" and add the following to the dependencies section:

dependencies {    // ...    implementation 'com.dropbox.core:dropbox-core-sdk:7.0.0'    implementation 'com.dropbox.core:dropbox-android-sdk:7.0.0'}

If you leverage jettifier and see the following errors then please addandroid.jetifier.ignorelist = jackson-core,fastdoubleparser to yourgradle.properties file.

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 addimplementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") to your dependencies block in order to avoid a runtime exception.

If theofficial Dropbox App is installed, it will attempt to use it to do authorization. If it is not, a web authentication flow is launched in-browser.

Use the methods in theAuth to start an authentication sessions.

Please look at theexamples/android sample app for usage as well.

Required Configuration for Authentication on Android

The following below is required configuration when using the SDK on Android.

AndroidManifest.xml

Add these following pieces to yourAndroidManifest.xml to use Dropbox for Authentication in Android.

AddAuthActivity to the manifest

Use your Dropbox APP Key in place ofdropboxKey below. You need to add theAuthActivity entry, and it's associatedintent-filter.

<manifest>    ...    <application>        <activity            android:name="com.dropbox.core.android.AuthActivity"            android:exported="true"            android:configChanges="orientation|keyboard"            android:launchMode="singleTask">            <intent-filter>                <data android:scheme="db-${dropboxKey}" />                        <action android:name="android.intent.action.VIEW" />                        <category android:name="android.intent.category.BROWSABLE" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>                        <!-- Additional intent-filter required as a workaround for Apps using targetSdk=33 until the fix in the Dropbox app is available to all users. -->            <intent-filter>                <action android:name="android.intent.action.VIEW" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>    </application>    ...</manifest>

Your activity starting the authorization flow should also configured withandroid:launchMode="singleTask". Also, if that activity is configured withandroid:taskAffinity, then theAuthActivity should also configured with the same task affinity, such that authorization result can be passed back to your activity.

🚨There is a known issue regarding apps withtargetSdk=33 regarding app-to-app authentication when the Dropbox App is installed 🚨A fix is being worked on and will be released in an upcoming version of the Dropbox Mobile App.

Add Dropboxpackage toqueries

Additionally, you need to allowqueries from the Dropbox official app for verification during the app-to-app authentication flow.

<manifest>    ...    <queries>        <package android:name="com.dropbox.android" />    </queries>    ...</manifest>

FAQ

When I useOkHttp3Requestor inDbxRequestConfig, I get errors like 'class file for okhttp3.OkHttpClient not found'

The dependency of OKHttp/OKHttp3 is optional. You should add them, only if you explicitly want to use it as the http requestor.

Example in Gradle:

dependencies {// ...    api'com.squareup.okhttp3:okhttp:4.0.0'}

When I use the bundle JAR with some OSGi containers within an OSGi subsystem, I get a "Missing required capability" error

The JAR's manifest has the following line:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=11))"

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.

As a workaround, you can build your own version of the JAR that omits the "osgi.ee" capability by running:

./gradlew clean./gradlew -Posgi.bnd.noee=true :core:jar

(This is equivalent to passing the "-noee" option to the OSGi "bnd" tool.)

Another workaround is to tell your OSGi container to provide that requirement:StackOverflow answer.

Does this SDK require any special ProGuard rules for shrink optimizations?

The 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:

-dontwarn okio.**-dontwarn okhttp3.**-dontwarn com.squareup.okhttp.**-dontwarn com.google.apphosting.**-dontwarn com.google.appengine.**-dontwarn com.google.protos.cloud.sql.**-dontwarn com.google.cloud.sql.**-dontwarn javax.activation.**-dontwarn javax.mail.**-dontwarn javax.servlet.**-dontwarn org.apache.**

How do I enable certificate pinning?

As 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 withyour ownSSLSocketFactory orCertificatePinner. To provide this to your calls, you can use any of the requestors provided.

Note: If you were previously usingSSLConfig, this is no longer available. You can view the source ingit historybut we no longer provide any default certificate pinning or any other configuration.

UsingStandardHttpRequestor

StandardHttpRequestor.ConfigcustomConfig =StandardHttpRequestor.Config.DEFAULT_INSTANCE.copy()        .withSslSocketFactory(mySslSocketFactory)        .build();StandardHttpRequestorrequestor =newStandardHttpRequestor(customConfig);

UsingOkHttp3Requestor

See:CertificatePinner

okhttp3.OkHttpClienthttpClient =OkHttp3Requestor.defaultOkHttpClientBuilder()        .certificatePinner(myCertificatePinner)        .build();

UsingOkHttpRequestor

See:CertificatePinner

OkHttpClienthttpClient =OkHttpRequestor.defaultOkHttpClient().clone()        .setCertificatePinner(myCertificatePinner)        .build();

About

A Java library for the Dropbox Core API.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp