使用Android Studio 3.2时,项目无法构建。

3
我已经更新了我的Android Studio,并将Gradle更新为3.2.0。但是在尝试构建项目时,出现了以下问题。
在build.gradle中:
import com.android.builder.core.DefaultManifestParser

变红(在构建器中),并且

new DefaultManifestParser(android.sourceSets.main.manifest.srcFile)

出现错误:gets could not find matching constructor for: com.android.builder.core.DefaultManifestParser(java.io.File)

退回到早期的gradle版本可以解决此问题,并且已删除.gradle缓存。

另外,我已经验证了该项目可以使用3.1.2版本的gradle构建,并且下载的gradle缓存中存在一个类。


错误似乎表明还有其他可能的构造函数。那个类是否有Javadoc文档? - AutonomousApps
这似乎是您在此处使用的内部类。使用它的目的是什么?也许还有其他方法。 - Henry
2
默认清单解析器的构造函数已更改,现在包括2个额外的参数。public DefaultManifestParser( @NonNull File manifestFile, @NonNull BooleanSupplier canParseManifest, @Nullable EvalIssueReporter issueReporter) {正在尝试弄清如何创建第二个参数 - 一旦我成功做到了,就会发布答案。 - Noa Drach
3个回答

3

DefaultManifestParser的构造函数已更改,正如Noa Drach在她的回答中指出的那样,因此您需要在其中提供其他参数,就像这样。

def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile, new BooleanSupplier() {
            @Override
            boolean getAsBoolean() {
                return true
            }
        }, null)

它对我有效,希望对你也有效。


谢谢你的提示。顺便说一下,我是女性而不是男性,尝试编辑你的帖子,但编辑需要更改更多内容。 - Noa Drach

1
这是一个初始的占位符回答 - 我发现构造函数已更改,现在它有两个额外的参数。
/** * Builds instance of the parser, and parses the supplied file. The manifest is lazily parsed * and should typically only be parsed during the execution phase. * * @param manifestFile 要解析的清单文件。 * @param canParseManifest 是否可以解析清单。 * @param issueReporter EvalIssueReporter */ public DefaultManifestParser( @NonNull File manifestFile, @NonNull BooleanSupplier canParseManifest, @Nullable EvalIssueReporter issueReporter) { ... }
然而,我仍然不确定如何产生第二个和第三个参数 - 任何输入都将不胜感激。 (我知道我可以传递空值作为第三个参数,但知道如何实际使用它会很好)

0

虽然并不完全是答案,因为它没有找出DefaultManifestParser是否已经被弃用。

我曾使用清单解析器从清单中获取versionNameversionCode。这是我的基础项目的一个功能,但构建系统已经抱怨了一段时间。

为了升级到3.2 gradle,我改变了我的版本信息:

 defaultConfig {
    ...
    def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile)
    versionName = manifestParser.getVersionName()
    versionCode = manifestParser.getVersionCode()
    ...
 }

以下是:

defaultConfig {
    ...
    versionName = "1.1.1.0"
    versionCode = 12
}

从我的AndroidManifest中删除versionName和versionCode以下的内容

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="12"
    android:versionName="1.1.1.0">

给我...

 <manifest xmlns:android="http://schemas.android.com/apk/res/android">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接