【发布时间】:2015-03-25 04:33:51
【问题描述】:
我已将 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'
}
我正在 Android Studio 中尝试原生代码项目,但出现以下错误。但我不知道加载程序为什么要在那个目录中查找。或者为什么该文件夹被称为 com.example.sansari.thiredndk-1。我刚刚将我的项目称为thirdndk。我不确定如何添加 -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 studio 的 apk 中包含 .so 库 [重复]”它在 stackoverflow 上。我不确定我是否有权发布网址。其中,cmets 关于早期版本的 Gradle 中包含库的错误。其中的一个链接有一个关于使用 jniLibs 文件夹作为放置共享库的目录的评论。所以我抓住机会将我所有的共享库文件从 libs 复制到 jniLibs。我创建了 jniLibs 并复制了文件,瞧。再次感谢大家。你们真棒。
【问题讨论】:
-
如果您的 android.mk 文件有问题,通常会发生这种情况
-
你在运行 ndk-build 时是否遇到任何错误?
-
带有
-1的文件夹名称超出您的控制范围,完全可以。您向我们展示的文件是您的 Android.mk,除了 cmets,它看起来都很好。但是您使用的是 Android Studio,它没有完整的 NDK 集成。为什么你认为你的原生代码完全被编译了? -
很好,你已经构建了库。现在的问题是它们是否被打包到 APK 中。只需在 APK 文件上使用
unzip -l即可检查。 -
如果自定义共享库不在您的 APK 中,那么它肯定不会在运行时加载。专注于弄清楚为什么它没有进入包装。
标签: android-studio gradle android-ndk java-native-interface native