【问题标题】:Android Gradle - is use splits only for release possible?Android Gradle - 是否可以使用拆分仅用于发布?
【发布时间】:2015-01-15 13:26:00
【问题描述】:

我想通过“abi”使用“splits”,但仅用于发布版本。这可能吗?我尝试使用 ext 变量和“def”变量,默认情况下也设置为 false。此变量在 buildTypes 中为 releaseWithLog(和发布)设置为 true。

但我不知道 Gradle 是如何工作的,因为当我将带有测试消息的 writeln() 添加到“debug”、“releaseWithLog”和“release”并运行构建时,所有消息都在输出中,所以这证实了我尽管我为调试而构建,但变量“splitsEnabled”设置为 true - 我希望调试值为“false”(因此不使用拆分进行调试)。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion '20.0.0'
    ext {
        splitsEnabled = false
    }
    defaultConfig {
    ...
    }
    buildTypes {
        debug {
            ...
        }
        releaseWithLog {
            ...
            splitsEnabled = true
        }
        release.initWith(releaseWithLog)
        release {
            ...
        }
    }
    ...
    splits {
        abi {
            println(splitsEnabled)
            enable splitsEnabled
            reset()
            include 'x86', 'armeabi-v7a', 'armeabi'
            exclude 'x86_64', 'mips64', 'arm64-v8a', 'mips'
            universalApk true
        }
    }
    ... 

【问题讨论】:

  • 由于splitsbuildTypes 的对等体,我怀疑不能在每种类型的基础上进行拆分,但我很高兴被证明是错误的。但请记住,enable splitsEnabled 在选择构建类型之前运行良好。 build.gradle 中的语句主要是构建对象模型。这不是解释脚本。只有在构建对象模型之后,Gradle 才会开始确定正在运行的任务所需的构建类型。
  • 我也很感兴趣 - 很想节省构建时间并在 Debug 中构建一个拆分
  • 我最终回到了旧的 ABI 构建方式来解决这个问题! twitter.com/silentnuke/status/619501266646003713

标签: android android-gradle-plugin


【解决方案1】:

您可以使用 Gradle 的命令行参数或 Android Studio 中 Gradle 任务的“脚本参数:”字段轻松解决此问题。我使用 -P 来定义 'dbgBld' 符号并将其用于调试构建,例如:

gradle -PdbgBld installDebug

我的 build.gradle 文件有以下拆分命令:

splits {
    abi {
        enable !project.hasProperty('dbgBld')
        reset()
        include 'armeabi', 'armeabi-v7a', 'x86', 'mips'
        universalApk true
    }
}

现在构建我使用的版本:

gradle assembleRelease

'dbgBld' 符号未定义,因此拆分启用字段解析为 true,我得到 5 个 APK 文件。在构建调试时,-PdbgBld 已经保存在我的 Android Studio 配置中,我只得到一个“胖”APK 进行调试,这导致调试构建速度更快。

格雷格

【讨论】:

  • 觉得这个很有用
  • 有没有办法在 Android Studio 运行/调试启动配置中进行设置?
  • @OrB 我看到现在我的 Android Studio 运行/调试启动配置执行“Grade-aware Make”命令。我不知道在哪里编辑此选项的任何选项,但要构建实际的 Release 版本,您仍然需要执行“gradle assembleRelease”。我只是颠倒条件并定义诸如 releaseBld 常量之类的东西,以拥有 'gradle -PreleaseBld assembleRelease' 并相应地修改 build.gradle。
  • reset() 调用是做什么的?
  • @scana: reset 将要包含在空字符串中的密度列表 (这允许与 include 结合使用来指示使用哪一个而不是哪些可以忽略)
猜你喜欢
  • 2014-06-18
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
相关资源
最近更新 更多