
在androidstudio里app下添加libs文件夹,下面新建armeabi,把so放进去
在app build.gradle里android下添加:
ndk{
abiFilters "armeabi"
}
并添加:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
继续添加:
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
然后按照规定建package,建类,在类里调用so文件
static {
System.loadLibrary("videodecoder")
}
并编写native方法,就完成了
主要是工作和硬件打交道过.而且公司用的JNI.然后dll就在工程根目录很多
想封装一下.那某些库要用的jni封装到那个库里面.
遂试了一下.
static
{
System.loadLibrary("a")
}
如果把a和a的依赖bcdef全部放在工程根目录.能够正常加载
但是如果在工程根目录新建一个叫dll的dir
然后通过-Djava.library.path=SRC_ROOT/dll
这样.就会报hs_err.虚拟机直接崩溃了.
说明应该是依赖没找到
但是我把dll的名字改成dll2
去启动就报no ain java.library.path
那说明其实参数设置是有效的啊
我就奇怪了.这个a的依赖他到底是不是有java层面的libraryPath去找的.
因为dll的加载都是在classLoad
NativeLibrary lib =newNativeLibrary(fromClass,name,isBuiltin)
nativeLibraryContext.push(lib)
try{
lib.load(name,isBuiltin)
}finally{
nativeLibraryContext.pop()
}
if(lib.loaded) {
loadedLibraryNames.addElement(name)
libs.addElement(lib)
return true
}
static classNativeLibrary {
// opaque handle to native library, used in native code.
longhandle
// the version of JNI environment the native library requires.
private intjniVersion
// the class from which the library is loaded, also indicates
// the loader this native library belongs.
private finalClassfromClass
// the canonicalized name of the native library.
// or static library name
Stringname
// Indicates if the native library is linked into the VM
booleanisBuiltin
// Indicates if the native library is loaded
booleanloaded
native voidload(String name, booleanisBuiltin)
是个native方法.我就怀疑是不是jvm这B.根本没有管这个参数?
但是网上大佬都说可以啊..
我迷了.
LoadLibrary不是加载DLL文件,LoadLibrary出现是系统设置错误导致。
如下参考:
1.按下Win+R组合键,输入控件,点击“确定”按钮,打开控制面板,如下图所示。
2.在控制面板界面,点击“硬件和声音”按钮,如下图所示。
3.再次点击“电源选项”按钮。
4.根据需要修改“balance”、“highperformance”等计划属性,分别点击“changeplanSettings”按钮。
5.再次点击“更改高级电源设置”按钮。
6.在电源选项窗口中,找到“可切换动态显卡-全局设置-性能最大化”选项,将相应的“用电量”和“开机电量”修改为“性能最大化”。此时,设置了power属性。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)