0

Who can help me fix error in my Android Project. I make sync with dropbox in my project, but when i try start app i have errors: Caused by: java.lang.UnsatisfiedLinkError: Library DropboxSync not found

09-02 12:56:55.367    1313-1313/? E/AndroidRuntime: Uncaught handler: thread main exiting due to uncaught exception
09-02 12:56:55.377    1313-1313/? E/AndroidRuntime: java.lang.ExceptionInInitializerError
        at com.dropbox.sync.android.CoreAccountManager.initNativeLib(CoreAccountManager.java:111)
        at com.dropbox.sync.android.CoreAccountManager.<init>(CoreAccountManager.java:91)
        at com.dropbox.sync.android.DbxAccountManager.getInstance(DbxAccountManager.java:132)
        at com.dropbox.sync.android.DbxAccountManager.getInstance(DbxAccountManager.java:100)
        at com.shvedchenko.skleroshop.MainActivity.onCreate(MainActivity.java:44)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
        at android.app.ActivityThread.access$2200(ActivityThread.java:119)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:4363)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.ExceptionInInitializerError
        at com.dropbox.sync.android.NativeLib.<init>(NativeLib.java:33)
        at com.dropbox.sync.android.NativeLib.<clinit>(NativeLib.java:11)
        ... 18 more
        Caused by: java.lang.UnsatisfiedLinkError: Library DropboxSync not found
        at java.lang.Runtime.loadLibrary(Runtime.java:489)
        at java.lang.System.loadLibrary(System.java:557)
        at com.dropbox.sync.android.NativeHttp.<clinit>(NativeHttp.java:411)
        ... 20 more

Line №44 is mDbxAcctMgr = DbxAccountManager.getInstance(getApplicationContext(), appKey, appSecret);

I don't understand whats wrong?

Thx!

kbu
  • 389
  • 2
  • 4
  • 19

4 Answers4

1

Here is my solution:

dependencies {
    compile files('libs/dropbox-sync-sdk-android.jar')
}

android {
    tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
        pkgTask -> pkgTask.jniFolders = new HashSet<File>();
            pkgTask.jniFolders.add(new File(projectDir, 'libs'));
    }
}

Place the 'libs' folder from Dropbox sdk at the same level with 'build' and 'src' folder.

X.Y.
  • 13,726
  • 10
  • 50
  • 63
0

You seem to miss the library for Dropbox (native part)

you can see that on the bottom of your stacktrace

    Caused by: java.lang.UnsatisfiedLinkError: Library DropboxSync not found
    at java.lang.Runtime.loadLibrary(Runtime.java:489)
    at java.lang.System.loadLibrary(System.java:557)
    at com.dropbox.sync.android.NativeHttp.<clinit>(NativeHttp.java:411)
    ... 20 more

check the library download or documentation where to get the missing library file

[UPDATE]: How To use native libraries with android studio

Put your *.so files inside a libs folder beside the src folder

task copyNativeLibs(type: Copy) {
    from(new File('libs')) { include '**/*.so' }
    into new File(buildDir, 'native-libs')
}

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}
Dodge
  • 8,047
  • 2
  • 30
  • 45
  • I have something like that in Project/libs it SO library. For example libDropboxSync.so. But how i can explain to AndroidStudio use this object? Thx – kbu Sep 02 '13 at 13:55
0

It looks like this is a general issue with native libraries and gradle. I found this SO answer helpful: Include .so library in apk in android studio

Part of my build.gradle file now looks like this, and my app starts successfully:

dependencies {
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
}

task nativeLibsToJar(
        type: Zip,
        description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    extension 'jar'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}

tasks.withType(Compile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
Community
  • 1
  • 1
user94559
  • 59,196
  • 6
  • 103
  • 103
0

solution without copying data

Probably, most of us developers don't like to copy data from one location to another... So here's the solution without copying the .so files to your project:

compile files('M:\\Dropbox\\SWDevelopment\\Libraries\\Android\\dropbox-android-sync-sdk-3.1.2\\libs\\dropbox-sync-sdk-android.jar')
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    extension 'jar'
    from fileTree(dir: 'M:/Dropbox/SWDevelopment/Libraries/Android/dropbox-android-sync-sdk-3.1.2/libs', include: '**/*.so')
    into 'lib/'
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

Just adjust the 2 occurences of my dropbox sync api folder to your own one ...

prom85
  • 16,896
  • 17
  • 122
  • 242