android NDK开发之Hello NDK

本文详细介绍如何使用 Android NDK 创建第一个 JNI 应用程序 JNIHelloWorld,包括配置环境、生成动态链接库、编写 Java 和 C/C++ 代码等步骤,并解决常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android NDK的使用作为android开发人员进阶道路上的必修课,但对于想接触这方面的初学者而言,刚开始可能会让你不知所措,这篇文章针对入门而写,同时也列出了一些可能遇到的问题,并提出了解决办法。当然我们还是从第一个NDK应用JNIHelloWorld开始吧(HelloWorld真伟大,哈)。
在开发之前建议了解下NDK与JNI:
了解NDK与JNI请点这

接下来正式进入我们的入门NDK应用JNIHelloWorld

  1. 建立一个android应用,这里我们取名JNIHelloWorld,具体如何创建就不多说了。
  2. 选择我们的工程点击右键->Android Tools->Add Native Support…填写你要生成的动态链接库名字,我这里填JNIHelloWorld。
    如果你之前没有添加NDK的开发工具包,那么将会相应的窗口提示NDK location not valid in preferences,要求让你添加NDK,添加方法点击Window->Preferences->Android->NDK,然后找到你NDK所在的路径就行,点击Apple/OK搞定,如果没有下载的请先下载
    NDK
    NDK下载地址
    添加完成后如下目录结构,在工程中将多出一个jni目录
    jni目录结构
    3.打开你的MainActivity.java或者自己任意起一个类如HelloWorld.java(这里用此类做示范),添加如下代码
public class HelloWorld {
    static {
        System.loadLibrary("JNIHelloWorld");
      }
    public native String print(String content);
}

此时编译运行工程,之后我们打开工程的目录可以看到bin\classes…下生成了XXX.class文件。
cmd打开doc,使路径到对应工程的classes下例如
G:\android\android4\Test\bin\classes>
此时输入>javah com.example.jnihelloworld.HelloWorld点击enter,ok这是在你的classes下将生成一个com_example_test_HelloWorld.h文件,这个文件即为HelloWorld生成的c++头文件(c/c++内容这里不做简介)。
注意:如果你是在MainActivity下添加这些代码,那么很可能会报错,怎么办呢?那么我们就直接找到对应的java文件,对其进行javah,生成头文件
接着将头文件移到jni目录下,也就是我们上面图片中忽略的那个。最终目录结构就是那样。
4.编辑JNIHelloWorld.cpp文件,添加如下代码

#include <android/log.h>
#include <com_example_jnihelloworld_HelloWorld.h>
#include <jni.h>
#define LOG_TAG "HelloWorld"
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, fmt, ##args)
JNIEXPORT jstring JNICALL Java_com_example_jnihelloworld_HelloWorld_printJNI(
        JNIEnv *e, jobject, jstring s) {
    // 从 instring 字符串取得指向字符串 UTF 编码的指针
    const char *str = e->GetStringUTFChars(s, JNI_FALSE);//得到方法中传入的内容
    int i = sum(2,5);//测试一个函数
    LOGD("print:%d",i);
     LOGI("dufresne--->%s", (const char *)str);
    return e->NewStringUTF("helloJNI&helloWorld");//返回一个内容
}

由于用到android/log.h库,因此我们需要在Android.mk文件声明一下,代码如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := JNIHelloWorld
LOCAL_SRC_FILES := JNIHelloWorld.cpp
LOCAL_LDLIBS :=-llog
include $(BUILD_SHARED_LIBRARY)

5.编写MainActivity文件,我们为了简单起见,我们只需要在onCreate方法中添加如下代码:

Log.i("JNIHello", new HelloWorld().print("I am HelloWorld Activity"));

好了,基本上完成了,我们看看运行结果吧!LogCat打印结果如下:
运行结果

ok,我们的NDK开发的第一个android程序就完成了,恭喜你入门了,哈,如有疑问请留言。
下一篇将介绍jni的一下基本类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值