美文网首页
Gradle 3.2 AndroidManifest 找不到

Gradle 3.2 AndroidManifest 找不到

作者: 風清雲少 | 来源:发表于2019-04-11 16:50 被阅读0次

    3.0 AndroidManifest目录{buildDir}/intermediates/manifests/full/{variant.dirName}/AndroidManifest.xml
    3.2 AndroidManifest 目录 \build\intermediates\merged_manifests*Debug\process*DebugManifest\merged/AndroidManifest.xml

    解决办法是
    def manifestFile = "${manifestOutputDirectory}/AndroidManifest.xml"

    Modifying variant outputs at build time may not work
    Using the Variant API to manipulate variant outputs is broken with the new plugin. It still works for simple tasks, such as changing the APK name during build time, as shown below:

    // If you use each() to iterate through the variant objects,
    // you need to start using all(). That's because each() iterates
    // through only the objects that already exist during configuration time—
    // but those object don't exist at configuration time with the new model.
    // However, all() adapts to the new model by picking up object as they are
    // added during execution.

    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }
    

    However, more complicated tasks that involve accessing outputFile objects no longer work. That's because variant-specific tasks are no longer created during the configuration stage. This results in the plugin not knowing all of its outputs up front, but it also means faster configuration times.

    manifestOutputFile is no longer available
    The processManifest.manifestOutputFile() method is no longer available, and you get the following error when you call it:

    A problem occurred configuring project ':myapp'.
    Could not get unknown property 'manifestOutputFile' for task ':myapp:processDebugManifest'
    of type com.android.build.gradle.tasks.ProcessManifest.

    Instead of calling manifestOutputFile() to get the manifest file for each variant, you can call processManifest.manifestOutputDirectory() to return the path of the directory that contains all generated manifests. You can then locate a manifest and apply your logic to it. The sample below dynamically changes the version code in the manifest:

    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.processManifest.doLast {
                // Stores the path to the maifest.
                String manifestPath = "$manifestOutputDirectory/AndroidManifest.xml"
                // Stores the contents of the manifest.
                def manifestContent = file(manifestPath).getText()
                // Changes the version code in the stored text.
                manifestContent = manifestContent.replace('android:versionCode="1"',
                        String.format('android:versionCode="%s"', generatedCode))
                // Overwrites the manifest with the new text.
                file(manifestPath).write(manifestContent)
            }
        }
    }
    

    摘自 https://developer.android.google.cn/studio/known-issues

    相关文章

      网友评论

          本文标题:Gradle 3.2 AndroidManifest 找不到

          本文链接:https://www.haomeiwen.com/subject/pkhxwqtx.html