android jni 环境配置

xiaoxiao2021-02-28  98

一、jni定义

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是c/c++)。

二、jni编译工具

jni使用ndk编译,作者使用android studio集成并编译。

1、从谷歌官网下载ndk,作者使用的是android-ndk-r10e

2、配置android studio环境file->project structure

3、在对用module下编写build.gradle

在defaultConfig下添加

ndk {

abiFilters "x86_64" "armeabi-v7a" "armeabi"//表示动态库运行环境

}

在buildType添加

sourceSet{

main {

jni.srcDirs=[]

}

}

这部分可以参考https://developer.android.com/studio/projects/add-native-code.html#download-ndk

在android目录下加task

task ndkBuild(type: Exec) { commandLine NDKCommand(), 'NDK_PROJECT_PATH=build', 'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 'NDK_APPLICATION_MK=src/main/jni/Application.mk', 'NDK_APP_LIBS_OUT=src/main/libs' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } 在最外层目录添加如下两个方法用户获取ndk环境

def GetNDKDir() { def localProperties = new Properties() def NDK_SEARCH_VARS = ['ANDROID_NDK_HOME', 'ANDROID_NDK_ROOT', 'NDKROOT', 'NDKHOME'] def ndk_path = null def lim = (Os.isFamily(Os.FAMILY_WINDOWS)) ? '\\' : '/' // Search Local.Properties file try { localProperties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = localProperties.getProperty('ndk.dir') ndk_path = ndkDir != null ? ndkDir + lim : null; } catch (java.io.FileNotFoundException e) { println 'local.properties file not found' } // Search env var if (ndk_path == null) { for (String var : NDK_SEARCH_VARS) { def v = System.getenv(var) if (v != null) { ndk_path = v + lim println "found in System Environment *$var = " + ndk_path break } } } else { println 'found in local.properties *NDK_PATH = ' + ndk_path } if (ndk_path == null) { println 'No NDK_PATH found' ndk_path = '' } return ndk_path } def NDKCommand() { if (Os.isFamily(Os.FAMILY_WINDOWS)) { return GetNDKDir() + "ndk-build.cmd" } else { return GetNDKDir() + "ndk-build" } } 以上ndk环境即创建完毕

4、新建jni目录,右键点击main目录

5、创建java文件,链接到jni文件的java文件

需要load编译库,声明native方法

6、创建jni头文件,可以使用命令行生成

也可以手动写,需要注意的是库文件名格式 com_segway_robot_ndktest_MainActivity.h包名加类名

7、创建jni编译文件,可以是c/c++

8、创建Android.mk 与Application.mk文件。

上图是Android.mk文件格式,libthermal.so是编译依赖库,LOCAL_MODULE是指定编译库文件名,LOCAL_LDFLAGS指定编译静态依赖库,LOCAL_SHARED_LIBRARIES指定编译动态库,LOCAL_SRC_FILES指定本次编译文件。

Application.mk指定编译平台 APP_ABI:=x86_64,到这里编译环境准备结束。 请参考:https://developer.android.com/ndk/guides/android_mk.html#over

转载请注明原文地址: https://www.6miu.com/read-64915.html

最新回复(0)