随笔记录使用DNK时遇到的几个问题

2 篇文章 0 订阅

ndk教程点击打开链接

第一个问题:没有找到jni下的Android.mk文件,console下提示如下

Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 11 in ./AndroidManifest.xml <Ps:此处警告可以无视>   
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk 
E:/job/ndk/android-ndk-r10/build/core/add-application.mk:209: *** Android NDK: Aborting...    .  Stop.

错误的原因是,我将 jni 文件加名称写成 jnk 了,相当无语,尽然纠结了很久才发现


修正之后,console下的输出为:
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 11 in ./AndroidManifest.xml    
[armeabi] Compile thumb  : hello-jni <= hello-jni.c
[armeabi] SharedLibrary  : libhello-jni.so
[armeabi] Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

此时项目下会多出来一些文件加及文件,截图如下


第二个问题:C文件中的函数命名错误,错误日志如下:

03-06 14:18:04.868: E/AndroidRuntime(18613): FATAL EXCEPTION: main
03-06 14:18:04.868: E/AndroidRuntime(18613): java.lang.UnsatisfiedLinkError: Native method not found: com.ex.testndk.HelloJni.stringFromJNI:()Ljava/lang/String;
03-06 14:18:04.868: E/AndroidRuntime(18613): at com.ex.testndk.HelloJni.stringFromJNI(Native Method)
03-06 14:18:04.868: E/AndroidRuntime(18613): at com.ex.testndk.HelloJni.onCreate(HelloJni.java:36)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.Activity.performCreate(Activity.java:5109)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.access$600(ActivityThread.java:148)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.os.Looper.loop(Looper.java:137)
03-06 14:18:04.868: E/AndroidRuntime(18613): at android.app.ActivityThread.main(ActivityThread.java:5138)
03-06 14:18:04.868: E/AndroidRuntime(18613): at java.lang.reflect.Method.invokeNative(Native Method)
03-06 14:18:04.868: E/AndroidRuntime(18613): at java.lang.reflect.Method.invoke(Method.java:511)
03-06 14:18:04.868: E/AndroidRuntime(18613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-06 14:18:04.868: E/AndroidRuntime(18613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-06 14:18:04.868: E/AndroidRuntime(18613): at dalvik.system.NativeStart.main(Native Method)
问题截图

此处的命名应该是对应java源码文件目录的(com.ex.testndk),正确写法是:Java_com_ex_testndk_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )【此处开头的Java必须要是大写】,一下为正确截图:


好了,这样就OK了,对项目Run As,结果如下:


第三:  友情来接  其它一些常见问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值