在android的JNI中调用第三方 so文件的android.mk配置

1 配置成如下格式:

# 设置当前路径
LOCAL_PATH := $(call my-dir)

# 包含预构建库的 Android.mk
include $(CLEAR_VARS)

# 定义 cryptoauth
LOCAL_MODULE := cryptoauth
LOCAL_SRC_FILES := libcryptoauth.so
include $(PREBUILT_SHARED_LIBRARY)
#include $(BUILD_PREBUILT)


# 定义 bdCtrl
include $(CLEAR_VARS)

LOCAL_MODULE := board_jni
LOCAL_SRC_FILES := board_jni.cpp
LOCAL_LDLIBS := -llog

# 链接到 cryptoauth 库
LOCAL_SHARED_LIBRARIES := cryptoauth

# 构建共享库
include $(BUILD_SHARED_LIBRARY)
 

2 编译报错

ld: error:  app/build/intermediates/ndkBuild/release/obj/local/armeabi-v7a/libcryptoauth.so is incompatible with armelf_linux_eabi

3 修改为

ABIs [armeabi-v8a] are not supported for platform. Supported ABIs are [arm64-v8a, armeabi-v7a, x86, x86_64].

build.gradle修改为:

ndk {
    moduleName "bdCtrl"
    ldLibs "log", "z", "m"
    abiFilters "arm64-v8a"
}

3 移入第三方的源代码,cmake配置

(1) mkdir bulid

(2)cd build

(3 )cmake -DCMAKE_TOOLCHAIN_FILE="/home/us/ndk_test/android-ndk-r18b/build/cmake/android.toolchain.cmake" -DANDROID_ABI="armeabi-v7a" -DANDROID_NDK=$ANDROID_NDK -DANDROID_PLATFORM=android-23 -DATCA_HAL_I2C=ON -DATCA_TNGTLS_SUPPORT=ON -DATCA_TFLEX_SUPPORT=ON -DATCA_USE_ATCAB_FUNCTIONS=ON  -DATCA_PRINTF=ON ..

(4)make 

4 发现不能打印第三方SO的日志,需要加入NDK的andoid相关的log库

(1)

#include
#define ANDROID_LOG_INFO 6 
#define LOG_TAG  "atca"
#define LOGE(...)  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

(2)CMakeLists.txt加入里面的

cmake_policy(SET CMP0079 NEW)

find_library(log-lib log)
target_link_libraries(cryptoauth ${log-lib})

(3)重新cmake,然后bulid

你可能感兴趣的:(linux,运维,服务器)