iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
ndk-buildを使っている既存のネイティブ・ソースをGradleに組み込み手順を調べた。
Android Studio UIを利用すると思わぬ副作用が発生する懸念があるのと、Android Studioの利用は次の段階で検討するので、手動で対応する方法のみとなっている。
gradle.propertiesにCMakeでなくndk-buildを選択していると設定する。
PROP_APP_ABI=armeabi-v7a:arm64-v8a
PROP_BUILD_TYPE=ndk-build
build.gradleのdefaultConfigブロックにndk-buildのオプションを設定する。
android {
...
defaultConfig {
...
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {
arguments '-j4'
arguments 'NDK_MODULE_PATH=modules'
}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
cFlags "-D__STDC_FORMAT_MACROS"
cppFlags "-fexceptions", "-frtti"
}
}
}
}
buildTypes {...}
productFlavors {
...
demo {
...
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {
...
}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {
...
targets "native-lib-demo",
"my-executible-demo"
}
}
}
}
paid {
...
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {
...
}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {
...
targets "native-lib-paid",
"my-executible-paid"
}
}
}
}
}
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {...}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {...}
}
}
}
buidl.gradleでndk.abiFiltersフラグにABIを設定する。
android {
...
defaultConfig {
...
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {...}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {...}
}
}
ndk {
abiFilters = []
abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
}
}
buildTypes {...}
externalNativeBuild {...}
}