平台
安装配置不再赘述
- Android NDK r10d
- Eclipse Kelper
- Android SDK
step1 Create a New Android project
创建一个新的android application project
step2 Add Native Support
工程右键,android tools–>add native support
工程中就自动生成jni文件夹并生成和工程名相同的对应cpp文件以及makefile文件
step3 Build Project
一般工程都是build automatically
检查CDT Build Console中,可以看到build过程
18:40:32 **** Build of configuration Default for project TestJNI ****
"F:\\android-ndk-r10d\\ndk-build.cmd" all
Android NDK: WARNING: APP_PLATFORM android-21 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Compile++ thumb: TestJNI <= TestJNI.cpp
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libTestJNI.so
[armeabi] Install : libTestJNI.so => libs/armeabi/libTestJNI.so
18:40:41 Build Finished (took 8s.417ms)
step4 Open up the Activity class
根据以下需求在activity中添加
step5 Add a function which we will implement natively in C++
即在android activity里建立和c++文件交互的功能函数
比如定义原生方法,从JNI里的C++文件获取String
public native String stringFromJNICPP();
……
public void onCreate(Bundle savedInstanceState){
……
TextView myTextField = (TextView)findViewById(R.id.myTextField);
myTextField.setText(stringFromJNICPP());
}
step6 Load the native library
在acitivity里需要加载生成的动态连接库
static {
System.loadLibrary("TestJNI");//前面自己定义的libs里生成的so文件名
}
step7 Add the native C++ code
开始写c++文件里的功能
原始的c++文件中只有一句
#include <jni.h>
在后面加上自己要写的内容
比如返回一个“Hello From CPP”String
#include <jni.h>
#include <string.h>
#include <android/log.h>
extern "C" {
JNIEXPORT jstring JNICALL Java_com_example_testjni_TestJNI_stringFromJNICPP(JNIEnv * env, jobject obj);
};//com_example_testjni_TestJNI为自己的包名里对应的activity名
JNIEXPORT jstring JNICALL Java_com_example_testjni_TestJNI_stringFromJNICPP(JNIEnv * env, jobject obj)
{
return env->NewStringUTF("Hello From CPP");
}
step8 build&run
在project里选择Build Project,并且开启一个虚拟机run以下建立的ndk工程
既可以在activity里显示从c++文件传送过来的string数据