指定可選配置
您可以在模塊級 build.gradle 文件的 defaultConfig {} 塊中配置另一個 externalNativeBuild {} 塊梯嗽,為 CMake指定可選參數(shù)和標志端考。
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
// 配置CMake可選參數(shù)
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
// 為C 編譯器設(shè)置可選 flags
cFlags "-D_EXAMPLE_C_FLAG1", "-D_EXAMPLE_C_FLAG2"
// 為c++編譯器設(shè)置flag :使支持格式化 macro constants
cppFlags "-D__STDC_FORMAT_MACROS"
}
}
}
}
與 defaultConfig {} 塊中的其他屬性類似边篮,您也可以在構(gòu)建配置中為每個產(chǎn)品風味重寫這些屬性。
android {
productFlavors {
...
demo {
...
externalNativeBuild {
cmake {
...
// 針對項目中有多個原生庫币砂,不同的flavor用不同的庫就可以這樣指定,如果不指定gradle會為所有的flavor構(gòu)建所有的庫
targets "native-lib-demo"
}
}
}
paid {
...
externalNativeBuild {
cmake {
...
targets "native-lib-paid"
}
}
}
}
}
指定 ABI
默認情況下玻侥,Gradle 會針對 NDK 支持的 所有ABI將您的原生庫構(gòu)建到單獨的 .so文件中决摧,并將其全部封裝到您的 APK 中。如果您希望 Gradle 僅構(gòu)建和封裝原生庫的特定 ABI 配置,您可以在模塊級 build.gradle 文件中使用 ndk.abiFilters
標志指定這些配置掌桩,如下所示:
android {
...
defaultConfig {
...
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
'arm64-v8a'
}
}
}
**配置ABI拆分
把一個apk拆成幾個apk边锁,每個apk僅包含特定的ABI
android {
...
splits {
abi {
enable true
// include和exclude之前先reset一下
reset()
// 指定只包含的abi庫
include "x86", "armeabi-v7a", "mips"
// 指定不產(chǎn)生一個包含所有abi的apk
universalApk false
}
}
}
==========================================================
eclipse時代玩過ndk,現(xiàn)在studio時代波岛,應(yīng)該是大同小異茅坛,使用各自的工具,遵守各自的規(guī)則即可则拷;參照官網(wǎng)贡蓖,進行提煉,總結(jié)隔躲,學(xué)習(xí)計劃如下(本系列只關(guān)注cmake摩梧,如需學(xué)習(xí)ndk-build,請自行查閱其他資料):
jni相關(guān)宣旱,未完待續(xù)...
官網(wǎng)參考鏈接
https://developer.android.google.cn/studio/projects/add-native-code.html