不能在android studio

时间:2015-05-29 08:18:54

标签: java android android-ndk

我很难在android studio中包含我自己的sqlite库(libsqliteX.so):

我跟着这个guide并加载了this并用最新的android NDK(r10e)编译了它(我刚刚添加" APP_ABI:= xxx"到Application.mk来构建还有x86和armeabi-v7a版本)并得到了这个: 控制台输出:s3.postimg.org/v83e8bwsz/ndk_build.jpg(不能发布超过2个链接:D)。

之后我在android studio(v1.2.1.1)中创建了一个新的应用程序并创建了一个新的jnilibs文件夹,我复制了我的.so文件:s17.postimg.org/7vvvsao67/jni_Libs.jpg

我没有更改build.gradle(gradle版本1.2.3)或其他任何内容,只是编译了我的应用程序,并且这些库包含在apk中(打开了... / app / build / outputs / apk带有winzip的/apk-debug.apk和libsqliteX.so文件的lib文件夹。)

但现在我不知道如何在我的项目中使用该库。我无法添加第import org.sqlite.database...;行(无法解析符号' sqlite'),我无法在项目结构中添加该库 - >依赖 (只有build.gradle中的默认依赖项存在:

compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'com.android.support:support-v4:22.1.1'

如果我只是用System.loadLibrary("sqliteX");加载库 我在运行时遇到了这个错误:

05-29 03:21:54.248    3450-3450/com.example.thele.geostuff D/dalvikvm﹕ Added shared lib /data/app-lib/com.example.thele.geostuff-1/libsqliteX.so 0x416f6428
05-29 03:21:54.288    3450-3450/com.example.thele.geostuff E/SQLiteConnection﹕ Unable to find class org/sqlite/database/sqlite/SQLiteCustomFunction
05-29 03:21:54.288    3450-3450/com.example.thele.geostuff W/dalvikvm﹕ JNI WARNING: JNI method called with exception pending
05-29 03:21:54.288    3450-3450/com.example.thele.geostuff W/dalvikvm﹕ in Ljava/lang/Runtime;.nativeLoad:(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/String; (GetFieldID)
05-29 03:21:54.288    3450-3450/com.example.thele.geostuff W/dalvikvm﹕ Pending exception is:
05-29 03:21:54.297    3450-3450/com.example.thele.geostuff I/dalvikvm﹕ java.lang.NoClassDefFoundError: org/sqlite/database/sqlite/SQLiteCustomFunction

(将dalvik改为艺术会引发类似错误(无法找到该类))

我应用了不同的方法使其工作(使缓存/重启无效,从.so文件中创建.jar文件)但它没有帮助。 我做错了什么?

编辑:

完整的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.thele.geostuff"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:support-v4:22.1.1'
}

1 个答案:

答案 0 :(得分:1)

给我错误

java.lang.NoClassDefFoundError: org/sqlite/database/sqlite/SQLiteCustomFunction

似乎是Java层错误,而不是C级错误。因为* .c文件没有包/文件夹结构(例如" org / sqlite / database ...")。

所以我最好的猜测是,某些.class文件不在你的apk中。如果我是你,我会使用7zip / winrar解压缩apk并检查是否存在 org.sqlite.database.sqlite.SQLiteCustomFunction

实际上,我相信.so已成功加载。

Added shared lib /data/app-lib/com.example.thele.geostuff-1/libsqliteX.so 0x416f6428