这是我第一次写博客,希望自己能够坚持下去。平时都是我看别人的技术博客来做东西,对照了很多有时候会发现,对于同一问题的解决可能存在很多的方法,在看了很多方法后可能会产生混淆,导致折腾了很久,浪费了很多宝贵的时间。另一方面,为了巩固我所学到的东西,写一篇博客可以记忆的更牢。
1. android ndk 配置:在这个网址上下载所需要的资源http://developer.android.com/tools/sdk/ndk/index.html#Installing 然后解压资源包放到你能找到的地方
在eclipse中点击window->preferences 弹出一个对话框,左侧android->NDK ,然后在右边浏览你解压后ndk包的根目录.
apply->ok之后ndk就配置完成了。
2.创建含有本地方法的android工程
File->new->project....这儿和其他的android工程的创建相同,再不多说。
然后,加入本地方法支持
右键你所见的工程点击android tools ,再点击add Native Support,再点击project菜单选择build all 就会看到下面的东西。
这样我们就可以写C++的东西了。
3.编写含有本地方法的java代码和本地方法的C++代码实现
java代码
package com.example.nativeactivity;
public class NativeHello {
static
{
System.loadLibrary("NativeActivity");
}
public static native String jniNativeHello();
}
package com.example.nativeactivity;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv=(TextView) findViewById(R.id.tv1);
tv.setText(NativeHello.jniNativeHello());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4.在eclipse中配置执行javah命令生成jni的.h文件。run菜单下点击External tools->External tools configuration会弹出一个对话框
${system_path:javah}
${project_loc}
-verbose -jni -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}
选择到有native方法的java类然后点击run,就会看到下面的结果:
设置支持的平台:在jni目录下新建一个文件Application.mk,内容是:APP_ABI:=armeabi armeabi-v7a mips x86 表示支持所有的平台,编译运行之后会看到在各种平台上的.so文件
C++源代码:
//NativeActivity.cpp源文件
右击NativeActivitiy->run as ->android application programe 会看到以下结果:#include <jni.h> #include "com_example_nativeactivity_NativeHello.h" JNIEXPORT jstring JNICALL Java_com_example_nativeactivity_NativeHello_jniNativeHello (JNIEnv *env, jclass jc){ jstring js; js=env->NewStringUTF("Hello world"); return js; }
本人QQ:1091665839 希望可以帮到人。