Android studio 为什么我的本机库未加载?

Android studio 为什么我的本机库未加载?,android-studio,gradle,android-ndk,java-native-interface,native,Android Studio,Gradle,Android Ndk,Java Native Interface,Native,我已经将Gradle标记添加到此线程,因为我觉得build.Gradle文件缺少所需的配置。下面是我的文件副本。我遇到的问题是,我不知道为什么我的共享库文件没有进入我的APK。我想通过阅读Gradle手册,我在这个文件中看到了我需要的东西,但我想确定一下 sansari@ubuntu:~/AndroidStudioProjects/ThirdNDK/app$ more build.gradle apply plugin: 'com.android.application' android {

我已经将Gradle标记添加到此线程,因为我觉得build.Gradle文件缺少所需的配置。下面是我的文件副本。我遇到的问题是,我不知道为什么我的共享库文件没有进入我的APK。我想通过阅读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'
}
我正在androidstudio中尝试一个本机代码项目,我得到了以下错误。但我不知道为什么加载程序会在那个目录中查找。或者为什么文件夹名为com.example.sansari.thiredndk-1。我刚刚给我的项目打了电话。我不知道如何添加-1。我想知道如何修复此问题,并了解加载程序为何在该目录中查找?My/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
@普里西。谢谢我来看看。我打字很快

@普里西或其他任何人;看来我在这方面运气不好。以下是apk:


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

尝试文件->使缓存无效/重新启动


它对我很有效。

尝试文件->使缓存无效/重新启动


这对我很有用。

如果你的.so文件现在是在libs/中生成的,那么剩下的唯一一步就是让Android Studio从libs文件夹中集成这些文件

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


如果您的.so文件现在是在libs/中生成的,那么剩下的唯一一步就是让Android Studio从libs文件夹中集成这些文件

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


我也有类似的问题。 apk过去在Ubuntu中正确构建,但在Windows中,apk缺少lib文件夹

显然,错误在于命名jniLibs文件夹。我把它命名为jnilibs,全部用小写字母,这导致了这个问题。我已将其更正为jniLibs,并且apk正在windows上正确构建


希望这有帮助。

我也有类似的问题。 apk过去在Ubuntu中正确构建,但在Windows中,apk缺少lib文件夹

显然,错误在于命名jniLibs文件夹。我把它命名为jnilibs,全部用小写字母,这导致了这个问题。我已将其更正为jniLibs,并且apk正在windows上正确构建


希望这能有所帮助。

如果您的android.mk文件出现问题,通常会发生这种情况。运行ndk build时,您是否遇到任何错误?文件夹名为-1超出了您的控制范围,完全可以。你给我们看的文件是你的Android.mk,除了注释,它看起来很好。但您使用的是Android Studio,它没有完全集成NDK。为什么您认为您的本机代码是编译的?很好,您已经构建了libs。现在的问题是他们是否被塞进了APK。只需在APK文件上使用unzip-l进行检查。如果自定义共享库不在APK中,那么它肯定不会在运行时加载。专注于找出它没有进入包的原因。如果您的android.mk文件出错,通常会发生这种情况。运行ndk build时,您是否遇到任何错误?带有-1的文件夹名称超出您的控制范围,完全可以。你给我们看的文件是你的Android.mk,除了注释,它看起来很好。但您使用的是Android Studio,它没有完全集成NDK。为什么您认为您的本机代码是编译的?很好,您已经构建了libs。现在的问题是他们是否被塞进了APK。只需在APK文件上使用unzip-l进行检查。如果自定义共享库不在APK中,那么它肯定不会在运行时加载。专注于找出为什么它没有进入软件包。
android {
    ...
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
    }
}