如何在另一个Android应用程序中调用Android ndk build.so文件?
我有一个要求,我必须在Android中使用如何在另一个Android应用程序中调用Android ndk build.so文件?,android,android-ndk,Android,Android Ndk,我有一个要求,我必须在Android中使用NDK构建.so文件,我必须在我的另一个Android应用程序中调用.so文件中的一些方法 到目前为止我都试过了 我已经从我的Android项目的lib文件夹中获取了.so文件,并将其放入我的另一个应用程序libs文件夹中,我应该称之为.so文件。我使用了以下代码: 注意:我正在使用ECLIPSE static { System.loadLibrary("NativeCode"); } 并尝试了完整的路径库 static {
NDK
构建.so
文件,我必须在我的另一个Android应用程序中调用.so
文件中的一些方法
到目前为止我都试过了
我已经从我的Android项目的lib文件夹中获取了.so文件,并将其放入我的另一个应用程序libs文件夹中,我应该称之为.so文件。我使用了以下代码:
注意:我正在使用ECLIPSE
static {
System.loadLibrary("NativeCode");
}
并尝试了完整的路径库
static {
System.loadLibrary("fullpath\NativeCode");
}
在这两种情况下,它都给出了不满意的链接错误,这意味着它没有获取我的
.so
文件的路径。您需要将libNativeCode.so
放在根目录的jni
文件夹中,而不是libs
或lib
文件夹中
下面是一个不错的教程:
或者,可以使用以下命令:
adb shell
$echo $PATH
它将显示如下路径:
/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
您可以将您的.so
放在以下任何文件夹中,如/system
,/system/bin
,/system/sbin
。(请记住,但您需要手动复制,对于应用程序来说,这样做不是一个好主意)
编辑:
您不能在应用程序中调用任何JNI函数,因为签名无效。您需要有一个JNI包装器(一个
.so
JNI库,它反过来使用.h
头文件来调用另一个库的JNI函数)。这是因为JNI对签名非常敏感。因此,正如我之前所建议的,请遵循教程 您需要将libNativeCode.so
放在根目录的jni
文件夹中,而不是放在libs
或lib
文件夹中
下面是一个不错的教程:
或者,可以使用以下命令:
adb shell
$echo $PATH
它将显示如下路径:
/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
您可以将您的.so
放在以下任何文件夹中,如/system
,/system/bin
,/system/sbin
。(请记住,但您需要手动复制,对于应用程序来说,这样做不是一个好主意)
编辑:
您不能在应用程序中调用任何JNI函数,因为签名无效。您需要有一个JNI包装器(一个
.so
JNI库,它反过来使用.h
头文件来调用另一个库的JNI函数)。这是因为JNI对签名非常敏感。因此,正如我之前所建议的,请遵循教程 要使用loadLibrary()加载.so库,必须将libNativeCode.solib复制到jniLibs/architecture文件夹中
该文件夹应位于Android应用程序模块(假设您使用的是Android Studio)的src/main/jniLibs/armeabi-v7a下
复制库后,将以下行添加到app module文件夹中的build.gradle:
assert file("./src/main/jniLibs/armeabi-v7a/libNativeCode.so").exists()
完成上述步骤后,应该正确加载库
如果libNativeCode.so位于错误的路径,Gradle构建将失败
祝你好运,要使用loadLibrary()加载你的.so库,你必须将libNativeCode.so库复制到jniLibs/architecture文件夹中 该文件夹应位于Android应用程序模块(假设您使用的是Android Studio)的src/main/jniLibs/armeabi-v7a下 复制库后,将以下行添加到app module文件夹中的build.gradle:
assert file("./src/main/jniLibs/armeabi-v7a/libNativeCode.so").exists()
完成上述步骤后,应该正确加载库
如果libNativeCode.so位于错误的路径,Gradle构建将失败
祝你好运,但这个例子只是说要构建一个android ndk应用程序,但我的问题是我已经有了一个.so文件如何在另一个android应用程序中使用它可能是或可能不是android ndk项目正如你所说,我将.so文件放在jni文件夹中,但不是working@AbhijitChakra编辑了我的答案。看一看,但这个例子只是说要构建一个android ndk应用程序,但我的问题是我已经有了一个.so文件如何在另一个android应用程序中使用它它可能是一个android ndk项目,也可能不是一个android ndk项目,正如你所说,我将.so文件放在jni文件夹中,但不是working@AbhijitChakra编辑了我的答案。看一看,嗨,这只适用于gradle版本。嗨,这只适用于gradle版本。