1. 配置好android 开发环境:参考http://blog.csdn.net/hhao137/article/details/4314862
2.新建一个android 项目,本人项目命名为:CPP,并且生成的activity 命名为:AndroidCppActivty
3.生成本地的jni文件夹,操作如下:右击CPP项目,选择Android Tools,再选择Add Native Suport,然后在CPP项目中会生成jni文件夹
现对ANDROID调用C++与C分别进行说明:
1)调用本地C++代码:
1. 在jni 中的Android.mk 中输入如下命令:(注:本博客先对android 调用C++的进行说明,所以只放入了CPP后缀的文件)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := learningcpp
LOCAL_SRC_FILES := learningcpp.cpp
include $(BUILD_SHARED_LIBRARY)
2.在jni 中新建一个Application.mk文件,输入如下命令:
APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI:=armeabi armeabi-v7a
3.在jni 中新建learning.cpp文件,其中包括的代码如下(注意此处要加上extern "C"命令,这是与android 调用C不同的地方):
#include
#include
#include
using namespace std;
extern "C"{
jstring Java_com_example_cpp_AndroidCppActivity_getStringCpp( JNIEnv* env,jobject thiz )//注意这个方法的命名
{
return env->NewStringUTF("android with cpp!");
}
}
4. 在我们的activity类中的代码如下(主要是显示调用是否成功,所以很简单):
package com.example.cpp;
import android.os.Bundle;
import android.app.Activity;
import android.view.Gravity;
import android.view.Menu;
import android.widget.Toast;
public class AndroidCppActivity extends Activity {
public native String getStringCpp();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast t = Toast.makeText(getApplicationContext(),getStringCpp(), Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
}
static{
System.loadLibrary("learningcpp");
}
}
5. 进行编译运行,结果如下:
为了的android中使用opencv的C++代码,可对上述再进行如下配置:
下载一个OpenCV-2.4.7.1-android-sdk,解压到工作空间中,再导入到eclipse中,最后把它当作AndroidCppActivty一个库文件,如下:
2.为了使用C++中的opencv函数,修改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 E:\android\OpenCV-2.4.7.1-android-sdk\sdk\native\jni\OpenCV.mk //注意这个文件的路径
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE :=learningcpp
LOCAL_SRC_FILES := learningcpp.cpp
include $(BUILD_SHARED_LIBRARY)
这样我们就可以使用opencv的C++代码
2)调用本地C代码:
1. 在jni 中的Android.mk 中的现在命令后面输入如下命令:(注:本博客现对android 调用C的进行说明)
include $(CLEAR_VARS)
LOCAL_MODULE := learningc
LOCAL_SRC_FILES := learningc.c
include $(BUILD_SHARED_LIBRARY)
3.在jni 中新建learning.c文件,其中包括的代码如下(注意此处可不加上extern "C"命令,这是与android 调用C++不同的地方):
#include
#include
jstring Java_com_example_cpp_AndroidCppActivity_getStringC( JNIEnv* env,jobject thiz )
{
return (*env)->NewStringUTF(env,"android with c!");//与C++是不一样的
}
4. 在我们的activity类中的代码如下(主要是显示调用是否成功,所以很简单):
package com.example.cpp;5. 进行编译运行,结果如下: