Android & DropboxSync Library

青春壹個敷衍的年華 提交于 2019-12-13 21:39:42

问题


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!


回答1:


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)
}



回答2:


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.




回答3:


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')
}



回答4:


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



来源:https://stackoverflow.com/questions/18574283/android-dropboxsync-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!