构建所有 ABI,但只打包一个子集
Posted
技术标签:
【中文标题】构建所有 ABI,但只打包一个子集【英文标题】:Building all ABIs but packaging only a subset 【发布时间】:2018-09-14 09:23:15 【问题描述】:我正在尝试为我的项目构建所有 ABI,但只想将其中的一部分打包到我的应用中。例如,我想构建“x86”、“x86_64”、“armeabi-v7a”和“arm64-v8a”,但只构建“x86”包(例如)。
阅读本文档 (https://developer.android.com/studio/projects/gradle-external-native-builds.html#jniLibs) 在“指定 ABI”部分下,使用他们提供的 sn-p 作为示例似乎很有可能。但是,这似乎对我不起作用。
我的代码sn-p如下。
android
defaultConfig
ndk
abiFilters 'armeabi-v7a'
externalNativeBuild
cmake
abiFilters 'armeabi-v7a', 'x86'
externalNativeBuild
cmake
path "CMakeLists.txt"
在上面的sn-p中,根据我对文档的理解,它应该同时构建armeabi-v7a和x86,但只在我的APK中打包armeabi-v7a。但这不起作用。
我正在使用 Android 插件 3.1.0 和 NDK 16.1.4479499
【问题讨论】:
我认为您对abiFilters 的解释是错误的。如果您想要打包,例如 x86 和 armeabi,则定义此列表两次的想法可能会有所帮助,但要预先构建前者,并且只希望 Gradle 构建 armeabi 【参考方案1】:您要查找的内容由拆分控制。
splits
abi
enable true
reset()
include 'armeabi-v7a'
universalApk false //don't generate an additional APK that contains all the ABIs
【讨论】:
谢谢亚历克斯。这不会创建多个 APK 吗?我希望只用一个 ABI 创建一个 APK,但要构建所有 ABI。 虽然您只需要一个 ABI,但上面的设置就足够了。我不知道如何在构建更多 ABI 的同时创建具有两个 ABI 的 APK。 感谢亚历克斯的帮助。我在原始问题中发布的代码理论上应该可以工作,但由于某种原因它不是 :( 我赞成您的回复,因为它非常有帮助,但我仍然想了解为什么示例代码不起作用。以上是关于构建所有 ABI,但只打包一个子集的主要内容,如果未能解决你的问题,请参考以下文章
使用 -D_GLIBCXX_USE_CXX11_ABI=0 构建提升