Android NDK开发环境搭建

一、综述

        有很多介绍搭建Android NDK开发环境的文章,但是,大部分都是过时的,总结一下,大致有两种:

(1)eclipse的NDK Builder配置;

(2)eclipse的NDK环境配置。

        一般,NDK是r7之前的版本,必须要安装Cygwin。本文使用r10版本。下面分别介绍这两种开发方式的搭建。先安装好ndk,安装过程这里就不说了。


二、NDK环境配置

(1)打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径。

Android NDK开发环境搭建_第1张图片

(2)在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字。

这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,HelloJNI.cpp就是NDK的源文件。

(3)编辑HelloJNI.cpp源文件,相关代码如下:

#include <string.h>
#include <jni.h>
#include <stdio.h>

jstring JNICALL hello_jni(JNIEnv *env, jobject thiz) {
	return env->NewStringUTF("Hello jni");
}

(4)编译生成so库,点击小锤子就可以编译jni代码,生产so库了。


三、NDK Builder配置

        首先,在工程目录下建立jni目录,并建立HelloJNI.cpp文件和Android.mk文件。可以将上面的对应的文件拷贝过来。然后,新建、并配置一个Builder,如下:

(a)Project->Properties->Builders->New,新建一个Builder。
(b)在弹出的【Choose configuration type】对话框,选择【Program】,点击【OK】:
(c)在弹出的【Edit Configuration】对话框中,配置选项卡【Main】。
在“Name“中输入新builders的名称(这个名字可以任意取)。
在“Location”中输入nkd-build.cmd的路径(这个是下载完ndk8后解压后的路径,这个建议放在根目录下面,路径不能有空格和中文)。根据各自的ndk路径设置,也可以点击“Browser File System…”来选取这个路径。
在“Working Diretcoty”中输入本工程的位置(也可以点击“Browse Workspace”来选取目录)。

Android NDK开发环境搭建_第2张图片

(d)继续在这个【Edit Configuration】对话框中,配置选项卡【Refresh】。
勾选“Refresh resources upon completion”,
勾选“The entire workspace”,
勾选“Recuresively include sub-folders”。

Android NDK开发环境搭建_第3张图片

(e)继续在【Edit Configuration】对话框中,配置选项卡【Build options】。
勾选“After a “Clean””,(勾选这个操作后,如果你想编译ndk的时候,只需要clean一下项目 就开始交叉编译)
勾选“During manual builds”,
勾选“During auto builds”,
勾选“Specify working set of relevant resources”。

Android NDK开发环境搭建_第4张图片

点击“Specify Resources…”勾选TestNdk工程中新建的“jni“目录,点击”finish“。 点击“OK“,完成配置。

  Android NDK开发环境搭建_第5张图片

到此,编译环境以及成功搭建完毕!可以看到,已经自动生成了hellojin.so文件。



四、编写java测试代码。

(1)编写java代码。

package com.example.hellojni;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {

	static {
		System.loadLibrary("HelloJNI");
	}

	public native String hello();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tvText =  (TextView) findViewById(R.id.hello);
		tvText.setText( hello());  
	}

	@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;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

(2)测试。下载到虚拟机中就可以看到helloJNI了。




你可能感兴趣的:(android,jni,NDK,builder)