【问题标题】:Using APK Splits for Release but not Debug build type使用 APK 拆分进行发布但不使用调试构建类型
【发布时间】:2016-04-08 03:29:54
【问题描述】:

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

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

如何做到这一点?

一个想法是这样的:

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

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

【问题讨论】:

    标签: android gradle android-gradle-plugin build.gradle


    【解决方案1】:

    您可以尝试更改@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 中的 Generate Signed APK 菜单项使用 assembleRelease Gradle 目标生成 APK。

    【讨论】:

    • 这很好用,即使在使用多维风味时也是如此。
    • 在过去的一年里,我可能已经访问过这个问题 6 次了。你刚刚解决了我荒谬的问题。永远感谢你。
    • 部分字符串匹配使其更简洁taskNames.any { it.contains("assembleRelease") }
    • +1 用于提及动态检查gradle.startParameter.taskNames.contains(":app:assembleRelease")。这让我可以添加另一个应用级别检查。
    【解决方案2】:

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

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

    然后是./gradlew -PsplitApks assembleProdRelease(在我的情况下,产品是一种风味)。

    【讨论】:

    • 你的回答比较离题,我们说的是从 Android Studio 构建,而不是从命令行、sh、bat、cmd、终端等...
    【解决方案3】:

    我参加这个聚会有点晚了,但是遇到了不同风格和任务名称的问题,我提出了这个:

    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 答案的一个小更新,但适用于不同的风格和构建配置。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-18
        • 2018-10-16
        • 1970-01-01
        • 2021-04-23
        • 2020-07-17
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多