转载标明出处:http://blog.csdn.net/ikerpeng/article/details/45393223

要解决的问题:

Android代码调用 优秀的C++代码,高效的实现需要的功能。


总体的思路:


1. 完成 自己的Android代码;

2. 将c++代码生成 .so;

3. 将.so 库放在Android 的libs文件夹当中;

4. Android代码当中定义待调用接口函数,并导入库。


具体的操作:

1. 完成 自己的Android代码;

   这一部分就是Android开发的事情了,不是我的重点和擅长,相信是你的擅长;

2. 将c++代码生成 .so;

  我假设你是有你需要的功能的c++代码的。(没有你还移植个屁啊O(∩_∩)O哈哈~)

  2.1  c++代码修改

    这一部分的工作,三个重要的点:

  1,头文件加入: #include

  2,加入 extern“c”,处理C++代码;

  3,输出的接口函数命名一定要规范;Java_包_类_方法 (JNIEnv *, jclass,);

  例子:

#include

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
  (JNIEnv *, jclass, jstring, jint);


#ifdef __cplusplus
}
#endif

这里只是头文件,具体的实现你可以在CPP文件里面实现;

  2.2 Android.mk 文件的修改

  将刚才的源文件加进去,依赖的库加进去。(一般来说还需要Application.mk的,但是几乎都是一样的,复制过去就好)

 例子:

 Android.mk 文件很像Makefile文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)



#OPENCV_LIB_TYPE:=SHARED
include ../../../opencvsdk/native/jni/OpenCV.mk


LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl


LOCAL_MODULE     := detection_based_tracker

include $(BUILD_SHARED_LIBRARY)


Application.mk 文件

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8


  2.3 ndk-build编译

     将以上4个文件放在jni文件夹里面,然后准备开始编译.so文件。

     只要你安装的版本在r7 以上就可以不需要其他的插件了。非常的方便,配置好环境变量,从CMD进入到jni 文件或是它的上一级文件夹,执行ndk-build命令,开始编译。

     更加详细的参考:http://blog.csdn.net/ikerpeng/article/details/42643223

3. 将.so 库放在Android 的libs文件夹当中;

   将刚才编译生成 的lib文件下下面的.so文件拷贝出来,连带所在的文件夹(这个是必须的),放到你的Android工程里面的libs文件夹;

4. Android代码当中定义待调用接口函数,并导入库。

  定义好接口函数,这个函数名一定和C++中的最后那个名字一样,然后 System.loadLibrary();导入;

  就可以在Android的代码当中代用这个函数了。

例子:

public class PedDetectionNative {
static {
System.loadLibrary("ped_detection");
}
public static native boolean ped(byte[] yuv);
}

接下来你就可以在Android的代码里面使用 ped()这个函数了。

转载标明出处:http://blog.csdn.net/ikerpeng/article/details/45393223


以上完成

iker Cross

2015年 4月 30日


更多相关文章

  1. C语言函数的递归(上)
  2. Android资源文件中特殊字符未转义引起的编译错误
  3. Android上跑OpenCV
  4. Android第十三期 - 百度云推送(百度后台版)
  5. android保存文件到SD卡中
  6. 安卓自动生成代码插件-Android(安卓)code Generator
  7. Android工程引用其他项目
  8. Android中AVD(Android(安卓)Virtual Device)不能启动的处理方法
  9. Android中资源的引用

随机推荐

  1. Android绘制进阶之五:位图的处理
  2. Android RecyclerView(1)——范例篇
  3. android 仿微信5版本实现滑动导航条
  4. Android中自定义通用Json解释器
  5. Intent在Android中的几种用法 .
  6. Android Gson 解析泛型报错
  7. Android 6.0 关于WiFi的改变
  8. Android打Jar包注意事项
  9. mac下反编译android apk
  10. android 打开微信扫一扫