Build error with Android Studio 3.0 Canary 4

2019-05-07 16:12发布

问题:

I am currently in the process of developing an Instant app, for which I have restructured my monolithic app into feature modules. Everything was up and running till Android Studio canary 3, but after an update to Android Studio Canary 4 my project fails to build with the following error:

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.

回答1:

The following procedure worked as a workaround for this issue:

Execute the following build commands on the gradle command line

1) gradlew clean

2) gradlew :appModule:assembleDebug

  • here appModule is the name of the app module for building the installable apk
  • the build is successful and the debug apk generated in the output folder can be installed successfully

3) gradlew :instantAppModule:assembleDebug

  • here instantAppModule is the name of the instant app module
  • the build is successful and the instant app apks can be installed and launched via deep link

Once the above command line builds are successful, building via Android Studio Canary 4 also stops throwing the build error.



回答2:

I got similar error when I turn on data-binding for library module. When I turn it off and move all classes that require data-binding to app module, it works. So I guess there is a problem that DataBinding doesn't work on Library module any more ( Gradle 2.x fine with this).

dataBinding {
    enabled = false 
}

I am using com.android.tools.build:gradle:3.0.0-alpha5 and Android Studio 3.0 Preview Canary5

UPDATE

Although the original answer worked, I really want to turn on data-binding on my library module, where I implement some base classes using binding technique. I move them back to library module and upgrade kotlin version to the latest one 1.1.3-2. Suddenly it works also. I am not sure which one is the better but both ways work for me.

UPDATE 2

I am using com.android.tools.build:gradle:3.0.0-alpha9 and kotlin 1.1.3-2 at this time and suddenly the problem re-appear. Now I think the problem doesn't come from Kotlin. My library module turned dataBiding { enabled=true}, but it doesn't have any layout file. I tried to create a fake layout file wrapped by <layout> tag and it works

 <?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>


回答3:

In your gradle.properties file , add the following line

android.enableAapt2=false

Recent versions of AS3.0 switched to using AAPT2 by default. You can disable AAPT2 in your gradle.propertіes fіle with above mentioned line of code, and continue developing on AS3 canary 4.



回答4:

This was an issue for me when I had a "base" feature module without any layouts (all my actual layouts are in separate features)

Adding a dummy layout XML file in the base feature (e.g. as base/src/res/layout/dummy.xml) meant the missing directory was created and the app compiled.

(this is using com.android.tools.build:gradle:3.0.0-alpha6)



回答5:

Updated:

Just check the Canary version after update. For that see Android Studio version just above the toolbar (File..Edit..View..line) where name at end like "Canary X".-> X is number like 3,4,5,etc.

For example suppose updated version(X) is 5. Try to change that classpath in build.gradle(applicationName) to 3.0.0-alpha5 and sync(/Try) again:

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

Means that updated version(X):-

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


回答6:

I've had the same problem, seems like a bug in Canary 4.

For now, as a workaround, I downgraded to Android Studio 3.0.0 Canary 3 (This is an archive of all Android Studio releases) and also downgraded the Android Gradle plugin to 3.0.0-alpha3:

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