就在几周前,我有以下问题:
How to replace a string for a buildvariant with gradle?
我也自己回答了这个问题.
一切工作正常到现在为止:我只是意识到我的复制任务不再工作了.我花了几个小时的问题,直到我意识到这取决于Gradle Android Plugin版本:一切,直到0.5.4工作正常.对于上层版本,我不会进入我的复制任务.
这是控制台输出:
- // gradle android plugin version: 0.5.6 and 0.5.5 --> copy tas doesn't work
- :etscanner:prepareFlavor1Flavor1ReviewDependencies
- :etscanner:compileFlavor1Flavor1ReviewAidl
- :etscanner:generateFlavor1Flavor1ReviewBuildConfig
- :etscanner:mergeFlavor1Flavor1ReviewAssets
- :etscanner:compileFlavor1Flavor1ReviewRenderscript
- :etscanner:mergeFlavor1Flavor1ReviewResources
- :etscanner:processFlavor1Flavor1ReviewManifest
- :etscanner:processFlavor1Flavor1ReviewResources
- :etscanner:compileFlavor1Flavor1ReviewNote: Some input files use or override a d
- eprecated API.
- Note: Recompile with -Xlint:deprecation for details.
- Note: <path>.DetailAdapter
- .java uses unchecked or unsafe operations.
- Note: Recompile with -Xlint:unchecked for details.
- :etscanner:dexFlavor1Flavor1Review
- :etscanner:processFlavor1Flavor1ReviewJavaRes UP-TO-DATE
- :etscanner:validateFlavor1Flavor1Signing
- :etscanner:packageFlavor1Flavor1Review
- :etscanner:zipalignFlavor1Flavor1Review
- // gradle android plugin version: 0.5.4 --> copy task work
- :etscanner:prepareFlavor1Flavor1ReviewDependencies
- :etscanner:compileFlavor1Flavor1ReviewAidl
- :etscanner:generateFlavor1Flavor1ReviewBuildConfig
- :etscanner:mergeFlavor1Flavor1ReviewAssets
- :etscanner:compileFlavor1Flavor1ReviewRenderscript
- :etscanner:mergeFlavor1Flavor1ReviewResources
- :etscanner:processFlavor1Flavor1ReviewManifest
- ...hey you are in the copy task!
- :etscanner:processFlavor1Flavor1ReviewResources
- :etscanner:compileFlavor1Flavor1ReviewNote: Some input files use or override a d
- eprecated API.
- Note: Recompile with -Xlint:deprecation for details.
- Note: <path>DetailAdapter
- .java uses unchecked or unsafe operations.
- Note: Recompile with -Xlint:unchecked for details.
- :etscanner:dexFlavor1Flavor1Review
- :etscanner:processFlavor1Flavor1ReviewJavaRes UP-TO-DATE
- :etscanner:validateFlavor1Flavor1Signing
- :etscanner:packageFlavor1Flavor1Review
- :etscanner:zipalignFlavor1Flavor1Review
- :etscanner:assembleFlavor1Flavor1Review
这真是一件奇怪的事情
有谁有一个想法如何解决这个问题?
更新1 2013-08-23
我的build.gradle文件:
- buildscript {
- repositories {
- // maven central repo doesn't work with gradle android plugin version 0.5.+
- // error message is describe in this post:
- // https://plus.google.com/117954254390243608387/posts/RVBjoDMkLV5
- //mavenCentral()
- maven {
- url 'http://nexus/content/groups/public/'
- }
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:0.5.4'
- // copy task doesn't work for following versions:
- //classpath 'com.android.tools.build:gradle:0.5.5'
- //classpath 'com.android.tools.build:gradle:0.5.6'
- //classpath 'com.android.tools.build:gradle:0.5.+'
- }
- }
- apply plugin: 'android'
- dependencies {
- compile 'com.android.support:support-v4:13.0.+' // support lib
- //compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
- compile project(':libraries:actionbarsherlock')
- compile project(':libraries:google-play-services_lib')
- }
- android {
- compileSdkVersion 17
- buildToolsVersion "17.0.0"
- defaultConfig {
- minSdkVersion 8
- targetSdkVersion 17
- versionName = "2.3"
- versionCode = 4
- }
- // SIGN CONFIGS
- signingConfigs {
- flavor1 {
- storeFile file("keystore/myKeystore.keystore")
- storePassword = "store_password"
- keyAlias = "alias"
- keyPassword = "key_password"
- }
- flavor2 {
- storeFile file("keystore/myKeystore.keystore")
- storePassword = "store_password"
- keyAlias = "alias"
- keyPassword = "key_password"
- }
- debug {
- storeFile file("keystore/debug.keystore")
- storePassword = "android"
- keyAlias = "androiddebugkey"
- keyPassword = "android"
- }
- }
- // FLAVORS
- productFlavors {
- flavor1 {
- packageName 'myPackageName'
- signingConfig signingConfigs.flavor1
- }
- flavor2 {
- packageName 'myPackageName'
- signingConfig signingConfigs.flavor2
- }
- }
- // BUILDTYPES
- buildTypes {
- falvor1Review {
- versionNameSuffix = versionNameSuffixOfReviewVersion
- signingConfig signingConfigs.flavor1
- }
- flavor2Review {
- versionNameSuffix = versionNameSuffixOfReviewVersion
- signingConfig signingConfigs.flavor2
- }
- debug {
- packageNameSuffix ".debug"
- versionNameSuffix = versionNameSuffixOfReviewVersion
- signingConfig signingConfigs.debug
- }
- }
- // Override Data in Manifest
- android.applicationVariants.each { variant ->
- variant.processManifest.doLast {
- copy {
- // *** SET COPY PATHS ***
- try {
- from("${buildDir}/manifests") {
- //println "from: ${buildDir}/manifests"
- include "${variant.dirName}/AndroidManifest.xml"
- //println "included: ${variant.dirName}/AndroidManifest.xml"
- }
- } catch (e) {
- println "error: " + e
- }
- into("${buildDir}/manifests/${variant.name}")
- //println "into (neues Manifest): ${buildDir}/manifests/${variant.name}"
- // *** DEFINE VARS ***
- def brandVersion = variant.buildType.name
- def brandVersionString = brandVersion.toString()
- def appName = "empty"
- // *** SET APP NAME ***
- if (brandVersionString.contains("flavor1")) {
- appName = "my app name for flavor 1"
- } else if (brandVersionString.contains("flavor2")) {
- appName = "my app name for flavor 2"
- }
- println "...hey you are in the copy task"
- // *** REPLACE LINES IN MANIFEST ***
- // --- add appName
- filter {
- String line ->
- line.replaceAll("<application android:allowBackup=\"true\" android:icon=\"@drawable/ic_launcher\" android:label=\"todo\" android:theme=\"@style/AppTheme\">","<application android:allowBackup=\"true\" android:icon=\"@drawable/ic_launcher\" android:label=\"" + appName + "\" android:theme=\"@style/AppTheme\">");
- }
- }
- }
- // *** SET PATH TO NEW MANIFEST ***
- variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
- //println "newManifest: ${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml"
- }
- }
更新2 2013-08-23
昨天我有另外一个奇怪的行为AS 0.2.5,它做了一些非常奇怪的构建:
正如你在我的过滤器中看到的,我之前在“清单”中的appName是“todo”:
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="todo"
- android:theme="@style/AppTheme">
当我进行构建时,应用程序中的appName是正确的.但是在应用程序启动器和设置/应用程序中,已将“todo”显示为appName.
在AS 0.2.0中构建项目后,一切正常.
解决方法
我有同样的问题,并阅读0.5.5的发行说明,在那里我找到答案.
“访问变体容器不强制创建任务.这意味着android.[application | Library | Test]在评估阶段,变体将为空.要使用它,请使用.all而不是.each“