我有libmath.so文件,它有原生方法。我需要在我的android代碼中調用本地方法。我創建了一個示例Android應用程序,並在libs/armeabi文件夾中添加了libmath.so,然後運行「右鍵單擊鼠標」 - > Android工具 - >添加本機支持。現在,在應用程序的jni文件夾內創建具有以下內容的下列文件。如何在Android代碼中使用.so文件來使用本地方法
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libmath
LOCAL_SRC_FILES := libmath.cpp
include $(BUILD_SHARED_LIBRARY)
libmath.cpp
#include <jni.h>
當我運行該項目作爲Android應用它顯示在控制檯如下: -
17:58:41 **** Build of configuration Default for project math ****
"F:\\Vinay\\Softwares\\android-ndk-r10d\\ndk-build.cmd" all
[armeabi] Compile++ thumb: math <= libmath.cpp
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libmath.so
[armeabi] Install : libmath.so => libs/armeabi/libmath.so
17:58:53 Build Finished (took 11s.695ms)
這裏是代碼我怎麼了加載庫: -
public class MathJni {
static {
System.loadLibrary("math");
}
public native String calc(String paramString);
}
public static final MathJni math = new MathJni();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String s= math.calc("help");
}
運行Android應用程序時我通過模擬器啓動應用程序我得到下面的錯誤後一次。
02-06 07:38:36.900: D/dalvikvm(831): Trying to load lib /data/app-lib/com.example.math-2/libmath.so 0xb3cd0848
02-06 07:38:36.900: D/dalvikvm(831): Added shared lib /data/app-lib/com.example.math-2/libmath.so 0xb3cd0848
02-06 07:38:36.910: D/dalvikvm(831): No JNI_OnLoad found in /data/app-lib/com.example.math-2/libmath.so 0xb3cd0848, skipping init
02-06 07:38:37.540: W/dalvikvm(831): No implementation found for native Lcom/example/math/MathJni;.calc:(Ljava/lang/String;)Ljava/lang/String;
02-06 07:38:37.540: D/AndroidRuntime(831): Shutting down VM
02-06 07:38:37.550: W/dalvikvm(831): threadid=1: thread exiting with uncaught exception (group=0xb3a20ba8)
02-06 07:38:37.570: E/AndroidRuntime(831): FATAL EXCEPTION: main
02-06 07:38:37.570: E/AndroidRuntime(831): Process: com.example.math, PID: 831
02-06 07:38:37.570: E/AndroidRuntime(831): java.lang.UnsatisfiedLinkError: Native method not found: com.example.math.MathJni.calc:(Ljava/lang/String;)Ljava/lang/String;
02-06 07:38:37.570: E/AndroidRuntime(831): at com.example.math.MathJni.calc(Native Method)
02-06 07:38:37.570: E/AndroidRuntime(831): at com.example.math.MainActivity.onCreate(MainActivity.java:16)
什麼可能是此錯誤的可能原因。
android代碼?從什麼時候是本地代碼而不是android代碼? – Deduplicator 2015-02-06 12:54:48
你沒有向我們展示你的C++代碼。 – Michael 2015-02-06 12:57:39
邁克爾是非常正確的。儘管缺乏信息,但我仍然猜測你在MathJni類中沒有一個calc方法,它將一個java.lang.String實例作爲參數加入... – 2015-02-06 13:00:29