- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Android Studio 0.8.6 中工作
有 3 个变体 - Noopt、Debug、Release - 根据正在构建的变体设置变量的值。例如,如果我正在构建一个 Noopt 版本,字符串 mode
应该等于 noopt
。
这就是我现在正在尝试的。
buildTypes {
release {
debuggable false
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.packageRelease
mode = "release"
println("In RELEASE")
}
noopt {
debuggable true
jniDebugBuild true
renderscriptDebugBuild false
runProguard false
zipAlign true
mode = "noopt"
println("In NOOPT")
}
}
我通过做在android之外声明模式
def mode = ""
但是,无论我使用何种变体构建,mode
始终设置为 noopt
。如果我添加更多变体,变量将始终设置为最后一个变体。
我对 gradle 工作原理的理解有误吗?我本以为它只会运行您正在构建的变体的代码,但它似乎会为每个变体运行它 - 或者至少任何非标准的 Android 属性/代码都会运行,无论如何。
还有其他方法可以做到这一点吗?
要添加更多上下文,这就是我最后想要的:
task runCustomScript(type:Exec) {
def mode = ""
if (currentBuildType == debug)
mode = "DEBUG=1"
else if (currentBuildType == noopt)
mode = "NOOPT=1"
/* etc etc etc */
executable "myExec"
args "-C", "blahblahblah", mode
}
因此,我需要一种方法来查找当前正在从任务中运行的变体或构建类型。
最佳答案
Is my understanding of how gradle works incorrect?
据推测,是的。
I would have assumed that it would only run the code for the variant you're building
没有。
but it appears to run it for every variant
是的,因为您正在运行的代码正在构建表示任务模型的数据结构。只有在 build.gradle
被解释后,任务才会运行。将 build.gradle
想象成一个 XML 文件或 JSON 文件,但恰好是在 Groovy 脚本语言之上作为特定领域语言 (DSL) 实现的。
Is there some other way I should be doing this?
是的,虽然由于不清楚 mode
是做什么用的,所以很难告诉你怎么做。您可以考虑提出一个单独的 Stack Overflow 问题,解释您真正想要完成的目标,以便我们可以帮助您确定解决方案。
=====
您需要生成 N 个任务,每个变体一个。例如,此 build.gradle
文件 fragment 为所有非调试构建变体创建自定义 jar*
任务:
// from http://stackoverflow.com/a/19484146/115145
android.libraryVariants.all { variant ->
def name = variant.buildType.name
if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
return; // Skip debug builds.
}
def task = project.tasks.create "jar${name.capitalize()}", Jar
task.dependsOn variant.javaCompile
task.from variant.javaCompile.destinationDir
task.archiveName = "cwac-${task.archiveName}"
}
我还没有创建一系列 Exec
任务,但我认为它会转化为如下内容:
android.libraryVariants.all { variant ->
def name = variant.buildType.name
def task = project.tasks.create "runCustomScript${name.capitalize()}", Exec
// you probably need something here for task.dependsOn variant.javaCompile
task.executable "myExec"
// derive mode in here based on variant
task.args "-C", "blahblahblah", mode
}
这将为您提供 runCustomScriptNoopt
、runCustomScriptDebug
和 runCustomScriptRelease
任务。
您很可能希望使用 task.dependsOn
来确定在运行此任务之前必须先完成哪些其他任务。
关于Android Studio - 按变体设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695289/
我正在创建一个连接到 firebase 的应用程序。但我面临一些问题。当同步我的 gradle 文件时,我收到此警告 WARNING: API 'variant.getMergeResources()
想知道是否有任何方法可以将变体分配给自定义 radio 输入?我想为 2 天、3 天和标准运输设置不同费率的分级运输。我可以使用变体来做到这一点,但下拉菜单对我不起作用。我想要日期信息和日期选择器,以
我是 Haskell 的新手。鉴于 Haskell 的整个前提是函数将始终返回相同的值,我希望有某种方式,例如在编译时计算常量的斐波那契值,就像我可以在 C++ 中使用模板元编程一样,但我不知道该怎么
我是 OCaml 的新手,但过去两天一直在工作,以便更好地了解如何使用它。我最近做了很多事情,但有些事情阻碍了我前进。 我正在尝试在 OCaml 中实现 evaexpr。使用这种语言非常容易,你会说:
我有一个使用一些typedef的std::variant的代码库。 最初,它们是不同的类型,但现在它们像下面的示例一样重叠 typedef int TA; typedef int TB; std::v
鉴于此: data Foo = Bar { name :: String } | Baz { nickname :: String } 函数 name 和 nickname 似乎都是 Foo -> S
嘿,我猜这可能相当微不足道,但我很难找到答案或弄清楚它。 我正在尝试创建一个带有任意间距的彩色方 block 网格。这本身很容易做到,特别是因为我只需要九个正方形。但是虽然我看着我完成的代码,我不禁觉
我有 woocommerce 设置,其中包含产品和这些产品的变体。当我更改变化时(例如,产品的尺寸(340克或900克),我希望它在页面上动态更新价格,以便人们可以看到两种尺寸之间的价格差异。目前,我
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
在我的一节课上,我被问到这是一个脑筋急转弯,但我无法弄明白(这不是家庭作业问题,只是其中一位助教给我们的一个脑筋急转弯让我们思考)。 给你一根杆,上面有 n 个要切割的点,例如 [1,5,11],以及
关于 CRP如果我想实现它的细微变化(使用模板模板参数),我会得到一个编译错误: template class Derived> class Base { public: void Call
我正在创建一个 woocommerce 主题,并且我有产品变体,即显示在产品详细信息页面上的尺寸,但问题是我想通过使用产品 ID 在我的自定义 php 页面中获取所有变体,任何人都可以帮助我。 提前致
我正在使用 Ionic 开发移动应用程序,我必须与 Twitter API 连接。 所以我使用 ng-cordova 和 $cordovaAuth .但是当我这样做时: $cordovaOauth.t
这里的网站有一个音乐播放器http://www.numberonedesigns.com/ubermusic.com/ ...当点击下一个按钮并随机突出显示时,它不会正确随机化。它总是返回到播放列表中
我有列 sql 变体,其含义如下:100, 150, D1我正在尝试根据特定逻辑将列中的所有数字转换为字母(例如 D1)以防万一。但是 150 有空格并且 CASE WHEN 不起作用。 这是我正在使
有没有一种快速方法可以用从匹配模式派生的数据替换所有出现的某些模式? 例如,如果我想将字符串中出现的所有数字替换为用 0 填充到固定长度的相同数字。 在本例中,如果长度为 4,则 ab3cd5 将变为
我目前正在寻找生成具有特定位数的数字列表,我的代码当前如下: | Python 2.7 | import itertools inp = raw_input('Number of digits to
我正在对类型系统进行研究。对于这项工作,我正在研究流行语言中变体、结构子类型、通用多态性和存在多态性的用法。像 heskell、ocaml 这样的功能性语言提供了这样的功能。但我想知道像 C++ 这样
这是 variant.hpp 文件中的相关代码(可在此处找到 http://www.boost.org/doc/libs/1_49_0/boost/variant/variant.hpp) templ
您好,我有两个具有多对多关系的表和一个联结表。简而言之,具有不同属性的产品也随之增加了价格。为了更清楚地说明我是产品和属性表。 +-------------+------------+--------
我是一名优秀的程序员,十分优秀!