1、NDK环境配置


android studio中添加dnk路径
android studio NDK配置

local.properties中添加dk路径
android studio NDK配置

配置环境变量

android studio NDK配置

dos命令:ndk-build
android studio NDK配置

gradle.properties中配置,将ndk版本差异过滤掉
android studio NDK配置

2、编写调用c的java代码


  1. public class SerialPort {
  2. private native static FileDescriptor open(String path, int baudrate, int flags);
  3. public native void close();
  4. static {
  5. System.loadLibrary("serial_port");
  6. }
  7. }

3、jni目录下创建Android.mk与Application.mk

Android.mk

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. TARGET_PLATFORM := android-3
  4. LOCAL_MODULE := serial_port
  5. LOCAL_SRC_FILES := SerialPort.c
  6. LOCAL_LDLIBS := -llog
  7. include $(BUILD_SHARED_LIBRARY)

Application.mk


  1. 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中配置

  1. apply plugin: 'com.android.application'


  2. android {
  3.     compileSdkVersion 26
  4.     defaultConfig {
  5.         applicationId "tool.szxmrt.com.myapplication2"
  6.         minSdkVersion 15
  7.         targetSdkVersion 26
  8.         versionCode 1
  9.         versionName "1.0"
  10.         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  11.     }
  12.     sourceSets.main {
  13.         jni.srcDirs = []//禁用as自动生成mk
  14.     }
  15.     task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
  16.         commandLine "D:\\sdk\\ndk-bundle\\ndk-build.cmd",//配置ndk的路径
  17.         'NDK_PROJECT_PATH=build/intermediates/ndk',//ndk默认的生成so的文件
  18.         'NDK_LIBS_OUT=src/main/jniLibs',//配置的我们想要生成的so文件所在的位置
  19.         'APP_BUILD_SCRIPT=src/main/jni/Android.mk',//指定项目以这个mk的方式
  20.         'NDK_APPLOCATION_MK=src/main/jni/Application.mk'//指定项目以这个mk的方式
  21.     }
  22.     tasks.withType(JavaCompile) {
  23.         //使用ndkBuild
  24.         compileTask -> compileTask.dependsOn ndkBuild
  25.     }
  26.     buildTypes {
  27.         release {
  28.             minifyEnabled false
  29.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-  rules.pro'
  30.         }
  31.     }
  32. }


6、用Make Project 生成so文件,然后运行项目。

android studio NDK配置

7、测试本地c代码的调用(这里要注意的是,移到其他项目使用,必须把含有native方法的java文件放在与生成so文件的同包名下)


相关文章: