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

问题描述:

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

[email protected]:~/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。我只是打电话给我的项目thirdndk。我不知道如何添加-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 

@Preethi。谢谢;我会看看。我输入它很快。

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

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

+0

如果您的android.mk文件中出现错误,通常会发生 – 2015-03-25 04:39:19

+1

运行ndk-build时会出现错误吗? – samgak 2015-03-25 05:47:36

+0

使用'-1'的文件夹名称超出了您的控制范围,并且完全可以。您向我们展示的文件是您的** Android.mk **,除了评论,它看起来很好。但是您正在使用* Android Studio *,它没有完整的NDK集成。你为什么认为你的本地代码是根本编译的? – 2015-03-25 06:49:21

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

它为我工作。

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

默认情况下,它看起来对内部jniLibs .so文件,但你可以改变它,以便从libs文件夹中集成了文件:

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

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

显然这个错误命名为jniLibs文件夹。我把它命名为jnilibs全部以小写字母出现,这是造成问题的原因。我已经将其更正为jniLibs,并且apk在Windows上正确构建。

希望这会有所帮助。