使用Android Studio 3.0 Canary 4构建出错

4

我目前正在开发一个即时应用程序,为此我已经将我的单块应用程序重构为功能模块。一切都正常运行,直到Android Studio金丝雀版3,但在更新到Android Studio金丝雀版4后,我的项目无法构建,出现以下错误:

A problem was found with the configuration of task ':minimoBase:dataBindingExportBuildInfoDebugAndroidTest'.

> Directory '/Users/nayak.vishal/projectData/minimo_instant_app_project/putica-client-android-
native/minimoBase/build/intermediates/data-binding-info/androidTest/debug' 
specified for property 'xmlOutFolder' does not exist.

你在 "build.gradle(applicationName)" 中更改了版本号吗? - Nitin Patel
6个回答

8
以下步骤是解决此问题的临时方法:
在gradle命令行上执行以下构建命令
1) gradlew clean
2) gradlew :appModule:assembleDebug
这里的appModule是用于构建可安装APK的应用程序模块的名称。该构建成功,生成的调试APK可以成功安装到输出文件夹中。
3) gradlew :instantAppModule:assembleDebug
这里的instantAppModule是即时应用程序模块的名称。该构建成功,并且即时应用程序APK可以通过深度链接安装和启动。
一旦以上命令行构建成功,通过Android Studio Canary 4进行构建也会停止抛出构建错误。

这些链接应该会有所帮助 :) https://docs.gradle.org/0.9-rc-2/userguide/tutorial_gradle_command_line.html https://developer.android.com/studio/build/building-cmdline.html - Vishy

6

当我为库模块开启数据绑定data-binding时,我遇到了类似的错误。当我关闭它并将所有需要data-binding的类移动到app模块时,它就可以工作了。因此,我猜测DataBinding在库模块上不再起作用了(Gradle 2.x可以正常使用)。

dataBinding {
    enabled = false 
}

我正在使用 com.android.tools.build:gradle:3.0.0-alpha5 和 Android Studio 3.0 预览版 Canary5。

更新

尽管原始答案有效,但我真的想在我的库模块上开启 data-binding,我在其中使用绑定技术实现一些基础类。我将它们移回到 library 模块并升级 kotlin 版本至最新版本的 1.1.3-2。突然间它也起作用了。我不确定哪种方法更好,但两种方式都适用于我。

更新2

我现在正在使用 com.android.tools.build:gradle:3.0.0-alpha9 和 kotlin 的 1.1.3-2,突然问题又出现了。现在我认为问题并不来自 Kotlin。我的库模块已经开启了 dataBiding { enabled=true},但它没有任何布局文件。我尝试创建一个包裹在 <layout> 标签中的假布局文件,这样就可以解决问题了。

 <?xml version="1.0" encoding="utf-8"?>
<layout>
    <View xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>
</layout>

我在AS 3.0 Canary-6也遇到了同样的问题。您的解决方案解决了我的问题。感谢您的更新。实际上,项目默认启用了数据绑定。 - Custadian

3

我曾经遇到一个问题,当时我有一个“基础”功能模块,没有任何布局(所有实际布局都在单独的功能模块中)。

在基础功能模块中添加一个虚拟布局XML文件(例如,作为 base/src/res/layout/dummy.xml),这样缺失的目录就会被创建,应用程序就可以编译了。

(这是使用 com.android.tools.build:gradle:3.0.0-alpha6


1
这正是我遇到的问题。感谢您指出。 - tasomaniac
@pete-harris 是正确的。您应该添加至少一个布局,使用“layout”作为根元素 - 视图数据绑定根元素。因此,如果您没有配置任何数据绑定布局,请尝试创建一个,如下所示: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data></data> <android.support.design.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.design.widget.CoordinatorLayout></layout> - marciowb

3
在您的gradle.properties文件中,添加以下行:
android.enableAapt2=false

最近的AS3.0版本默认采用AAPT2。你可以在gradle.propertіes文件中禁用AAPT2,使用上述代码行,并继续开发AS3 canary 4。


1
这个更改没有帮助。 - Nguyen Minh Binh

2

我曾经遇到过同样的问题,似乎是Canary 4版本中的一个bug。

目前,我采用了一种解决方法,将Android Studio降级为3.0.0 Canary 3版本(这是所有Android Studio版本的存档),并将Android Gradle插件降级至3.0.0-alpha3版本:

dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
    ...
}

1

更新:

更新后,请检查金丝雀版本。要查看Android Studio版本,请查看工具栏上方的名称(文件..编辑..视图..行),其中名称末尾类似于“Canary X”。-> X是数字,如3、4、5等。

例如,假设更新版本(X)为5。请尝试在build.gradle(applicationName)中更改该类路径为3.0.0-alpha5,然后再次同步(/尝试):

dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0-alpha5'
}

这句话的意思是:更新版本(X)的意思是:
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0-alphaX'
}

感谢您的回复。是的,Gradle插件版本已经是gradle:3.0.0-alpha4,并且gradle wrapper属性中的distributionURL设置为gradle-4.0-rc-1-all.zip。这是在更新到Canay 4时由Android Studio自动提示的。因此,我不认为这是构建错误的原因。 - Vishy
更改 Gradle 版本后,仍然出现相同的错误。 - Nguyen Minh Binh

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