Ndk 生成so库的方法

本文介绍了如何使用Android NDK生成SO库,包括下载NDK,创建Java JNI接口,生成JNI头文件,编写C代码,配置Android.mk,编译SO文件,并在MainActivity中调用使用。

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

一个独立的应用,如果涉及到jni,动态库so 就要自己开发。

Android 提供了ndk 开发so库。

这里提示下,如果使用gcc编译生成的so 是不能使用在android的,需要ndk再次转换下才可以使用。

下面通过一个示例来说明ndk生成so的方法,和配合jni的使用。

 

1、 下载ndk,目前最新版本是 android-ndk-r9d

http://developer.android.com/sdk/ndk/index.html

2、     下载并安装 cygwin,如果是linux系统,请忽略此步骤。

3、     打开Eclipse,新建一个Android工程(我的取名为TestNdk

4、     创建SumJni.java

publicclass SumJni {

    public static native int nativeGetSum(intdata1,int data2);

}

5、生成 JNI  头文件

 下面生成JNI 头文件啦,使用 javah 命令,对 SumJni.java 这个文件生成,别搞错啦!

 使用命令行 进入 android 项目的 bin 目录中,然后执行  javah -classpath ./classes  -jni   com.example.testndk.SumJni 这个命令。别忘记包名!

生成com_example_testndk_SumJni.h

#include <jni.h>

/* Header for classcom_example_testndk_SumJni */

 

#ifndef_Included_com_example_testndk_SumJni

#define_Included_com_example_testndk_SumJni

#ifdef __cplusplus

extern "C" {

#endif

/*

 *Class:     com_example_testndk_SumJni

 *Method:    nativeGetSum

 *Signature: (II)I

 */

JNIEXPORT jint JNICALLJava_com_example_testndk_SumJni_nativeGetSum

 (JNIEnv *, jclass, jint, jint);

 

#ifdef __cplusplus

}

#endif

#endif

 

6、书写C 代码,com_example_testndk_SumJni.cpp

#include"com_example_testndk_SumJni.h"

 

JNIEXPORT jint JNICALLJava_com_example_testndk_SumJni_nativeGetSum

 (JNIEnv *, jclass, jint data1, jint data2)

{

    return (data1+data2);

 

}

 

7、Android.Mk

LOCAL_PATH :=$(call my-dir) 

include$(CLEAR_VARS) 

LOCAL_MODULE    := libtestndk 

LOCAL_SRC_FILES:= com_example_testndk_SumJni.cpp 

include$(BUILD_SHARED_LIBRARY)

 

8,编译SO 文件

NDK的主目录 android-ndk-r9d 下面有个 sources 文件夹中创建一个名为 TestNdk的文件夹
 我这里需要在 TestNdk文件夹下面再创建一个名为 jni 的文件夹,文件夹中有如下三个文件

Android.mk

com_example_testndk_SumJni.cpp

com_example_testndk_SumJni.h

 

命令行当前路径在TestNdk/jni

输入命令:ndk/android-ndk-r9d/ndk-build

注:就是运行在ndk主目录下的ndk-build 文件

 

在 TestNdk/libs下生成 libtestndk.so

 

9、MainActivity.java 使用

static {

              System.loadLibrary("testndk");

           }

 

int iSum = SumJni.nativeGetSum(2,4);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值