【发布时间】:2015-09-05 22:07:49
【问题描述】:
我有一个不寻常的问题 - 我的 Android 应用程序包含本机库,我为 armeabi-v7a 和 x86 构建本机库。但是,现在我需要将第三方库集成到我的应用程序中,该应用程序还包含本机库(第三方库是 Crashlytics,我通过 Maven 从我的 build.gradle 中包含它。)。问题是第三方库的 AAR 提供了所有架构(armeabi、arm64-v8a、armeabi-v7a、mips、mips64、x86 和 x86_64),而我的应用程序仅支持 armeabi-v7a 和 x86(计划在不久的将来使用 arm64-v8a) ,所以当最终的 apk 被构建时,它包含第 3 方库的所有 ABI,并且只有我的本机代码的 x86 和 armeabi-v7a ABI。这会导致我的应用在 Galaxy S6 等 arm64 设备上启动时崩溃。
我的问题是:是否可以仅包含来自 3rd 方 AAR 的选定 ABI?
请注意,我知道APK splits,但这只能部分解决我的问题,即它只有在我通过 Play 商店分发我的应用程序时才有效。虽然 Play Store 支持 beta 测试分发,但是更新的 APK 的传播速度比较慢,所以在将更新推送到应用的 PlayStore beta 通道之前,我们通过 Crashlytics 的 beta 分发系统推送更新,速度要快得多。问题是 Crashlytics 的分发系统不支持 APK 拆分(或者我错了吗?)。因此,我实际上需要构建一个仅包含选定 ABI 的“通用”APK。如何实现?
尽管我会满意 Crashlytics 的特定答案(例如,如何通过他们的 beta 通道分发 APK 拆分),但我会更满意构建仅包含选定 ABI 的“通用”APK 的解决方案,因为在我们公司,我们还向客户提供 SDK 作为 AAR 档案,其中仅包含受支持的架构,我们希望指导他们在将我们的 SDK 与支持不同 ABI 的其他 SDK 集成时如何处理案例。
我正在使用最新的稳定版 Android Studio (1.2.1.1)、gradle 2.4 和 android gradle 插件版本 1.2.3。
【问题讨论】:
-
查看产品风味中的
ndk.abiFilter/defaultConfigDSL 是否会让你指定多个项目。我看到的例子只列出了一个。如果它确实接受逗号分隔的列表,那可能会解决您的问题。 -
我在stackoverflow上问了一个问题。如果我在 abiFilter 中指定多个 ABI 说 DSL 方法“abiFilter”不存在,则会出现 gradle 错误。我什至尝试将多个 ABI 放在单个字符串中的 abiFilter 中,但这也不起作用 - 它使 APK 根本没有原生库。
标签: android gradle android-gradle-plugin crashlytics crashlytics-beta