Linking External Libraries Using Ndk, Gradle & Cmake In Android Studio
I've come back to Android development after a gap and my old ANT based build chain no longer seem to function (that's a separate issue) with the latest SDK, so I'm trying to do thi
Solution 1:
You must take care of ABI incompatibility. You are building libanthracite-lib.so for x86_64, so you need the same variant of libBullet.a. If you only need armeabi-v7a, you must specify this in build.gradle, e.g.
android {
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
defaultConfig {
ndk {
abiFilters 'armeabi-v7a'
}
externalNativeBuild {
cmake {
arguments'-DCMAKE_VERBOSE_MAKEFILE=ON'
}
}
}
}
In your E:\prog\anthracite\gradle\AnthracitePlayerAPI21\app\CMakeLists.txt
add_library(bullet_lib STATIC IMPORTED)
set_target_properties(bullet_lib PROPERTIES IMPORTED_LOCATION
${LIBBASE}/bullet3/build3/Android/obj/local/${ANDROID_ABI}/libBullet.a)
target_link_libraries(my_project_name bullet_lib android log EGL GLESv2)
The order of libraries in target_link_libraries
may be important, so keep static libs on the left.
I guess you build libBullet.a with ndk-build. You can create a separate library module (let's call in bullet_module) to your AS Project, even if it has no Java files, and point it to the Android.mk
:
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
defaultConfig {
ndk {
abiFilters 'armeabi-v7a'
}
externalNativeBuild {
ndkBuild {
targets 'Bullet'
}
}
}
externalNativeBuild {
ndkBuild {
path "${LIBBASE}/bullet3/build3/Android/jni/Android.mk"
}
}
}
Now you can change your CMakeLists.txt to look at results of bullet_module build:
set_target_properties(bullet_lib PROPERTIES IMPORTED_LOCATION
<path/to/bullet_module>/build/intermediates/ndkBuild/debug/obj/local/${ANDROID_ABI}/libBullet.a)
Post a Comment for "Linking External Libraries Using Ndk, Gradle & Cmake In Android Studio"