为什么我的本机库没有加载?

时间:2015-03-25 04:33:52

标签: android-studio gradle android-ndk java-native-interface native

我已将Gradle标记添加到此线程,因为我觉得我的build.gradle文件缺少所需的配置。下面是我的文件的副本。我遇到的问题是我不知道为什么我的共享库文件没有进入我的apks。而且我想通过阅读Gradle手册,我看到告诉告诉我在这个文件中需要什么,但我想确定。

sansari@ubuntu:~/AndroidStudioProjects/ThirdNDK/app$ more build.gradle 
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.sansari.thirdndk"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        ndk
                {
                    moduleName "HelloJNI"
                }
    }
    sourceSets.main
            {
                jni.srcDirs = [] // ndk-build.cmd needs to be invoked from command line
                jniLibs.srcDirs '/src/main/libs'
            }
    productFlavors
            {
                x86
                        {
                            ndk
                                    {
                                        abiFilter "x86"
                                    }
                        }

    armv7a
            {
                ndk
                        {
                            abiFilter "armeabi-v7a"
                        }
            }
                arm {
                    //flavorDimension "abi"
                    ndk
                            {
                                abiFilter "armeabi"
                                versionCode = 1;
                            }
                    }
            }
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.0.0'
}

我正在Android Studio中尝试本机代码项目,并且出现以下错误。但我不知道为什么加载器正在查看该目录。或者为什么该文件夹名为com.example.sansari.thiredndk-1。我刚打电话给我的第三个项目。我不确定如何添加-1。我想知道如何解决这个问题,并了解为什么加载器正在查找该目录?我的/ libs文件夹位于项目的主目录中。

java.lang.UnsatisfiedLinkError: Couldn't load HelloJNI from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.sansari.thirdndk-1.apk,libraryPath=/data/app-lib/com.example.sansari.thirdndk-1]: findLibrary returned null

@Preethi。谢谢;我来看看。我很快就输入了它。

@Preethi或其他任何人;我似乎没有任何运气。这是apk:

谢谢大家的帮助。它终于奏效了。我用谷歌搜索“如何使用gradle将库文件添加到apk”,这个小宝石出现了:“在android工作室的apk中包含.so库[重复]”它在stackoverflow上。我不确定我是否有权发布网址。在其中,有关于早期版本的Gradle中包含库的错误的评论。其中一个链接有一个关于使用jniLibs文件夹作为放置共享库的目录的注释。所以我抓住机会将所有共享库文件从libs复制到jniLibs。我创建了jniLibs并复制了文件和瞧。再次感谢你们所有人。你们好棒。

3 个答案:

答案 0 :(得分:3)

如果您的.so文件现在在libs/<abi>内生成,则唯一剩下的步骤是让Android Studio集成libs文件夹中的这些文件。

默认情况下,它会在jniLibs中查找.so文件,但您可以更改它以集成libs文件夹中的文件:

android {
    ...
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
    }
}

答案 1 :(得分:2)

尝试文件 - &gt;使高速缓存/重新启动无效。

它对我有用。

答案 2 :(得分:0)

我也有类似的问题。 apk用于在Ubuntu中正确构建,但在Windows中,apk错过了lib文件夹。

显然错误是jniLibs文件夹的命名。我将它命名为jnilibs全部用小写字母引起问题。我已将其更正为jniLibs并且apk正在Windows上正确构建。

希望这有帮助。