【发布时间】:2023-03-31 13:23:01
【问题描述】:
我想将 C 库添加到我的项目中。 lzfse通过苹果算法解码img。
我已将 c 文件添加到项目中
添加了 CmakeLines 文件:
externalNativeBuild {
cmake {
path "src/main/lzfse/CMakeLists.txt"
version "3.10.2"
}
}
我已经为decode写了JNI:
JNIEXPORT jint JNICALL
Java_com_android_Decompressor_decode(
JNIEnv* env, jclass cls, jobject src, jobject dst
) {
uint8_t* src_buffer = (*env)->GetDirectBufferAddress(env,src);
const size_t src_size = (const size_t) (*env)->GetDirectBufferCapacity(env, src);
uint8_t* dst_buffer = (*env)->GetDirectBufferAddress(env,dst);
size_t dst_size = (size_t) (*env)->GetDirectBufferCapacity(env, dst);
jlong test = lzfse_decode_buffer(dst_buffer, dst_size, src_buffer, src_size, NULL);
return (jint) test;
}
然后我从 kt decode fun 调用:
val buf = ByteBuffer.wrap(byteArray)
val buf_out = ByteBuffer.allocateDirect(byteArray.size *20)
val size= decode(dstArray = buf_out, srcArray = buf)
但是 我的应用程序崩溃了
2020-02-25 20:12:25.717 28603-28603/com.android A/libc:致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR),tid 28603 () 中的故障地址 0x0 (),pid 28603 ()
我在哪里输了?
【问题讨论】:
-
@Nick 问题是关于我在添加库时出错的地方
标签: android android-ndk java-native-interface decode