1.安装NDK
打开Tools->Android->SDK Manager->SDK Tools选中LLDB和NDK,点击确认,软件会自动安装NDK。
2.自定义命令
javah:
Program : $JDKPath$\bin\javah.exe
parameters : -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
dir : $ModuleFileDir$\src\main\Java
ndk-build:
Program : $ModuleSdkPath$\ndk-bundle\ndk-build.cmd
parameters :
dir : $ModuleFileDir$\src\main
ndk-build-clean:
Program : $ModuleSdkPath$\ndk-bundle\ndk-build.cmd
parameters : clean
dir : $ModuleFileDir$\src\main
3. 修改build.gradle(modules)
添加如下代码:
ndk{ moduleName "MyLibrary" //so名字 } sourceSets.main{ jni.srcDirs = [] jniLibs.srcDir "src/main/libs" }
完整的配置:
在
gradle.properties文件最后加一句:
android.useDeprecatedNdk=true
4. 编译
a.利用javah生产jni标准的头文件
这里需要新建一个java类如下图myNdk.java,
操作如下图(注意在MyNdk.java文件上点击右键),成功后会在jni目录下生成一个jni标准的头文件。
b.编译so
jni目录下文件(创建工程后就创建该目录):
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog LOCAL_MODULE := MyLibrary LOCAL_SRC_FILES =: hello.cpp include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi
xx.cpp
#include "com_example_jni_MyNdk.h" #include <android/log.h> #define LOG_TAG "lzd" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) JNIEXPORT jstring JNICALL Java_com_example_jni_MyNdk_getString (JNIEnv *env, jclass){ LOGI("getString"); return env->NewStringUTF("This is myLibrary !!!"); }
执行ndk-build操作如下图(注意点住jni目录右键, xx.h是上一步生成的):
成功后会得到libs目录下生产so文件。