简要描述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   作者:方杰