My native library code:
#include <string.h> #include <jni.h> jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { return env->NewStringUTF("Hello from native code!"); }
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libpacman LOCAL_SRC_FILES := main.cpp LOCAL_CFLAGS := -DANDROID_NDK LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
MainActivity.java:
public class MainActivity extends Activity { static { System.loadLibrary("libpacman"); }
The library compiled successfully, and libpacman.so is in the libs / armeabi directory, but logcat says:
E/AndroidRuntime(13060): FATAL EXCEPTION: main E/AndroidRuntime(13060): java.lang.ExceptionInInitializerError E/AndroidRuntime(13060): at java.lang.Class.newInstanceImpl(Native Method) E/AndroidRuntime(13060): at java.lang.Class.newInstance(Class.java:1319) E/AndroidRuntime(13060): at android.app.Instrumentation.newActivity(Instrumentation.java:1053) E/AndroidRuntime(13060): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) E/AndroidRuntime(13060): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) E/AndroidRuntime(13060): at android.app.ActivityThread.access$600(ActivityThread.java:130) E/AndroidRuntime(13060): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) E/AndroidRuntime(13060): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(13060): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(13060): at android.app.ActivityThread.main(ActivityThread.java:4745) E/AndroidRuntime(13060): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(13060): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(13060): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) E/AndroidRuntime(13060): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) E/AndroidRuntime(13060): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(13060): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libpacman: findLibrary returned null E/AndroidRuntime(13060): at java.lang.Runtime.loadLibrary(Runtime.java:365) E/AndroidRuntime(13060): at java.lang.System.loadLibrary(System.java:535) E/AndroidRuntime(13060): at com.example.pacman.MainActivity.<clinit>(MainActivity.java:11) E/AndroidRuntime(13060): ... 15 more W/ActivityManager( 315): Force finishing activity com.example.pacman/.MainActivity
So, the system cannot find the library, but if the unzip APK file is in the lib directory. Why not in libraries?
Change OK, now I fixed the package names:
jstring Java_com_wiagames_pacman_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { return env->NewStringUTF("Hello from native code!"); }
Android.mk and MainActivity.java are the same. The com.wiagames.pacman package is everywhere. But I get an error message:
E/AndroidRuntime(23084): FATAL EXCEPTION: main E/AndroidRuntime(23084): java.lang.ExceptionInInitializerError E/AndroidRuntime(23084): at java.lang.Class.newInstanceImpl(Native Method) E/AndroidRuntime(23084): at java.lang.Class.newInstance(Class.java:1319) E/AndroidRuntime(23084): at android.app.Instrumentation.newActivity(Instrumentation.java:1053) E/AndroidRuntime(23084): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) E/AndroidRuntime(23084): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) E/AndroidRuntime(23084): at android.app.ActivityThread.access$600(ActivityThread.java:130) E/AndroidRuntime(23084): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) E/AndroidRuntime(23084): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(23084): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(23084): at android.app.ActivityThread.main(ActivityThread.java:4745) E/AndroidRuntime(23084): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(23084): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(23084): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) E/AndroidRuntime(23084): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) E/AndroidRuntime(23084): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(23084): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libpacman: findLibrary returned null E/AndroidRuntime(23084): at java.lang.Runtime.loadLibrary(Runtime.java:365) E/AndroidRuntime(23084): at java.lang.System.loadLibrary(System.java:535) E/AndroidRuntime(23084): at com.wiagames.pacman.MainActivity.<clinit>(MainActivity.java:13) E/AndroidRuntime(23084): ... 15 more W/ActivityManager( 315): Force finishing activity com.wiagames.pacman/.MainActivity
source share