android - 如何在没有额外 CMake 库的情况下将预制库中的预构建库嵌入到 APK 中?
问题描述
我需要在 APK 中包含 libcrypto.so 库,因此可以使用DynamicLibrary.open(在内部使用 dlopen)在 Dart (Flutter) 中打开该库。
com.android.ndk.thirdparty:openssl:1.1.1g-alpha-1 包为 libcrypto.so 提供了预制件,因此我将包包含在 build.gradle 中:
android {
buildFeatures {
prefab true
}
}
dependencies {
implementation "com.android.ndk.thirdparty:openssl:1.1.1g-alpha-1"
}
但是,这还不足以在 APK 中实际包含库。我需要使用 CMake 添加另一个本机库(empty.c 是一个空文件):
cmake_minimum_required(VERSION 3.6)
project(include_openssl_crypto)
find_package(openssl REQUIRED CONFIG)
add_library(${PROJECT_NAME} SHARED empty.c)
target_link_libraries(${PROJECT_NAME} PRIVATE openssl::crypto)
并将其包含在 build.gradle 中:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_shared"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
然后,libcrypto.so 包含在 APK 中,也是一个很小的,没用的 libinclude_openssl_crypto.so。
如何防止 CMake 实际生成另一个库?我试过to add_custom_target
,但这还不足以在 APK 中包含 libcrypto.so。或者,如何在没有 CMake 的情况下从预制中包含 libcrypto.so?add_dependencies
openssl::crypto
解决方案
推荐阅读
- batch-file - 有没有一种有效的方法来查看批处理文件崩溃的原因?
- sparql - 在 SPARQL 中将匹配项与 FILTER 组合
- selenium-webdriver - 我们可以在不定义列数的情况下定义 new Object[3][] 吗?
- javascript - 主机github页面显示404页面
- php - 从 PHP 中的 var_dump 拉取数组结果
- tkinter - Pwm MegaWidgets 在销毁小部件中不起作用
- r - 将 Rmarkdown 编织为 PDF 时忽略“fontawesome”图标
- android - Android Kotlin - 设置动画结束/结束监听器
- ios - 应用内购买的应用商店评论提交,“升级”前或“升级”测试帐户后?
- javascript - 在数据表容器外追加列数据