您的位置:首页 > 移动开发 > Android开发

Android NDK开发环境搭建

2016-05-28 21:43 549 查看
一、综述

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

(1)eclipse的NDK Builder配置;

(2)eclipse的NDK环境配置。

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

二、NDK环境配置

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



(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”来选取目录)。



(d)继续在这个【Edit Configuration】对话框中,配置选项卡【Refresh】。

勾选“Refresh resources upon completion”,

勾选“The entire workspace”,

勾选“Recuresively include sub-folders”。



(e)继续在【Edit Configuration】对话框中,配置选项卡【Build options】。

勾选“After a “Clean””,(勾选这个操作后,如果你想编译ndk的时候,只需要clean一下项目 就开始交叉编译)

勾选“During manual builds”,

勾选“During auto builds”,

勾选“Specify working set of relevant resources”。



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


到此,编译环境以及成功搭建完毕!可以看到,已经自动生成了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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: