前几篇中一直在通过Android做JNI调用,关于JNI的配置请见:http://blog.csdn.net/watkinsong/article/details/9849973

但是前一段时间就遇到了整个工程编译都没有问题,但是没有办法运行的问题,编译结果提示如下:

Your Project contains error(s), please fix them before running your application.

但是,整个工程的编译是没有问题的。

查了很多资料,网上大部分都说是证书过期,但是貌似我这里不适用,也按照网上说的做了,没效果,而且证书过期需要一年的时间,我才搞android不到两个星期。

14:15:00 **** Auto Build of configuration Default for project IBMFaceDetectDemo ****
"D:\\WeiSONG\\sdk\\Android\\android-ndk-r9\\ndk-build.cmd" -j2
Android NDK: WARNING: APP_PLATFORM android-18 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
"Compile++ thumb : Canny <= Canny.cpp
"Compile++ thumb : Canny <= Canny.cpp
Install : libnative_camera_r2.2.0.so => libs/armeabi-v7a/libnative_camera_r2.2.0.so
Install : libnative_camera_r2.3.3.so => libs/armeabi-v7a/libnative_camera_r2.3.3.so
Install : libnative_camera_r3.0.1.so => libs/armeabi-v7a/libnative_camera_r3.0.1.so
Install : libnative_camera_r4.0.0.so => libs/armeabi-v7a/libnative_camera_r4.0.0.so
Install : libnative_camera_r4.0.3.so => libs/armeabi-v7a/libnative_camera_r4.0.3.so
SharedLibrary : libCanny.so
Install : libnative_camera_r2.2.0.so => libs/armeabi/libnative_camera_r2.2.0.so
Install : libnative_camera_r3.0.1.so => libs/armeabi/libnative_camera_r3.0.1.so
Install : libnative_camera_r2.3.3.so => libs/armeabi/libnative_camera_r2.3.3.so
Install : libnative_camera_r4.0.0.so => libs/armeabi/libnative_camera_r4.0.0.so
Install : libnative_camera_r4.0.3.so => libs/armeabi/libnative_camera_r4.0.3.so
SharedLibrary : libCanny.so
Install : libCanny.so => libs/armeabi/libCanny.so
Install : libCanny.so => libs/armeabi-v7a/libCanny.so 14:15:03 Build Finished (took 2s.670ms)

可以看到,整个程序编译完全正常,而且整个项目没有任何错误提示,红叉啊什么的

上图中可以看到整个项目没有任何错误提示。

那么?项目的问题在哪里呢?仔细看看编译的过程中,闪过了一些红的错误提示,但是由于安装了ADT的原因,这个时候的输出都是编译的信息,需要切换到Eclipse系统的输出看看错误,我就是因为才接触Eclipse不知道中间还输出了其他的错误信息

切换到Eclipse的控制台输出,会看到下面的错误提示:

[2013-09-11 14:09:54 - IBMFaceDetectDemo] Error generating final archive: Found duplicate file for APK: lib/armeabi/libnative_camera_r2.2.0.so
Origin 1: D:\workspace\IBMFaceDetectDemo\libs\armeabi\libnative_camera_r2.2.0.so
Origin 2: D:\WeiSONG\sdk\opencv2.4android\OpenCV-2.4.0\libs\armeabi\libnative_camera_r2.2.0.so
[2013-09-11 14:15:50 - IBMFaceDetectDemo] Error generating final archive: Found duplicate file for APK: lib/armeabi/libnative_camera_r2.2.0.so
Origin 1: D:\workspace\IBMFaceDetectDemo\libs\armeabi\libnative_camera_r2.2.0.so
Origin 2: D:\WeiSONG\sdk\opencv2.4android\OpenCV-2.4.0\libs\armeabi\libnative_camera_r2.2.0.so

这里提示了动态链接库重复了,再仔细看看我们的工程目录:

NDK 在编译的时候根据Opencv.mk的参数设置,讲那几个关于摄像头的动态链接库复制到libs文件夹里面了,然后我们的工程还引用了Opencv2.4的这个lib库,所以造成了本工程的lib和opencv2.4的外部lib冲突了。

看一下我们原来的Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) OPENCV_LIB_TYPE:=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include D:/WeiSONG/sdk/opencv2.4android/OpenCV-2.4.0/share/OpenCV/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := Canny
LOCAL_SRC_FILES := Canny.cpp
include $(BUILD_SHARED_LIBRARY)

这个mk文件中,没有定义 下面这句话,所以会导致opencv.mk在编译文件的时候讲动态链接库复制了

OPENCV_CAMERA_MODULES:=off

看一下opencv.mk的内容(部分):

ifeq (${OPENCV_CAMERA_MODULES},off)
OPENCV_CAMERA_MODULES:=
else
ifeq ($(TARGET_ARCH_ABI),armeabi)
OPENCV_CAMERA_MODULES:= native_camera_r2.2.0 native_camera_r2.3.3 native_camera_r3.0.1 native_camera_r4.0.0 native_camera_r4.0.3
endif
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
OPENCV_CAMERA_MODULES:= native_camera_r2.2.0 native_camera_r2.3.3 native_camera_r3.0.1 native_camera_r4.0.0 native_camera_r4.0.3
endif
ifeq ($(TARGET_ARCH_ABI),x86)
OPENCV_CAMERA_MODULES:= native_camera_r2.3.3 native_camera_r3.0.1 native_camera_r4.0.3
endif
endif

可以看到如果不定义

OPENCV_CAMERA_MODULES

这个变量的话,会自动复制一些摄像头相关的链接库。

所以在我们的工程的Android.mk中,应该添加上

OPENCV_CAMERA_MODULES:=off

这一句,然后就可以正常的运行你的程序了,在libs文件夹中也不会看到摄像头相关的链接库了。

新的Android.mk代码:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=off
OPENCV_LIB_TYPE:=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include D:/WeiSONG/sdk/opencv2.4android/OpenCV-2.4.0/share/OpenCV/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := Canny
LOCAL_SRC_FILES := Canny.cpp
include $(BUILD_SHARED_LIBRARY)

然后在编译信息提示中,也不会看到像原来的提示信心那么多了:

14:30:41 **** Auto Build of configuration Default for project IBMFaceDetectDemo ****
"D:\\WeiSONG\\sdk\\Android\\android-ndk-r9\\ndk-build.cmd" -j2
Android NDK: WARNING: APP_PLATFORM android-18 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
"Compile++ thumb : Canny <= Canny.cpp
"Compile++ thumb : Canny <= Canny.cpp
SharedLibrary : libCanny.so
SharedLibrary : libCanny.so
Install : libCanny.so => libs/armeabi-v7a/libCanny.so
Install : libCanny.so => libs/armeabi/libCanny.so 14:30:43 Build Finished (took 2s.195ms)

Android JNI 编译正确 但是提示程序有错误无法运行 而且还看不到任何错误提示 的解决方法的更多相关文章

  1. 关于asp.net 网站网站发布时提示:错误 27 对路径 AppData\Local\Temp\~632b\bin\App_Code.compil的解决方法

    关于asp.net 网站网站发布时提示:错误 27 对路径 AppData\Local\Temp\~632b\bin\App_Code.compil的解决方法 问题如下图所示,方法是去掉: <i ...

  2. OpenCV程序在Debug时出现「PDB文件无法加载」的一个解决方法

    这几天毕设要用到OpenCV,按照网上的教程来搭建开发环境. 用的是OpenCV 3.0 beta + Visual Studio Community 2013.我的系统64位是Win 8.1,但在加 ...

  3. 我的Android进阶之旅------&gt;Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法

    今天使用第三方Jar包afinal.jar时候.想看一下源码,无法看 然后像加入jar相应的源代码包.也无法加入相应的源代码,报错例如以下:The current class path entry b ...

  4. 我的Android进阶之旅------>Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法

    今天使用第三方Jar包afinal.jar时候,想看一下源代码,无法看 然后像添加jar对应的源码包,也无法添加相应的源代码,报错如下:The current class path entry bel ...

  5. 使用vue-cli创建工程的时候提示vue-cli Failed to download repo vuejs-templates/webpack-simple:self signed certificate in certificate chain的解决方法

    最近在使用 vue-cli 脚手架创建项目的时候,遇到 webpack-simple 模板下载不成功的情况,提示 vue-cli Failed to download repo vuejs-templ ...

  6. centos7编译安装LNMP(nginx-1.16.0,mysql8.0.16,php-7.3.6)常见问题报错及解决方法

    LNMP的安装与配置 nginx-1.16.0安装及配置: 第一步:前往官网下载nignx源码包 下载完毕后上传至服务器(先安装lrzsz) yum -y install lrzsz 安装完毕后执行: ...

  7. 在运行Hibernate Hello World程序的时候,抛如下错误: view plain Exception in thread "main" org.hibernate.exception.LockAcquisitionException 解决方法

    在运行Hibernate Hello World程序的时候,抛如下错误: Exception in thread "main" org.hibernate.exception.Lo ...

  8. Adobe Flash player 10 提示:Error#2044:未处理的IOErrorEvent. text=Error#2036:加载未完成 的解决方法

    在“我的电脑”上单击鼠标右键,选择管理,在管理窗口的左栏中打开“服务和应用程序”,点击“服务”,在右边窗口中双击打开名称为“Smart Card”的服务,“常规”->“启动类型”选为自动,“登录 ...

  9. Visual Studio提示“无法启动IIS Express Web服务器”或者“无法连接Web服务器IIS Express ”的解决方法

    解决办法:找到程序根目录,删除隐藏的.vs文件夹即可. 问题原因:一般是项目拷贝或者系统设置变更所造成的.

随机推荐

  1. css中的定位

    上一篇博客,我大概介绍了下浮动的使用及行为.其实在整个文档布局中,定位也对我们整个的页面排版有非常好的帮助,当然前提是使用得当. 一.定位分类: a.静态定位  position:static;   ...

  2. Android 中 ListView 常用属性合集

    class ListView.FixedViewInfo//用来在列表内展现一个固定位置视图,如在列表顶端的header和在列表底端的footer 一.XML属性 1.ListView的XML属性 a ...

  3. POJ 2451 Uyuw's Concert(半平面交nlgn)

    //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> # ...

  4. 第2次增加ssh 主机信任脚本

    dr-mysql01:/root# cat a1.sh #用户名 uname="$1" #密码 passwd="$2" #执行检测并安装expect模块 ep= ...

  5. [置顶] jeecg-framework-3.3.2-RELEASE 最新版本发布

      平台介绍 JEECG(J2EE CodeGeneration)是一款基于代码生成器的智能开发平台,引领新开发模式(OnlineCoding模式->代码生成器模式->手工MERGE智能开 ...

  6. day8 - isinstance--issubclass-异常处理-自定义异常

    一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 __author__ = 'Administrator' class Foo(object): pass obj ...

  7. IntelliJ IDEA 开发swing(二)

    原文:idea开发swing(二) 闲话少说,书接idea开发swing(一). 程序编译完成后,需要打包发布,如果有fat_jar的同学可以通过该插件打包,这里是使用ant来打包,步骤如下: 一.编 ...

  8. JAVA中MESSAGEBOX,静态类直接引用

    原文:JAVA中MESSAGEBOX,静态类直接引用 package cisdi.mes.wrm.mcode.serviceImpl; import javax.persistence.Entity; ...

  9. U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法

    1.查询磁盘 cd /dev ls 2.查询结果 sda 是我的硬盘对应的文件名(我机子只有一块硬盘),所以sda4就是U盘对应的文件名了,可以看到是sda4.至此我们重启一下,回到第一个图片所示的界 ...

  10. Netty In Action中文版 - 第五章:Buffers(缓冲)

    本章介绍 ByteBuf ByteBufHolder ByteBufAllocator 使用这些接口分配缓冲和运行操作 每当你须要数据传输时,它必须包括一个缓冲区.Java NIO API自带的缓冲区 ...