我已经更新了我的android studio,还将gradle更新到了3.2.0。不幸的是,当我尝试构建项目时,遇到以下问题。
在build.gradle中
import com.android.builder.core.DefaultManifestParser
变为红色(在生成器处),并且
new DefaultManifestParser(android.sourceSets.main.manifest.srcFile)
获取could not find matching constructor for: com.android.builder.core.DefaultManifestParser(java.io.File)
还原到较早的gradle可以解决此问题,并且我已删除.gradle缓存。
我还验证了使用3.1.2 gradle构建的项目,并且下载的gradle缓存中有一个类。
答案 0 :(得分:2)
Default Noa Drach在其答案中指出,DefaultManifestParser的构造函数已更改,因此您必须像这样在其中提供其他参数。
def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile, new BooleanSupplier() {
@Override
boolean getAsBoolean() {
return true
}
}, null)
它对我有用,希望它也对您有用。
答案 1 :(得分:1)
这是答案的初始占位符-我发现构造函数已更改,现在有2个其他参数
/**
* 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 manifest to be parsed.
* @param canParseManifest whether the manifest can currently be parsed.
* @param issueReporter EvalIssueReporter
*/
public DefaultManifestParser(
@NonNull File manifestFile,
@NonNull BooleanSupplier canParseManifest,
@Nullable EvalIssueReporter issueReporter) {
...
}
但是我仍然不确定如何产生第二和第三参数-任何输入将不胜感激。 (我知道我可以传递null而不是第三个参数,但是知道如何实际使用它会很好)
答案 2 :(得分:0)
尽管不是一个很好的答案,因为它没有发现DefaultManifestParser是否被描述。
我正在使用清单分析器从清单中获取versionName
和versionCode
。这是我基础项目的功能,构建系统一直抱怨了一段时间。
为了升级到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">