最近,在学习android ndk开发,配置环境的时候遇到了些问题,总算不负有心人……在这里记录哈过程,与筒子们分享哈……想学NDK的筒子们有福啦……

教程本人亲测,非copy的……

如有什么不明白的地方,可以留言

大神也可以进来瞧瞧有什么不对的地方,请指教两招

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

NDK是一个工具集,可让您实现您的应用程序使用本机代码的语言,如CC + +Android NDK 是在SDK前面又加上了原生二字,即Native Development Kit,因此又被Google称为“NDK”

在此之前,Android平台的第三方应用程序均是依靠基于JavaDalvik特制虚拟机进行开发的。原生SDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的CC++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件。

NDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的CC++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件。NDK的公布让原来从事C语言开发者也参与到Android平台,也让java开发者方便的调用底层操作,特别是游戏开者,对引擎,速度等要求较高者,有了新的工具来实现所需功能,做出更加完美的程序。

对于某些类型的应用程序,这可以是有益的,所以你可以重用现有的代码库,这些语言编写的,但大多数应用程序不需要NDK

Android NDK R9更新:

Android NDK R9 主要是为了Android 4.3开发准备的

随着Android 4.3平台的发布,谷歌还发布了Android NDK (r9)的更新版本。新的NDK允许你本地访问Android 4.3中的OpenGL ES 3.0 API以及其他稳定的API。如果你在游戏或应用中使用了高性能图形功能,可以采用该版本。 

Android NDK 是什么?

Android NDK全称:Native Development Kit,即本地开发包。

1NDK是一系列工具的集合。

NDK提供了一系列的工具,这些工具对开发者的帮助是巨大的。它们能帮助开发者快速开发C(或C++)的动态库,并能自动将so库和java应用一起打包成apk

NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出哪些文件需要编译编译特性要求等),就可以创建出so库。NDK可以自动地将soJava应用一起打包,极大地减轻了开发人员的打包工作。

2NDK提供了一份稳定、功能有限的API头文件声明。Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

 

Android NDK配置教程:

工具环境(Android Developer Toolsandroid-ndk-r9dAndroid4.3 API18

对于Windows环境下NDK的开发,如果使用的NDKr7之前的版本,必须要安装Cygwin才能使用NDK;从r7开始,Google的提供了一个ndk-build.cmd的脚本,可以直接用它编译,而不需要使用Cygwin了。可以通过,配置path变量,直接在cmd下面运行ndk-build命令即可对android工程中的项目进行编译了。

1,JAVA_HOME : C:\Program Files (x86)\Java\jdk1.7.0_17  (jdk的安装目录)

Android NDK R9环境配置,开发教程_第1张图片

2CLASSPATH: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (固定不变)

Android NDK R9环境配置,开发教程_第2张图片

 

3ANDROID_NDK_HOME: D:\android-ndk-r9d (ndk的解压的目录)

Android NDK R9环境配置,开发教程_第3张图片

4PATH: 将这 “%JAVA_HOME%\bin; %ANDROID_NDK_HOME%;”加到原有的后面。

 Android NDK R9环境配置,开发教程_第4张图片

 

5test

在 cmd 中 输入 java versionndk-build ,没有出现

xxx不是内部或外部命令”即成功

 

 

Android NDK开发教程(请按照教程顺序操作,本人亲测)

工具环境(Android Developer Toolsandroid-ndk-r9dAndroid4.3 API18

1, 在 ant中(eclipse),新建一个android项目(NDKhi)。


2, 在 src下的com.example.ndkhi 新建 jniClient.java 文件。

此文件作用:

1,加载本地C库文件(.so)。

2,声明本地C库中的方法(static public native String sayHi())。

jniClient.java源码:

package com.example.ndkhi;

public class jniClient {

 static {

        System.loadLibrary("Ndkhi");

    }

static public native String sayHi();

}


3, 编译android文件

eclipse默认自动编译。在目录 workspace\NDKhi\bin\classes\com\example\ndkhi 中 查找 jniClient.class 文件是否存在,若不存在,手动编译android工程。


4, 使用 javah 工具 生成 c语言的.h头文件

在 工程NDKhi 中建立一个 名为 jni 的文件夹,打开window cmdcdjni目录下,

输入 javah –classpath ../bin/classes/com.example.ndkhi ,若命令执行成功,会在jni目录中生成 com_example_ndkhi_jniClient.h 文件。

刷新 eclipse中的工程NDKhi,即可见com_example_ndkhi_jniClient.h 文件。

com_example_ndkhi_jniClient.h源码(此文件为自动生成,一般不用修改):

/* DO NOT EDIT THIS FILE - it is machine generated */

#include 

/* Header for class com_example_ndkhi_jniClient */

 

#ifndef _Included_com_example_ndkhi_jniClient

#define _Included_com_example_ndkhi_jniClient

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_example_ndkhi_jniClient

 * Method:    sayHi

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_example_ndkhi_jniClient_sayHi

  (JNIEnv *, jclass);

#ifdef __cplusplus

}

#endif

#endif


5, 编写c语言程序

jni目录下,新建 名为 com_example_ndkhi_jniClient..c 的文件,实现 com_example_ndkhi_jniClient.h中声明的函数即可。

com_example_ndkhi_jniClient..c源码:

#include 

JNIEXPORT jstring JNICALL Java_com_example_ndkhi_jniClient_sayHi

  (JNIEnv *env, jclass arg)

{

return (*env)->NewStringUTF(env, "android ndk hi!!!");

}

 

6Android.mk 文件(简单理解为 makefile

   在 jni目录下,新建 名为Android.mk 文件。

内容如下:

LOCAL_PATH :$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Ndkhi

LOCAL_SRC_FILES := com_example_ndkhi_jniClient.c

include $(BUILD_SHARED_LIBRARY)

 修改xxx.c文件,和 Ndkhi 为自己新建的.c文件,的要生成的.so


7, 编译,链接C程序

打开windows cmdcd到 workspace\NDKhi 目录下,输入 ndk-build 命令

若成功如下图:

 Android NDK R9环境配置,开发教程_第5张图片

   

   编译链接成功后,会在 工程NDKhilibs/armeabi/下 生成 libNdkhi.so,

 

8, 编写MainActivity.java

源码:

package com.example.ndkhi;

import android.os.Bundle;

import android.R.string;

import android.app.Activity;

import android.view.Menu;

import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tView = (TextView) findViewById(R.id.tv);

String strHi = jniClient.sayHi();

tView.setText(strHi);

}

}

 

9运行android 工程 NDKhi

 Android NDK R9环境配置,开发教程_第6张图片

大功告成!!!

源码下载 

http://download.csdn.net/detail/gaoxin12345679/7841117

 

 

 


更多相关文章

  1. [Android 编译] Ubuntu 16.04 LTS 成功编译 Android 最新 源码教
  2. Android 开发之Windows环境下Android Studio安装和使用教程(图文
  3. Android Studio详细安装教程
  4. Android 6.0替换原系统Launcher傻瓜教程
  5. AndroidManifest.xml文件详解(manifest)

随机推荐

  1. Xml序列化的图文代码详解
  2. XML学习(三) js保存xml的示例代码分享
  3. XML串行化的示例代码分享
  4. 详细介绍XML操作总结的示例代码
  5. 使用xlst将xml转换html的示例代码
  6. XML实战秘籍第四卷:选单连动
  7. XML学习(二)详解DOM操作XML文档
  8. XML实战秘籍第三卷:动态分页
  9. XML学习(一)元素,属性,读取详解
  10. XML实战秘籍第二卷:动态查询