Android NDK开发 Android JNI项目创建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengzy1990/article/details/23181889

本篇文章只介绍android ndk在windows系统的编译环境配置方法

更新于2015年1月11日

将更加详细的介绍一个基本的Android Jni项目的建立。

步骤一:下图是必须的,配置好这一步骤就可以进行Android JNI项目的创建了。

骤二:新建一个Android项目,大家都会的,图片就不贴了。

步骤三:项目右键 -->Android Tools -->Add Native Support,然后弹出下图,填写的lib名称就是要用到的库

步骤四:上述步骤完成就工程出现了  jni 文件夹

步骤五:打开TestNdk1.cpp文件是下图:

步骤六:会出现以下问题,说明是一些文件库没有包含进去,所以我们做如下配置

项目--> 右键properties -->c/c++ General 如下图:

步骤七:点击Add出现如下:

步骤八:点击File system 选择路径NDK下的 D:\android-ndk-r9d\platforms\android-9\arch-arm\usr\include; NDK的版本和android-的版本根据自己的情况作出选择;

;OK之后会弹出选择是否重新编译,选择YES;如果发现 jni目录下的的TestNdk1.cpp的错误提示没有了,就成功了。

同时还需要设置一个属性。工程--->右键properties ---->C/c++ Build 在Builder Settings下取消掉use default build command 然后在Build Command中填上Ndk下的ndk-build.cmd的路径。

步骤九:接下来创建一个头文件

头文件的样例代码如下,以后的代码都可以用这个样例进行修改:(做了一个Add函数和一个返回字符串的函数)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_jni_TestJni */

#ifndef _Included_com_example_testndk1_TestJni
#define _Included_com_example_testndk1_TestJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_jni_TestJni
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_example_testndk1_TestJni_Add(JNIEnv *,
		jobject, jint, jint);
JNIEXPORT jstring JNICALL Java_com_example_testndk1_TestJni_getString(JNIEnv *,
		jobject);

#ifdef __cplusplus
}
#endif
#endif

详解:  <1>JNIEXPORTJNICALL都是JNI的关键字,表示此函数是要被JNI调用的。

<2>JNIEnv类型实际上代表了Java环境,通过这个JNIEnv* 指针,就可以对Java端的代码进行操作。例如,创建Java类中俄对象,调用Java对象的方法,获取Java对象中的属性等等。JNIEnv的指针会被JNI传入到本地方法的实现函数中来对Java端的代码进行操作。

<3>Java_com_example_testndk1_TestJni_add的起名方式:Java+包名+类名+方法名; “+” 用 “_”替代。方法名严格控制!!!!

<4>jstring 和 jint 是指的一个返回值类型;在#ifndef中需要修改后面的 包名_类名;

<5>注意类名,这个类名值的是获取 c/c++方法的 Java类; 接下来创建这个类,看下图:


步骤十:上面我们创建好了 调用Java类 和调用的 头文件接口; 但是我们还没具体函数的具体实现方式,我们在jni目录下生成的TestNdk.cpp内实现具体方法。代码如下:

#include <jni.h>
#include <stdio.h>
#include <math.h>
#include "TestNdk1.h"

JNIEXPORT jint JNICALL Java_com_example_testndk1_TestJni_Add(JNIEnv *, jobject,
		jint x, jint y) {
	return x + y;
}
JNIEXPORT jstring JNICALL Java_com_example_testndk1_TestJni_getString(
		JNIEnv *env, jobject) {
	return env->NewStringUTF("HelloWorld From TestNdk1.");
}


注意把创建的头文件包含到里面进去。

步骤十一:接下来就是Android Activity中的实现和调用了。最主要的就是装载库,创建自己创建的JNI类的对象。、

首先先创建一个类,来实现JNI的调用。如下类:

package com.example.testndk1;

public class TestJni {

	public native int Add(int x, int y);

	public native String getString();
}

在下面可以直接调用该类
package com.example.testndk1;

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

public class MainActivity extends Activity {
	TextView textView;
	//把创建的.so文件装载进去,这个是自己设置的那个名称。
	static {
		System.loadLibrary("TestNdk1");
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//创建TestJni对象。
		TestJni testJni = new TestJni();
		textView = (TextView) findViewById(R.id.tv);
		//调用我们的Add方法
		 int i=testJni.Add(2, 5555);
		// testJni.getString();
		 //把返回的字符串和计算出的结果显示在Textview上。
		textView.setText(testJni.getString()+"\n"+String.valueOf(i));

	}

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

}


步骤十二:综上我们就可以在运行了。
在运行时,console内会显示如下内容,出现这个就编译成功了。

D:\android-ndk-r9d\ndk-build.cmd all
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml   
[armeabi] Install        : libTestNdk1.so => libs/armeabi/libTestNdk1.so

**** Build Finished ****

下图是运行成功了


综上就是一个具体的工程。希望大家支持啊。内容我也会不断的更新,希望大家多支持,多评论会定时回复。转载请标明出处哦!!

这个工程下载地址:http://download.csdn.net/detail/fengzy1990/8351575


上面看懂了,下面的可以稍微看看。


本文写于2014年4月,更新本文时间于2015年1月8日

更新内容:从Android NDK的初始开发到现在NDK-r10版本,NDK的环境搭载变得更加容易了。

从NDK-R7版本以上NDK就集成了Cygwin,所以就不需要下载Cygwin。

只需要下载NDK后解压,然后在Eclipse中配置上NDK的路径就可以了。



以下2014年4月写;

一、

1、在google官网上下载Android NDK的压缩包,下载网站http://developer.android.com/tools/sdk/ndk/index.html;将解压到E:\Android\android-ndk

2、下载并安装Cygwin。windows系统需要直接进行交叉编译,因此需要安装一个Linux的模拟器Cygwin。到http://www.cygwin.com下载。

3、配置Cygwinde NDK的开发环境,默认Cygwin会安装在C盘的根目录下,修改为c://cygwin/home/username。 bash_profile文件,username会根据用户使用的用户名而变化。在.bash_profile文件的结尾处添加如下代码:

   ANDROID_NDK_ROOT=/cygdrive/e/android/android-ndk

   export ANDROID_NDK_ROOT

上面的代码说明了android ndk的所在目录

最后一步是测试开发环境是否正常工作,首先启动Cygwin,然后切换到<Android NDK>/build目录中,运行host-setup.sh文件。如果出现

到此为止,编译华宁已经安装配置完毕。

android ndk安装目录包括5个子目录

+apps   是android工程的保存目录。里面有hello-jin和tow-libs是NDK自带的两个示例目录。

+build 保存了交叉编译工具、编译脚本、配置文件

+ docs 是帮助文档的保存目录。

+out 是交叉编译的输出目录,保存输出的so文件。

+sources 是C/C++源代码文件的保存目录,下面的hello-jin和tow-libs子目录,分别保存了NDK自带示例所需要的C/C++源代码文件。 GNUmakfile文件和README.TXT文件分别是make工具的配置文件和NDK的说明文件。

二、

进行android ndk开发需要经过如下的步骤一般

1、建立Application.mk文件

2、建立Android工程

3、家里Android.mk文件

4、建立c源代码文件

5、编译共享库模块

6、运行Android程序。

 

 

 





猜你喜欢

转载自blog.csdn.net/fengzy1990/article/details/23181889