dav*_*oze 3 c++ android openssl android-ndk
我使用david-hoze/build-openssl-android在我的 Android 项目中包含 OpenSSL :使用 android ndk r17 构建 openssl 1.1.0h。.
这是我的设置:Android Studio 3.2 NDK 版本:18.0.5002713
这是我的应用程序build.gradle文件:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
def my_openssl_dir = getRootDir().toString() + "/build-openssl-android/openssl-lib"
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.my-company.my-app"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-std=c++17 -frtti -fexceptions"
arguments '-DANDROID_STL=c++_shared'
arguments '-DMY_OPENSSL_DIR=' + my_openssl_dir
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
sourceSets {
main {
jniLibs.srcDirs = [
]
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2.30'
}
Run Code Online (Sandbox Code Playgroud)
这是我的CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.4.1)
include_directories( src/main/cpp/
)
add_library( # Sets the name of the library.
my-library
SHARED
src/main/cpp/my-code.cpp
)
find_library (log-lib log)
add_library(libcrypto STATIC IMPORTED)
set_target_properties(libcrypto PROPERTIES IMPORTED_LOCATION
${MY_OPENSSL_DIR}/${ANDROID_ABI}/libcrypto.a)
add_library(libssl STATIC IMPORTED)
set_target_properties(libssl PROPERTIES IMPORTED_LOCATION
${MY_OPENSSL_DIR}/${ANDROID_ABI}/libssl.a)
target_include_directories(nativ PRIVATE
${MY_OPENSSL_DIR}/${ANDROID_ABI}/include
)
target_link_libraries( # Specifies the target library.
my-library
libcrypto
libssl
${log-lib}
)
Run Code Online (Sandbox Code Playgroud)
我在编译时收到这些错误:
构建命令失败。使用参数执行进程 /home/david/Android/Sdk/cmake/3.6.4111459/bin/cmake 时出错 {--build /home/david/dev/android/MyApplication/app/.externalNativeBuild/cmake/debug/x86_64 - -target my-library} [1/1] 链接 CXX 共享库 ../../../../build/intermediates/cmake/debug/obj/x86_64/libnativ.so FAILED: : && /home/david /Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=x86_64-none-linux-android21 --gcc-toolchain=/home/david/Android/Sdk/ndk- bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64 --sysroot=/home/david/Android/Sdk/ndk-bundle/sysroot -fPIC -isystem /home/david/Android/Sdk/ndk-bundle/sysroot/ usr/include/x86_64-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,
感谢您的帮助。
问题是链接顺序,我改的顺序libssl,并libcrypto在我的CMakelists.txt文件,像这样:
cmake_minimum_required(VERSION 3.4.1)
include_directories( src/main/cpp/
)
add_library( # Sets the name of the library.
my-library
SHARED
src/main/cpp/my-code.cpp
)
find_library (log-lib log)
add_library(libcrypto STATIC IMPORTED)
set_target_properties(libcrypto PROPERTIES IMPORTED_LOCATION
${MY_OPENSSL_DIR}/${ANDROID_ABI}/libcrypto.a)
add_library(libssl STATIC IMPORTED)
set_target_properties(libssl PROPERTIES IMPORTED_LOCATION
${MY_OPENSSL_DIR}/${ANDROID_ABI}/libssl.a)
target_include_directories(nativ PRIVATE
${MY_OPENSSL_DIR}/${ANDROID_ABI}/include
)
target_link_libraries( # Specifies the target library.
my-library
libssl
libcrypto
${log-lib}
)
Run Code Online (Sandbox Code Playgroud)
它编译得很好
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |