Android NDK使用

来源:互联网 发布:北京弘书阁教育 知乎 编辑:程序博客网 时间:2024/06/10 13:32

1.在java代码中创建一个类

public class  AddNum{//这里调用c的方法    public native int add(int a,int b);    static {    //加载动态库        System.loadLibrary("add");    }}

2.生成c的头文件

在java代码所在的包下(最上层,as可以直接在Terminal)输入命令,生成头文件
javah -jni com.***.***.**.AddNumc

3.创建一个jni文件夹

注意文件路径,as切换到Project模式,在main下创建jni文件夹,创建完成后与java文件夹处于同级目录

image

将第二步生成的文件拷贝到jni文件夹下,并创建对应的.c文件和android.mk文件

image

android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := addLOCAL_SRC_FILES := AddNum.cinclude $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE    := addLOCAL_SRC_FILES := AddNum.c这两句是最关键的,第一行定义生成的so文件名字,在第一步中使用这个名字,注意名字前面的lib问题如果名字前面不加lib系统会自动添加第二行是引用那个文件

4. 执行命令得到so文件

ndk-build

此时会根据不同cup生成对应so包,生成的so在libs下

$ ndk-build[arm64-v8a] Install        : libadd.so => libs/arm64-v8a/libadd.so[x86_64] Install        : libadd.so => libs/x86_64/libadd.so[mips64] Install        : libadd.so => libs/mips64/libadd.so[armeabi-v7a] Install        : libadd.so => libs/armeabi-v7a/libadd.so[armeabi] Install        : libadd.so => libs/armeabi/libadd.so[x86] Install        : libadd.so => libs/x86/libadd.so[mips] Install        : libadd.so => libs/mips/libadd.so

com_kaelthas_demo_ndk_test_AddNum.h

自动生成,命名规则Java_包名_类名(可以直接手写,注意命名规范)
方法名 类名_方法名

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_kaelthas_demo_ndk_test_AddNum */#ifndef _Included_com_kaelthas_demo_ndk_test_AddNum#define _Included_com_kaelthas_demo_ndk_test_AddNum#ifdef __cplusplusextern "C" {#endif/* * Class:     com_kaelthas_demo_ndk_test_AddNum * Method:    add * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_kaelthas_demo_ndk_test_AddNum_add  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif

AddNum.c

自己手动创建,命名自己确定,没有强制规范

//// Created by 王晓明 on 2017/10/11.//#include "com_kaelthas_demo_ndk_test_AddNum.h"JNIEXPORT jint JNICALL Java_com_kaelthas_demo_ndk_test_AddNum_add  (JNIEnv *env, jobject thiz, jint a, jint b){        return a+b;  }
原创粉丝点击