Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了替换AndroidManifest.xml中的一个构建变量的字符串不适用于Gradle Android Plugin Version> 0.5.4大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
就在几周前,我有以下问题: How to replace a string for a buildvariant with gradle?

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

@R_375_6944@到现在为止:我只是意识到我的复制任务不再工作了.我花了几个小时的问题,直到我意识到这取决于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@H_801_9@ 
 

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

更新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"
    }
}@H_801_9@ 
 

更新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">@H_801_9@ 
 

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

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

解决方法

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

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

大佬总结

以上是大佬教程为你收集整理的替换AndroidManifest.xml中的一个构建变量的字符串不适用于Gradle Android Plugin Version> 0.5.4全部内容,希望文章能够帮你解决替换AndroidManifest.xml中的一个构建变量的字符串不适用于Gradle Android Plugin Version> 0.5.4所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。