有些人可能看过 Android Studio Gradle i/o,Xavier Ducrohet 在他的快速演讲中提到了如何使用 android gradle 构建系统。我的问题是,文档和演示文稿缺少快速入门的信息。或者至少对我来说。在我下面的代码中,我试图解决 gradle android 插件系统的使用问题,我确信我有一些错误的步骤和一些正确的步骤。 (我没有经常使用 ant 或 maven)
也许我会用我目前所做的一步一步地完成它。
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
signingStoreLocation = "debug.keystore"
signingStorePassword = "***************"
signingKeyAlias = "***************"
signingKeyPassword = "**************"
}
起初我为调试构建配置默认设置(或者每个使用默认设置的构建..这意味着没有构建类型或风格?)
资源集:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject']
res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode']
assets.srcDirs = ['assets']
}
}
在这一步中,我定义了 sourceSets。这是我的第一个问题。如果我有相同的代码我想用于两个项目,是否可能/或者是否应该定义更多的源集,比如 -->
sourceSets {
main {...}
srcsetforanotherproject {...}
}
...取决于底层的 src 文件夹?还是应该像在我的第一个 sourceSets 声明中那样定义 sourceSets,通过定义一组不同的,例如 res 文件夹,就像 Xavier Ducrohet 提到的那样? (也不清楚我是只能以这种方式对 res 文件夹执行此操作,还是对 java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'] 等 java src 代码文件夹执行此操作。
签名配置:
signingConfigs {
debugRelease {
storeFile file("debug.keystore")
}
release {
storeFile file("release.keystore")
}
testflight {
storeFile file("testflight.keystore")
}
}
在这一步中,我定义了用于不同版本的不同键。应该没问题...
构建类型:
buildTypes {
debugRelease.initWith(buildTypes.release)
testflight.initWith(buildTypes.release)
sourceSets.debugRelease.setRoot("src/release")
sourceSets.debugRelease.setRoot("src/release")
sourceSets.debugRelease.setRoot("src/release")
debugRelease {
packageNameSuffix ".debugRelease"
versionNameSuffix "-DEBUG"
debuggable true
signingConfig signingConfigs.debug
}
testflight {
packageNameSuffix ".testflight"
versionNameSuffix "-TESTFLIGHT"
signingConfig signingConfigs.testflight
}
release {
packageNameSuffix ".release"
versionNameSuffix "-RELEASE"
runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
}
这一步比 gradle android 插件的任何其他步骤都解释得更清楚。除了我不知道是否有一个预定义的版本或调试设置在后台工作……我是否需要澄清它……至少我是这么认为的,因为使用了名称后缀、proguard 或声明了一个此构建的关键 (signingConfig)。
口味:
flavorGroups "abi", "version"
productFlavors {
arm {
flavorGroup "abi"
}
standardproject1 {
flavorGroup "version"
minSdkVersion 7
targetSdkVersion 14
packageName "com.project.maingradle.normal"
sourceSet sourceSets.main
}
standardproject2 {
flavorGroup "version"
minSdkVersion 6
targetSdkVersion 14
packageName "com.otherproject.normal"
sourceSet sourceSets.main
}
testflightproject1 {
flavorGroup "version"
minSdkVersion 7
targetSdkVersion 14
packageName "com.project.maingradle.testflight"
sourceSet sourceSets.main
}
testflightproject2 {
flavorGroup "version"
minSdkVersion 6
targetSdkVersion 14
packageName "com.otherproject.testflight"
sourceSet sourceSets.main
}
}
}
我个人认为口味是最有趣的部分。 Xavier Ducrohet 说如果你想为不同的 flavor 构建使用不同的键,你不应该在构建类型中定义键(而不是在 flavor 中声明)?我不知道我是否理解正确。
无论如何...我在这里尝试做的是定义应该使用不同设置构建的不同风格,例如,针对不同系统的 sdk 版本控制、独占包名和设置依赖源集,就像您在示例中看到的那样。我不确定的是,构建类型如何依赖于口味……它们只是将每种口味乘以每种构建类型吗?并且...设置一个 sourceSet 是否可以(如果可以设置更多 sourceSets),就像这样在一个 flavor 中?
最佳答案
How the buildtypes depend on flavors...do they just multiply every flavor to every buildtype?
是的,Gradle 将生成构建类型和产品风格的每种组合。根据 Gradle Plugin User Guide ,每个构建类型和产品风格的组合称为一个构建变体。
Is it ok to set a sourceSet (if it is possible to set more sourceSets), like this in a flavor?
当然!根据 Sourcesets and Dependencies documentation,Product Flavors(和 Build Variants)还自动包含来自 src/myFlavorName 的它们自己的源集。 .
关于Android Studio Gradle 第一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171639/
我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful
有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|
我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,
或者好像我必须自己写方法?(保持DHA不变):ruby-1.9.2-p180:001>s='omega-3(DHA)'=>"omega-3(DHA)"ruby-1.9.2-p180:002>s.capitalize=>"Omega-3(dha)"ruby-1.9.2-p180:003>s.titleize=>"Omega3(Dha)"ruby-1.9.2-p180:005>s[0].upcase+s[1..-1]=>"Omega-3(DHA)" 最佳答案 如果我的回答只是垃圾,我深表歉意(我不做ruby)。但我相信我已经为您找到了答
我有这个字符串:auteur="comtedeFlandreetHainaut,Baudouin,Jacques,Thierry"我想删除第一个逗号之前的所有内容,即在这种情况下保留“Baudouin,Jacques,Thierry”试过这个:nom=auteur.gsub(/.*,/,'')但这会删除最后一个逗号之前的每个逗号,只保留“Thierry”。 最佳答案 auteur.partition(",").last#=>"Baudouin,Jacques,Thierry" 关于rub
我有一个以时间戳为键的哈希。hash={"2016-05-31T22:30:58+02:00"=>{"path"=>"/","method"=>"GET"},"2016-05-31T22:31:23+02:00"=>{"path"=>"/tour","method"=>"GET"},"2016-05-31T22:31:05+02:00"=>{"path"=>"/contact_us","method"=>"GET"}}我订购了这个系列并得到了第一双这样的:hash.sort_by{|k,_|k}.first.first但是我该如何删除它呢?删除方法requiresyou知道key的准确
我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并获得它们的总和。示例:["5Apple","5Orange","15Grapes"]预期输出=>25我的尝试:["5","5","15"].map(&:to_i).sum 最佳答案 我从你的问题中找到了答案。["5Apple","5Orange","15Grapes"].map(&:to_i).sum在数组中,如果存在任何整数可转换值,那么它将自动转换为整数。 关于arrays-字符串数组中字符串第一部分的总和,我们在Sta
在我看来,我正在尝试显示一个对象表,这是我的代码:CategoriesCBB's">然而这是抛出一个错误说:can'tconvertCapabilityBuildingBlockintoArray关系是正确的,错误来self尝试在此处减去数组的第一个对象的行:有什么方法可以忽略数组中的第一个对象来遍历数组吗?谢谢 最佳答案 尝试使用Array.drop-http://www.ruby-doc.org/core/classes/Array.html#M000294 关于ruby-on-ra
我正在使用FasterCSV我正在循环使用这样的foreachFasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv",:encoding=>'u',:headers=>:first_row)do|row|但问题是我的csv将前3行作为标题...有什么方法可以使fasterCSV跳过前三行而不是仅跳过第一行?? 最佳答案 不确定FasterCSV,但在Ruby1.9标准CSV库(由FasterCSV制作)中,我可以执行以下操作:c=CSV.open'/path/to/
我有一个数组。我需要保留除索引0处的元素以外的所有内容。此时我的大脑被炸毁了。我整天都在编程。任何帮助都会很棒。谢谢! 最佳答案 使用Array#shift方法,它完全符合您的要求:a=[1,2,3]a.shift#=>1a#=>[2,3] 关于Ruby删除数组的第一个索引,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/11783005/