替换AndroidManifest.xml中的一个构建变量的字符串不适用于Gradle Android Plugin Version> 0.5.4

前端之家收集整理的这篇文章主要介绍了替换AndroidManifest.xml中的一个构建变量的字符串不适用于Gradle Android Plugin Version> 0.5.4前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
就在几周前,我有以下问题: How to replace a string for a buildvariant with gradle?

我也自己回答了这个问题.

一切工作正常到现在为止:我只是意识到我的复制任务不再工作了.我花了几个小时的问题,直到我意识到这取决于Gradle Android Plugin版本:一切,直到0.5.4工作正常.对于上层版本,我不会进入我的复制任务.

这是控制台输出

  1. // gradle android plugin version: 0.5.6 and 0.5.5 --> copy tas doesn't work
  2. :etscanner:prepareFlavor1Flavor1ReviewDependencies
  3. :etscanner:compileFlavor1Flavor1ReviewAidl
  4. :etscanner:generateFlavor1Flavor1ReviewBuildConfig
  5. :etscanner:mergeFlavor1Flavor1ReviewAssets
  6. :etscanner:compileFlavor1Flavor1ReviewRenderscript
  7. :etscanner:mergeFlavor1Flavor1ReviewResources
  8. :etscanner:processFlavor1Flavor1ReviewManifest
  9. :etscanner:processFlavor1Flavor1ReviewResources
  10. :etscanner:compileFlavor1Flavor1ReviewNote: Some input files use or override a d
  11. eprecated API.
  12. Note: Recompile with -Xlint:deprecation for details.
  13. Note: <path>.DetailAdapter
  14. .java uses unchecked or unsafe operations.
  15. Note: Recompile with -Xlint:unchecked for details.
  16.  
  17. :etscanner:dexFlavor1Flavor1Review
  18. :etscanner:processFlavor1Flavor1ReviewJavaRes UP-TO-DATE
  19. :etscanner:validateFlavor1Flavor1Signing
  20. :etscanner:packageFlavor1Flavor1Review
  21. :etscanner:zipalignFlavor1Flavor1Review
  22.  
  23. // gradle android plugin version: 0.5.4 --> copy task work
  24. :etscanner:prepareFlavor1Flavor1ReviewDependencies
  25. :etscanner:compileFlavor1Flavor1ReviewAidl
  26. :etscanner:generateFlavor1Flavor1ReviewBuildConfig
  27. :etscanner:mergeFlavor1Flavor1ReviewAssets
  28. :etscanner:compileFlavor1Flavor1ReviewRenderscript
  29. :etscanner:mergeFlavor1Flavor1ReviewResources
  30. :etscanner:processFlavor1Flavor1ReviewManifest
  31. ...hey you are in the copy task!
  32. :etscanner:processFlavor1Flavor1ReviewResources
  33. :etscanner:compileFlavor1Flavor1ReviewNote: Some input files use or override a d
  34. eprecated API.
  35. Note: Recompile with -Xlint:deprecation for details.
  36. Note: <path>DetailAdapter
  37. .java uses unchecked or unsafe operations.
  38. Note: Recompile with -Xlint:unchecked for details.
  39.  
  40. :etscanner:dexFlavor1Flavor1Review
  41. :etscanner:processFlavor1Flavor1ReviewJavaRes UP-TO-DATE
  42. :etscanner:validateFlavor1Flavor1Signing
  43. :etscanner:packageFlavor1Flavor1Review
  44. :etscanner:zipalignFlavor1Flavor1Review
  45. :etscanner:assembleFlavor1Flavor1Review

这真是一件奇怪的事情
有谁有一个想法如何解决这个问题?

更新1 2013-08-23

我的build.gradle文件

  1. buildscript {
  2. repositories {
  3. // maven central repo doesn't work with gradle android plugin version 0.5.+
  4. // error message is describe in this post:
  5. // https://plus.google.com/117954254390243608387/posts/RVBjoDMkLV5
  6. //mavenCentral()
  7. maven {
  8. url 'http://nexus/content/groups/public/'
  9. }
  10. }
  11. dependencies {
  12. classpath 'com.android.tools.build:gradle:0.5.4'
  13. // copy task doesn't work for following versions:
  14. //classpath 'com.android.tools.build:gradle:0.5.5'
  15. //classpath 'com.android.tools.build:gradle:0.5.6'
  16. //classpath 'com.android.tools.build:gradle:0.5.+'
  17. }
  18. }
  19.  
  20. apply plugin: 'android'
  21.  
  22. dependencies {
  23. compile 'com.android.support:support-v4:13.0.+' // support lib
  24. //compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
  25. compile project(':libraries:actionbarsherlock')
  26. compile project(':libraries:google-play-services_lib')
  27. }
  28.  
  29. android {
  30. compileSdkVersion 17
  31. buildToolsVersion "17.0.0"
  32.  
  33. defaultConfig {
  34. minSdkVersion 8
  35. targetSdkVersion 17
  36. versionName = "2.3"
  37. versionCode = 4
  38. }
  39.  
  40. // SIGN CONFIGS
  41. signingConfigs {
  42. flavor1 {
  43. storeFile file("keystore/myKeystore.keystore")
  44. storePassword = "store_password"
  45. keyAlias = "alias"
  46. keyPassword = "key_password"
  47. }
  48. flavor2 {
  49. storeFile file("keystore/myKeystore.keystore")
  50. storePassword = "store_password"
  51. keyAlias = "alias"
  52. keyPassword = "key_password"
  53. }
  54. debug {
  55. storeFile file("keystore/debug.keystore")
  56. storePassword = "android"
  57. keyAlias = "androiddebugkey"
  58. keyPassword = "android"
  59. }
  60.  
  61. }
  62.  
  63. // FLAVORS
  64. productFlavors {
  65. flavor1 {
  66. packageName 'myPackageName'
  67. signingConfig signingConfigs.flavor1
  68. }
  69. flavor2 {
  70. packageName 'myPackageName'
  71. signingConfig signingConfigs.flavor2
  72. }
  73. }
  74.  
  75. // BUILDTYPES
  76. buildTypes {
  77. falvor1Review {
  78. versionNameSuffix = versionNameSuffixOfReviewVersion
  79. signingConfig signingConfigs.flavor1
  80. }
  81. flavor2Review {
  82. versionNameSuffix = versionNameSuffixOfReviewVersion
  83. signingConfig signingConfigs.flavor2
  84. }
  85.  
  86. debug {
  87. packageNameSuffix ".debug"
  88. versionNameSuffix = versionNameSuffixOfReviewVersion
  89. signingConfig signingConfigs.debug
  90. }
  91. }
  92.  
  93. // Override Data in Manifest
  94. android.applicationVariants.each { variant ->
  95. variant.processManifest.doLast {
  96. copy {
  97. // *** SET COPY PATHS ***
  98. try {
  99. from("${buildDir}/manifests") {
  100. //println "from: ${buildDir}/manifests"
  101. include "${variant.dirName}/AndroidManifest.xml"
  102. //println "included: ${variant.dirName}/AndroidManifest.xml"
  103. }
  104. } catch (e) {
  105. println "error: " + e
  106. }
  107.  
  108. into("${buildDir}/manifests/${variant.name}")
  109. //println "into (neues Manifest): ${buildDir}/manifests/${variant.name}"
  110.  
  111. // *** DEFINE VARS ***
  112. def brandVersion = variant.buildType.name
  113. def brandVersionString = brandVersion.toString()
  114. def appName = "empty"
  115.  
  116. // *** SET APP NAME ***
  117. if (brandVersionString.contains("flavor1")) {
  118. appName = "my app name for flavor 1"
  119. } else if (brandVersionString.contains("flavor2")) {
  120. appName = "my app name for flavor 2"
  121. }
  122.  
  123. println "...hey you are in the copy task"
  124. // *** REPLACE LINES IN MANIFEST ***
  125. // --- add appName
  126. filter {
  127. String line ->
  128. 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\">");
  129. }
  130. }
  131. }
  132.  
  133. // *** SET PATH TO NEW MANIFEST ***
  134. variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
  135. //println "newManifest: ${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml"
  136. }
  137. }

更新2 2013-08-23

昨天我有另外一个奇怪的行为AS 0.2.5,它做了一些非常奇怪的构建:
正如你在我的过滤器中看到的,我之前在“清单”中的appName是“todo”:

  1. <application
  2. android:allowBackup="true"
  3. android:icon="@drawable/ic_launcher"
  4. android:label="todo"
  5. android:theme="@style/AppTheme">

当我进行构建时,应用程序中的appName是正确的.但是在应用程序启动器和设置/应用程序中,已将“todo”显示为appName.

在AS 0.2.0中构建项目后,一切正常.

解决方法

我有同样的问题,并阅读0.5.5的发行说明,在那里我找到答案.

“访问变体容器不强制创建任务.这意味着android.[application | Library | Test]在评估阶段,变体将为空.要使用它,请使用.all而不是.each“

猜你在找的Android相关文章