前言:这不是关于如何在Android应用程序中使用构建类型和产品风格的问题.我理解所涉及的基本概念.这个问题更多的是试图了解应该在构建类型中指定哪个配置,应该在产品风格中指定哪个配置,以及是否实际需要区分.
本周,我一直在了解有关Android应用程序的gradle配置的更多信息.我最初认为我对构建类型和产品口味有很好的处理,但是我越深入到文档中,我就越发现两者之间的区别对我来说根本不清楚.
由于存在明确定义的层次结构(在某种意义上,构建类型中指定的属性优先于产品风格中指定的属性),我不明白为什么需要区分构建类型和产品风格.将所有属性和方法合并到产品风味DSL对象中,然后将构建类型视为(默认)风味维度是不是更好?
一些导致我困惑的具体例子:
该signingConfig属性可以设置两种类型的建设和产品的口味......但minifyEnabled(和,我想,shrinkResources?)只能在构建类型进行配置.
applicationId只能在产品风格中指定...并且applicationIdSuffix只能在构建类型中指定!?
实际问题:
鉴于以上示例:构建类型与产品风格的角色之间是否存在明显区别?
如果是这样,了解它的最佳方法是什么?
如果没有,计划最终是将构建类型和产品风格合并到一个可配置的DSL对象中吗?
android studio里面有一个功能可以做这样的事情.基本上我的gradle脚本读取名为version的参数,根据该参数设置某个库的依赖版本.因此,当我执行gradlew -Pversion ='1.2.3'时,我在gradle中得到了这个字符串.但这只有在我从控制台调用gradle时才有效.
有没有办法在Android Studio中使用项目配置(按下小三角形)时将参数传递给gradle?
注意:我确实在默认配置下找到了Gradle VM选项和脚本参数,但添加-Pversion ='1.2.3'似乎没有效果.
我的项目有两组不同的测试.一个组仅使用默认运行,另一个组AndroidJUnitRunner必须使用自定义实现运行TestRunner extends MonitoringInstrumentation.
目前我每次需要运行另一组测试时都会testInstrumentationRunner通过编辑来切换build.gradle:
android{
defaultConfig {
//testInstrumentationRunner "my.custom.TestRunner"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道口味可以有自己的味道,testInstrumentationRunner但我目前的应用程序已经有2个flavourDimensions.使用flavor实际上是为了拥有不同版本的app.我需要2个版本的测试应用程序,都使用不同的testInstrumentationRunners 测试相同的应用程序.
我尝试testInstrumentationRunner通过迭代所有测试变体来改变.实际上有多个testInstrumentationRunner属性:
android.testVariants.all { TestVariant variant ->
//readonly
variant.variantData.variantConfiguration.instrumentationRunner
variant.variantData.variantConfiguration.defaultConfig.testInstrumentationRunner
}
Run Code Online (Sandbox Code Playgroud)
但是一旦android.testVariants调用,构建就会被配置,并且所有更改都不会反映在构建中.
如何动态更改testInstrumentationRunner(从gradle插件)?
我更喜欢有2个不同的gradle任务,每个任务使用不同的testInstrumentationRunner但是测试相同的变体.因为我打算创建一个gradle插件,所以解决方案也应该像插件一样工作.
我有:
void android_main(struct android_app* state)
Run Code Online (Sandbox Code Playgroud)
是否有可能从android_app结构中获取用于启动应用程序的命令行参数?如果没有,是否还有其他意思让他们使用C++调用(我不能使用Java代码)?