将 APK 拆分用于发布但不用于调试构建类型

Using APK Splits for Release but not Debug build type

我已成功实现 APK Splits,以便为不同的 ABI 生成单独的 APK。

但是,为了提高效率(并且因为我不需要在 Debug 中使用非 armeabi-v7a APK),我想将 Debug 构建限制为仅生成 armeabi-v7a APK。

如何做到这一点?

一个想法是:

abi {
    enable true
    reset()
    include 'x86', 'armeabi-v7a', 'mips'
    universalApk false
}

也许有一些方法可以根据构建类型设置enable

您可以根据命令行参数设置enable。当我只想对发布版本使用拆分而不是对常规调试版本使用拆分时,我已经解决了类似的问题。

splits {
    abi {
        enable project.hasProperty('splitApks')
        reset()
        include 'x86', 'armeabi-v7a'
    }
}

然后是 ./gradlew -PsplitApks assembleProdRelease(产品对我来说是一种风味)。

您可以尝试对@Geralt_Encore 的答案进行修改,这样可以避免使用单独的gradlew 命令。就我而言,我只关心使用 APK 拆分来减小已发布的 APK 文件的大小,并且我想完全在 Android Studio 中完成此操作。

splits {
    abi {
      enable gradle.startParameter.taskNames.any { it.contains("Release") }
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}

据我所知,Build | Android Studio 中的生成签名 APK 菜单项使用 assembleRelease Gradle 目标生成 APK。

我参加这个派对有点晚了,但遇到不同风格和任务名称的问题,我带来了这个:

ext.isRelease = { array ->
    array.each { name ->
        if (name.contains("Debug")) {
            return false
        }
    }
    return true
}

android {

...

    splits {
        abi {
            enable isRelease(gradle.startParameter.taskNames)
            reset()
            include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
            universalApk false
        }
    }

}

这只是对 Jeff P 的回答的一个小更新,但适用于不同的风格和构建配置。

更新 @Jeff P 的答案,使其基于应用名称更加灵活并支持 Android App Bundle (.aab) 格式

splits {
    abi {
      enable gradle.startParameter.taskNames.any { it.contains("Release") }
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}