欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Studio下的项目如何加入jni(NDKbuild)

程序员文章站 2022-09-30 10:10:57
这里介绍一下如果在原有的项目上加入jni的方法。因为NDKBuild我们之前在eclipse上面使用过,所以对它比较熟悉,这里就只说下NDKbuild。 升级到了AndroidS...

这里介绍一下如果在原有的项目上加入jni的方法。因为NDKBuild我们之前在eclipse上面使用过,所以对它比较熟悉,这里就只说下NDKbuild。

升级到了AndroidStudio3.0.1之后,支持的buildToolsVersion 也是比较高的版本26.0.2。而gradle的版本是3.0.1。

那么,如果我们手头上有C或者C++的代码,我们怎么加入到项目里面呢?

1.创建引用so库的java文件,和创建native方法。

public class MyMeetJni {

    static {
        System.loadLibrary("myMeetJni");
    }

    public static native String helloJni();

    public static native int sum(int a, int b);

    public static native String getCode(String source);
}

 

 

2.Android Studio环境下,使用Terminal工具,输入指令。

 

javac com/kv/mymeet/MyMeetJni.java
这个时候目录下会生成MyMeetJni.class。

 

再输入指令

 

javah -jni com.kv.mymeet.MyMeetJni
这个时候目录下会生成com_kv_mymeet_MyMeetJni.h

 

3.创建jni目录,创建c文件。

例如创建main.c,将上面生成的内容直接覆盖到main.c里面。方法里面需要加入参数的变量名称。下面为例。

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class com_kv_mymeet_MyMeetJni */

#ifndef _Included_com_kv_mymeet_MyMeetJni
#define _Included_com_kv_mymeet_MyMeetJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_kv_mymeet_MyMeetJni
 * Method:    helloJni
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_kv_mymeet_MyMeetJni_helloJni(JNIEnv * env, jclass jobj) {
    return (*env)->NewStringUTF(env,"hello JNI world");
}

/*
 * Class:     com_kv_mymeet_MyMeetJni
 * Method:    sum
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_kv_mymeet_MyMeetJni_sum(JNIEnv * env, jclass jobj, jint a, jint b) {
    return a + b;
}

/*
 * Class:     com_kv_mymeet_MyMeetJni
 * Method:    getCode
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_kv_mymeet_MyMeetJni_getCode(JNIEnv * env, jclass jobj, jstring source) {
    return  source;
}

#ifdef __cplusplus
}
#endif
#endif

 

 

4.创建Android.mk文件

通常NDK目录下面有个sample目录,里面有许多实例,我们选其中一个实例,点进去拷贝Android.mk,并将它放在项目的jni目录下面,稍做修改如下。

 

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:= myMeetJni
LOCAL_SRC_FILES:= main.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_EXPORT_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

5.Android Studio, android视图下来,选定的module右键,点击Link C++ project with gradle。

 

选择ndk-build方式的话,指定Android.mk文件路径。

即builde.gradle文件下会添加这段代码。

 

    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }