2023-01-21 262
我的本地库代码:
#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");
}
// declare the native code function - must match main.cpp
private native String invokeNativeFunction();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// this is where we call the native code
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
库是成功编译的,libpacman.
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
因此,系统找不到库,但是如果解开APK文件 – 它在LIB目录中.为什么不在libs中?
编辑.
好的,现在我修复了软件包名称:
jstring Java_com_wiagames_pacman_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
return env->NewStringUTF("Hello from native code!");
}
android.mk和mainActivity.java是相同的.软件包是com.wiagames.PACMAN到处都是.但是我遇到了错误:
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
根据我在NDK中的经验,Android应用程序中的班级必须与
相同
Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction
Java_com_mindtherobot_samples_ndkfoo [package name]
NdkFooActivity [activity or class name]
invokeNativeFunction [function name]
您的className明显不是NdkFooActivity.还要确保您的Java软件包为com.mindtherobot.samples.ndkfoo.本机函数的名称和您称之为的Java上下文必须是同步的.通常,您会在已经编译的类上使用javah -jni生产本机标头,而不是Java源.
您传递给System.loadLibrary()的库名称应该只是pacman,而不是libpacman.
以上所述是小编给大家介绍的安卓NDK应用加载库失败,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26249.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态