Android_NDK_开发环境搭建及HelloC

本文详细介绍了NDK开发环境搭建、编写简单的HelloC程序、生成Native签名文件的过程,并提供了关键步骤及代码示例,旨在帮助开发者快速掌握NDK的基本使用。

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

1.NDK开发环境搭建

(1).下载对应版本的NDK

android-ndk-r9-windows-x86.zip下载

(2).cygwin下载安装

首先下载cygwin,只需要安装其中的Devel和Shells即可,找到刚下载的ndk-build所在的目录文件,为了像在cmd中自由使用java命令那样,自由使用ndk-build命令,需要为cygwin配置path环境变量,需要配置profile文件,添加path路径,可参考如下。

PATH="/usr/local/bin:/cygdrive/d/zf/Android-ndk-r7b:/usr/bin:${PATH}"

在新版本的NDK已经支持windows下的编译,提供了一个ndk-build.cmd,故该步骤可以忽略。

2.简单的helloC

 (1).在Activity中声明方法

//注意:不要在helloFromC()后面加上{}
public native String helloFromC();

(2).定义c文件

需要在android项目中新建一个jni文件夹,在jni中新建一个Hello.c文件,代码如下

/*
 * 函数的命名需要遵循一定的规范,Java_完整的包名(以_隔开)_函数名
 */
JNIEXPORT jstring JNICALL Java_com_example_ndk_MainActivity_helloFromC
  (JNIEnv * env, jobject obj){
	return (*env)->NewStringUTF(env, "form helloFromC");
}

(3).新建Android.mk文件

LOCAL_PATH := $(call my-dir)	#调用命令,找到路径

include $(CLEAR_VARS)	#清空变量

LOCAL_MODULE    := Hello #将会以该名字,在libs/armeabi/libHello.so,即lib<LOCAL_MODULE>.so
LOCAL_SRC_FILES := Hello.c #使用的c文件

include $(BUILD_SHARED_LIBRARY)

(4). 使用ndk-build编译

可以使用cygwin或者在windows cmd下的ndk-build.cmd,首先cd进入当前android项目所在的目录,然后调用ndk-build命令编译

(5).引入libs

在完成编译后,会产生libs/armeabi/libHello.so,为引入该so可执行文件,需要在activity中使用静态代码库引入

static{
	/*
	 * libs/armeabi/libHello.so,loadLibrary()的name为lib<name>.so指定
	 * 即在Android.mk指定的LOCAL_MODULE后面值
	 */
	System.loadLibrary("Hello");
}

3.得到native的签名文件

自己手写该方法可能会出错,尤其是native的方法很复杂,比如hello_from_c();有下划线,为此正确的做法应该使用jdk下的javah命令,让其帮助我们生成对应的头文件。

(1).进入Android目录

在windows下,使用cmd进入android项目中,然后进入src目录,键入如下

javah com.baidu.MainActivity //完整路径(含包名) 

(2). 拷贝并引入头文件,实现相应方法

在调用了javah命令后,会在当前目录下生成一个com_baidu_MainActivity.h文件,将其拷贝至jni目录下,引入并实现

#include <stdio.h>
#include "com_baidu_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_example_ndk_MainActivity_helloFromC
  (JNIEnv * env, jobject obj){
	return (*env)->NewStringUTF(env, "form helloFromC");
}

4.其它

(1).c返回中文字符串

可以修改c文件的编码为utf-8


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值