【发布时间】:2018-10-29 18:31:53
【问题描述】:
我正在开发一个使用一些 3rd 方原生库的 Android 应用。我们需要为这些库添加一些功能。所以我用我需要的代码编写了一组 C++ 类,并交叉编译了 openssl,因为我们使用的是 openssl 加密函数。
我制作了一个演示应用程序来测试我的代码,一切正常。
现在我需要将此代码发送给正在开发 3rd 方库的人员,他们将添加我们的代码并将所有本机代码包装在一个 JAR 中,以便我们在我们的应用程序中使用它。
我以这个例子NDK hello libs 为基础。因为我想将我的代码作为共享库(.so 文件)发送,所以我在“CMakeList.txt”中执行了此操作:
cmake_minimum_required(VERSION 3.4.1)
set(distribution_DIR ${CMAKE_SOURCE_DIR}/../distribution)
add_library(lib_crypto STATIC IMPORTED)
set_target_properties(lib_crypto PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/openssl/lib/${ANDROID_ABI}/libcrypto.a)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
### This code just calls my my-lib ###
add_library(native-lib SHARED
src/main/cpp/native-lib.cpp)
### This is the lib I want to build ###
add_library(my-lib SHARED
src/main/cpp/*****.cpp
# more files...
)
target_include_directories(my-lib PRIVATE ${distribution_DIR}/openssl/include)
target_link_libraries(
native-lib
my-lib
)
target_link_libraries(
neclic
lib_crypto
)
我构建了 APK 并从中获取了“my-lib.so”。然后我使用这个库(包括 .h 头文件)创建了一个新项目,一切都按预期工作。
我的问题是: 有没有更好的方法来做到这一点?当我将此库与原始代码集成时,我可能会遇到任何问题吗?例如,他们是否需要使用相同的 NDK 版本?或者“my-lib.so”可以在任何安卓应用中使用(如果支持拱门)?
谢谢!
【问题讨论】:
-
欢迎来到 Stack Overflow!在这里,我们可以帮助您修复代码中的错误,但有关代码改进的问题应该在Code Review 上提出
标签: android c++ cmake android-ndk .so