Android NDK使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jing85432373/article/details/78203605

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    := add
LOCAL_SRC_FILES := AddNum.c

include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE    := add
LOCAL_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 __cplusplus
extern "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;
  }

猜你喜欢

转载自blog.csdn.net/jing85432373/article/details/78203605