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

这里介绍一下如果在原有的项目上加入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'
        }
    }






你可能感兴趣的:(android进阶)