【发布时间】:2018-10-21 13:06:15
【问题描述】:
我上次在 Android Studio 中将 NDK 版本升级到最新版本后遇到了这个问题。我还找到了解决此问题的解决方案。如果有人有这个问题,我希望这是对你最好的问题和答案。请检查我的答案。
【问题讨论】:
标签: android android-ndk java-native-interface
我上次在 Android Studio 中将 NDK 版本升级到最新版本后遇到了这个问题。我还找到了解决此问题的解决方案。如果有人有这个问题,我希望这是对你最好的问题和答案。请检查我的答案。
【问题讨论】:
标签: android android-ndk java-native-interface
我通过阅读 release note here 的 NDK 修订版 16 找到了解决方案。
如果您使用 Application.mk 配置您的项目,只需将以下内容添加到您的 Application.mk 文件中:
APP_STL := c++_shared
如果您通过 Gradle 使用 CMake,请将以下内容添加到您的 build.gradle:
externalNativeBuild {
cmake {
cppFlags ""
arguments "-DANDROID_STL=c++_shared"
}
}
要及时了解新版本和注意事项,请按照此NDK Revision History 申请新更改。
希望它能解决你的问题。
【讨论】:
通过添加以下设置修改模块 build.gradle 文件得到相同的问题并修复:
android {
...
splits {
abi {
enable true
reset()
include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
universalApk true //generate an additional APK that contains all the ABIs
}
}
project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.versionCodeOverride =
project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode
}
}
}
供你参考,祝你好运。
【讨论】:
根据Android documentation,这是一个已知问题,这是因为 gradle 插件默认仍包含不受支持的 ABI。 armbeabi 在 NDKr16 中已弃用,并在 r17 中删除,因此发出警告。要修复,请在 splits.abi 下列出您支持的架构:
...
splits {
abi {
...
reset()
include "x86", "armeabi-v7a", ...
}
}
【讨论】:
reset() 但仍然显示警告
"armeabi"?使用reset() 后,您可能仍会看到有关其他架构的警告,具体取决于您的构建文件。
这并不能解决我的问题,我通过添加这个来解决:
ndk {
abiFilters "armeabi-v7a"
}
到 android.defaultConfig
【讨论】: