JNI와 함께 네이티브 코드를 사용하는 Android 앱을 만들고 있는데 질문이 있습니다.
.so 라이브러리를 만들기 위해 C ++로 코드를 작성했습니다. 그런 다음이 .so를 내 프로젝트에서 사용하고 Nexus 5에서는 잘 작동하지만 다른 장치에서 시도하면 앱이 충돌합니다.
나는 많은 테스트를했고 내 프로젝트에서 this .so를 사용하여 실패했지만 nexus 5에서는 Ok이고 다른 장치에서는 그렇지 않기 때문에 모르겠습니다.
이것은 내 Android.mk입니다.
LOCAL_PATH := $(call my-dir)
# Create `DSP-prebuilt` local prebuilt library from `DSP.so`
include $(CLEAR_VARS)
LOCAL_MODULE := DSP-prebuilt
LOCAL_SRC_FILES := lib/libDSP.so
LOCAL_EXPORT_C_INCLUDES := C:\libreriasSISTOLE\SP++3.0\SP++3.0\include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := nativo.cpp Parameters.cpp Pre_proc_mono.cpp Calc_ToF_low.cpp Runnable.cpp Trilateracion.cpp Tracking.cpp qr_solve.cpp r8lib.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
LOCAL_MODULE := native_code
# Reference the local prebuilt:
LOCAL_SHARED_LIBRARIES := DSP-prebuilt
include $(BUILD_SHARED_LIBRARY)
그리고 이것은 내 logcat :
01-23 14:42:12.556: E/AndroidRuntime(19380): FATAL EXCEPTION: main
01-23 14:42:12.556: E/AndroidRuntime(19380): java.lang.ExceptionInInitializerError
01-23 14:42:12.556: E/AndroidRuntime(19380): at com.sistoleaudiocapture.Sistole_main.onCreate(Sistole_main.java:62)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.Activity.performCreate(Activity.java:5244)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2037)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2098)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.ActivityThread.access$600(ActivityThread.java:138)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.os.Looper.loop(Looper.java:137)
01-23 14:42:12.556: E/AndroidRuntime(19380): at android.app.ActivityThread.main(ActivityThread.java:4905)
01-23 14:42:12.556: E/AndroidRuntime(19380): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:42:12.556: E/AndroidRuntime(19380): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 14:42:12.556: E/AndroidRuntime(19380): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
01-23 14:42:12.556: E/AndroidRuntime(19380): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
01-23 14:42:12.556: E/AndroidRuntime(19380): at dalvik.system.NativeStart.main(Native Method)
01-23 14:42:12.556: E/AndroidRuntime(19380): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]: 217 could not load needed library 'libDSP.so' for 'libnative_code.so' (load_library[1093]: Library 'libDSP.so' not found)
01-23 14:42:12.556: E/AndroidRuntime(19380): at java.lang.Runtime.loadLibrary(Runtime.java:370)
01-23 14:42:12.556: E/AndroidRuntime(19380): at java.lang.System.loadLibrary(System.java:535)
01-23 14:42:12.556: E/AndroidRuntime(19380): at com.sistoleaudiocapture.Processing.<clinit>(Processing.java:11)
01-23 14:42:12.556: E/AndroidRuntime(19380): ... 15 more
마지막으로 이것은 네이티브 라이브러리를로드하는 내 Processing 클래스입니다.
package com.sistoleaudiocapture;
import android.util.Log;
public class Processing {
private long retorno;
private double prueba[];
static {
System.loadLibrary("native_code");
}
public Processing() {
retorno = init_variables();
}
public double[] prueba(byte[] data, int lenbytes) {
prueba = prueba_nativa(retorno, data, lenbytes);
return (prueba);
}
private static native long init_variables();
private static native double[] prueba_nativa(long retorno, byte[] data,
int lenbytes);
}
[해결됨]
System.loadLibrary("DSP");
네이티브 라이브러리를로드하기 전에 Processing 클래스에 추가 했습니다.
217 could not load needed library 'libDSP.so' for 'libnative_code.so' (load_library[1093]: Library 'libDSP.so' not found
종속성을 미리로드해야합니다. 그것들도 존재하는지 확인하십시오.
static {
System.loadLibrary("DSP");
System.loadLibrary("native_code");
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다