我试图在项目中导入和使用.so文件。我在StackOverflow上读过android的文档、不同的博客和答案,但是没有一个对我有用,因为其中大多数都过时了( 3-4年前写的或者问过)。也无法跟踪文档。
请帮帮忙!
发布于 2018-07-19 09:20:44
(我假设.so文件是使用Android为Android构建的。如果不行,这是行不通的,您需要源代码来使用Android重新构建.so文件)
假设您已经有了一个为ARMv7A体系结构构建的名为本机库的库,并将它放在app/prebuilt_libs/armeabi-v7a/中。
应用程序/build.gradle:
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a"
}
}
...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
sourceSets.main {
jniLibs.srcDirs = ['prebuilt_libs']
}app/CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(lib_native SHARED IMPORTED)
set_target_properties(lib_native PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/${ANDROID_ABI}/libnative-lib.so)如果库打算从Java中使用,则为。
CallNative.java:
package com.example.foo; // !! This must match the package name that was used when naming the functions in the native code !!
public class CallNative { // This must match the class name that was used when naming the functions in the native code !!
static {
System.loadLibrary("native-lib");
}
public native String myNativeFunction();
}例如,如果本机库有一个函数JNIEXPORT jstring JNICALL Java_com_example_bar_MyClass_myNativeFunction,则必须将该类命名为MyClass并位于包com.example.bar中。
如果该库打算由其他本机库使用,则为。
您需要一个库的头文件(*.h)。如果你没有一个,你就得自己想办法写一个。
然后将其添加到您的CMakeLists.txt中:
set_target_properties(lib_native PROPERTIES INCLUDE_DIRECTORIES directory/of/header/file)对于使用lib本机-lib.so的其他本机库:
target_link_libraries(other_native_lib lib_native)https://stackoverflow.com/questions/51416866
复制相似问题