简要描述Android通过JNI使用动态库的功能
动态库的生成
- 代码(Android.mk)必须放在jni目录下,生成的目标文件会在jni的同级目录下
- 使用stl时,在Application.mk中增加配置
或APP_STL := stlport_static
APP_STL := stlport_shared
- 指定支持的架构,在Application.mk中增加配置。不配置的话会生成所有架构的动态库
APP_ABI := armeabi-v7a arm64-v8a - 输出日志
#include <android/log.h> #define LOG_TAG "TAG" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
使用jni库
- 将生成的动态库带目录复制到libs目录下
– libs\arm64-v8a*.so
– libs\armeabi-v7a*.so - 在build.gradle的Android中添加。否则会导致so没有打包到apk中
sourceSets {
}main { jniLibs.srcDirs = ['libs'] }
Ubuntu 安装ndk-build
下载(https://github.com/android/ndk/wiki/Unsupported-Downloads)
https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
解压
bin路径添加到PATH中(/etc/profile)
export ANDROID_NDK=/data32/android-ndk-r25c
export PATH=$PATH:$ANDROID_NDK
文档更新时间: 2024-08-29 11:14 作者:方杰