1、NDK环境配置
android studio中添加dnk路径
local.properties中添加dk路径
配置环境变量
dos命令:ndk-build
gradle.properties中配置,将ndk版本差异过滤掉
2、编写调用c的java代码
- public class SerialPort {
- private native static FileDescriptor open(String path, int baudrate, int flags);
- public native void close();
- static {
- System.loadLibrary("serial_port");
- }
- }
3、jni目录下创建Android.mk与Application.mk
Android.mk
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- TARGET_PLATFORM := android-3
- LOCAL_MODULE := serial_port
- LOCAL_SRC_FILES := SerialPort.c
- LOCAL_LDLIBS := -llog
- include $(BUILD_SHARED_LIBRARY)
Application.mk
- APP_ABI := armeabi armeabi-v7a x86
4、生成调用本地方法的.h头文件。用as自带的Terminal工具来生成。
进入你项目的java文件夹下
cd app/src/main/java
utils是你的完整包名,后面跟具体写有调用c代码的java类
javah -jni utils.Serialport
5、在build.gradle中配置
- apply plugin: 'com.android.application'
- android {
- compileSdkVersion 26
- defaultConfig {
- applicationId "tool.szxmrt.com.myapplication2"
- minSdkVersion 15
- targetSdkVersion 26
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
- sourceSets.main {
- jni.srcDirs = []//禁用as自动生成mk
- }
- task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
- commandLine "D:\\sdk\\ndk-bundle\\ndk-build.cmd",//配置ndk的路径
- 'NDK_PROJECT_PATH=build/intermediates/ndk',//ndk默认的生成so的文件
- 'NDK_LIBS_OUT=src/main/jniLibs',//配置的我们想要生成的so文件所在的位置
- 'APP_BUILD_SCRIPT=src/main/jni/Android.mk',//指定项目以这个mk的方式
- 'NDK_APPLOCATION_MK=src/main/jni/Application.mk'//指定项目以这个mk的方式
- }
- tasks.withType(JavaCompile) {
- //使用ndkBuild
- compileTask -> compileTask.dependsOn ndkBuild
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.pro'
- }
- }
- }