创建Android项目-JNIDemo
新建一个类,命名为NdkJniUtils
package test.com.jnidemo; /** * Created by wl on 2017/6/7. */ public class JniUtils { static { System.loadLibrary("JNIDemo"); } public native String getCLanguageString(); }使用javah命令生成.h文件
点击Build–>Make Project,生成class文件
找到class文件,在app->build->intermediates->classes->debug目录下
通过javah命令生成.h头文件,点击Android Studio底下菜单中的Terminal
依次敲入:
cd app\build\intermediates\classes\debug
javah -jni test.com.jnidemo.JniUtils
如图:
注意:test.com.jnidemo为包名,请结合项目情况进行修改
在debug目录下找到test_com_jnidemo_JniUtils.h
根据生成.h头文件,新建.c或者.cpp文件,生成.so库文件
在app->src->main目录下新建一个jni文件夹,用来存c/c++的头文件以及源文件,将刚刚生成.h头文件剪切到这里 在jni文件夹下创建一个jnitest.c或jnitest.cpp文件,并写下如下代码: #include "test_com_jnidemo_JniUtils.h" JNIEXPORT jstring JNICALL Java_test_com_jnidemo_JniUtils_getCLanguageString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"My name is Super Marie,Hi!"); } 注意:接下来在jni文件夹下创建Android.mk和Application.mk文件
Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JNIDemo LOCAL_SRC_FILES := jnitest.c include $(BUILD_SHARED_LIBRARY) 其中LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。 LOCAL_MODULE是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。 LOCAL_SRC_FILES是要编译的C/C++文件。 Application.mk APP_ABI := all 表示生成所有平台的动态库。1、在defaultConfig下,配置ndk:
ndk { moduleName "JNIDemo" // 生成的so名字 }2、在android标签内配置sourceSets:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }如图:
3、在gradle.properties最下面加上“android.useDeprecatedNdk=true”
1.清空Termial并输入cd app\src\main,回车
2.输入ndk-build即可生成.so库
如果没有生成可以Build->Make Project一下,进行编译,生成.so库文件,路径:app->build->intermediates->ndk->debug->lib下
下篇文章将会讲怎么使用这个.so库