第 0 步:下载工具
好了,现在就开始吧!你需要下载 NDK。先来开始下载,因为在下载的过程中你可以检查一下,确保所需要用到的其余工具的版本都正确。
从 Android 网站下载适合你的操作系统的 NDK。
现在,对照下列检查你的工具版本:
1、如果在 Windows 下,Cygwin 1.7 或更高版本
2、将 awk 升级到最新版本(我们使用的是 20070501)
3、GNU Make 3.81 或更高版本(我们使用的是 3.81)
如果其中任何一个的版本太旧,请在继续之前先升级。
第 1 步:安装 NDK
既然 NDK 已经下载完成(没错吧?),你就需要解压缩它。解压后将它放入合适的目录中。要把它放在和 Android SDK 相同的目录下。记住你把它放在哪里了。
现在,你也许想要在路径设置中添加 NDK 工具。如果你在 Mac 或 Linux 下,你可以用你的原生路径设置来完成。如果你在 Windows 下的 Cygwin,你就需要设置 Cygwin 的路径设置。
第 2 步:创建项目
创建一个常规的 Android 项目。为了避免日后的问题,你项目的路径必须不包含空格。作者的项目有个叫做“com.mamlambo.sample.ndk1”的包,带有一个叫做“AndroidNDK1SampleActivity”的默认 Activity——你之后还会看到它们。
在这个项目的顶层创建一个叫做“jni”的目录——这是你放置原生代码的地方。如果你很熟悉 JNI,那你就会知道 Android NDK 很大程度上基于 JNI 的概念——它本质上是个只有有限的 C 语言编译头文件的 JNI。
第 3 步:添加一些 C 语言代码
现在,在 jni 文件夹中,创建一个叫做 native.c 的文件。一开始将以下 C 语言代码写入该文件,我们以后再添加另一个函数:
#include
#include
#include
#define DEBUG_TAG "NDK_AndroidNDK1SampleActivity"
void Java_com_mamlambo_sample_ndk1_AndroidNDK1SampleActivity_helloLog(JNIEnv * env, jobject this, jstring logThis)
{
jboolean isCopy;
const char * szLogThis = (*env)->GetStringUTFChars(env, logThis, &isCopy);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szLogThis);
(*env)->ReleaseStringUTFChars(env, logThis, szLogThis);
}
这个函数实际上非常浅显。它获取一个 Java 对象的字符串参数,将它转换为 C-string,然后将它写入到 LogCat 中。
不过该函数的名字很重要。它遵循了以“Java”的特定字样开头,后面跟着包名称,然后类名称,然后方法名称,和 Java 中定义的一样。每一部分都由一根下划线隔开,而不是点。
该函数的头两个参数也很重要。第一个参数是 JNI 环境,它与 helper 函数会被频繁调用。第二个参数是该函数所属的Java 对象。
第 4 步:从 Java 中调用原生代码
既然你已经写好了原生代码,让我们回头看看 Java 这边。在默认的 Activity 中,按照你的喜好创建一个按钮,并添加一个按钮处理器。从按钮处理器中,对 helloLog 作调用:
helloLog("This will log to LogCat via the native call.");
然后你必须在 Java 这边添加函数声明。在你的 Activity 类中添加如下声明:
private native void helloLog(String logThis);
它告诉编译和链接系统该方法将在原生代码中实现。
最后,你需要加载原生代码最终编译到的库。在 Activity 类中添加如下的静态初始化程序来根据名称加载库(库的名字随你决定,在下一步还会用到):
static {
System.loadLibrary("ndk1");
}
第 5 步:添加原生代码的 Make 文件
在 jni 文件夹中,现在你需要添加在编译中要用到的 makefile。该文件必须以“Android.mk”命名,如果你之前命名的文件为 native.c,库为 ndk1,那么 Android.mk 的内容就应该是这样:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndk1
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
第 6 步:编译原生代码
既然你的原生代码已完成,make 文件也已就绪,是时候编译原生代码了。在命令行下(Windows 用户在 Cygwin 下),你需要在你的项目的根目录下运行 ndk-build 命令。ndk-build 工具就在 NDK 工具目录中。将它添加到我们的路径中是最方便的办法。
在之后的编译中,如果你使用“ndk-build clean”命令,那么你可以确保所有的东西都被重新编译了。
分享到:
相关推荐
"Android NDK 入门指南" Android NDK (Native Development Kit) 是 Android 平台中的一款工具集,允许开发者使用 C 语言和 C++ 语言编写原生代码,并将其集成到 Java 应用程序中。通过使用 NDK,开发者可以充分利用...
安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip
在文件列表中提到的`hello-jni`是一个典型的NDK入门示例。它通常包含一个简单的Java类,声明了一个`native`方法,以及对应的C/C++源代码,演示了如何使用JNI进行基本的交互。这个例子可以帮助你快速了解NDK的基本...
本资源提供了一个Android NDK入门项目实战,通过实例帮助初学者理解和掌握NDK的使用。 ### 1. NDK基础知识 - **NDK的用途**:主要用在需要高效计算或使用C/C++库的场景,如音频视频处理、游戏开发、加密算法等。 -...
NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战
《Android NDK与JNI实战:史上最详尽的NDK入门指南》 在移动开发领域,Android NDK(Native Development Kit)和JNI(Java Native Interface)是开发者用来实现高性能计算、利用硬件加速或调用C/C++库的重要工具。...
《学习Android NDK入门很简单》这篇教程主要针对想要掌握Android NDK开发的初学者,旨在指导如何入门并开始使用NDK。NDK是Android开发中的一个重要工具,它允许开发者使用C/C++原生代码来编写部分应用,尤其适用于...
《NDK入门项目实战》项目是一个面向初学者的实践指南,旨在引导开发者入门NDK开发。该项目通过实例来展示如何在Android项目中集成和使用NDK技术,帮助开发者从零开始逐步建立对NDK开发的理解。实践项目通常涉及具体...
### NDK实例:Android史上最强NDK入门项目实战 这个项目实战可能包括以下内容: 1. **Hello, World!**:编写一个简单的原生库,实现Java调用并打印"Hello, World!"。 2. **计算示例**:使用C/C++进行数学计算,...
本项目实战“史上最强NDK入门项目实战”提供了一个理想的平台,帮助初学者快速掌握NDK开发的基本技巧。 1. **NDK简介** NDK是Google提供的一个开源工具集,用于编译原生代码并将其集成到Android应用中。它包含了...
在本段落中,我们将详细探讨一个名为“史上最强NDK入门项目实战”的压缩包文件的内容与知识点。首先,文件的标题透露出其目的,即为对NDK(Native Development Kit)感兴趣的开发者提供一个入门实战项目的教程。NDK...
压缩包中的“史上最强NDK入门项目实战.doc”很可能是详细的教程文档,包含每个步骤的指导和解释;“sources”可能包含了示例项目的源代码;“apps”可能是一些示例应用,用来展示NDK的使用;“myjni”可能是一个特定...
这个"android NDK 入门例子"很可能是为了帮助初学者理解和掌握NDK的基本用法。NDK的主要用途是提高性能、利用硬件加速、以及复用已有的C/C++库。 首先,安装Android NDK是入门的第一步。通常,你可以通过Android ...
这是一个ndk入门实例,使用eclipse实现的,很简单且具有参考意义 参考黄书《Android应用安全防护和逆向分析》第二章Android NDK开发2.1.1节以及百度经验 Android NDK入门开发实例...
本项目《史上最强NDK入门项目实战》正是针对那些希望入门NDK开发,但又对复杂技术和概念感到困惑的Android开发者们设计的。这个项目不仅仅是一个简单的入门教程,它更是一个实战演练,通过真实项目的操作,让学习者...
### NDK入门详解 #### 什么是NDK? NDK,全称为Native Development Kit,是Google提供的用于Android原生应用程序开发的一套工具集。它允许开发者使用C或C++编写原生代码,然后将这些代码编译成.so动态链接库文件,...
在"史上最强NDK入门项目实战"中,你可能会学习到如何: 1. 使用JNI调用C/C++代码进行数学运算或算法实现。 2. 使用NDK进行音频、视频编码解码。 3. 利用OpenGL ES进行图形渲染,提升游戏性能。 4. 实现与硬件传感器...