knobi
knobi

Reputation: 233

Could not create task ... this and base files have different roots

I've built an app with Android Studio and Flutter and wanted to generate a signed APK. When I go to Tools->Flutter->Open Android module in Android Studio, it starts to build the project.

But after some time I get this Error and I don't know how to change the roots or what to do. It seems like the problem are just two packages (url_launcher and shared preferences)

My Project is on my hard disk F: and the flutter folder is on my hard disk C:

Error Message "Could not create task..."

Is this maybe because my project is on F: and the flutter folder with the packages in C: ? How can I change the flutter folder to F: ?

Upvotes: 20

Views: 34583

Answers (12)

Gospel John
Gospel John

Reputation: 21

Steps:

  • Create a new folder on the desired drive (e.g., D:\PubCache).
  • Open System Properties (Win + R > sysdm.cpl > Advanced tab > Environment Variables).
  • Under User Variables, click New and add:
    • Variable Name: PUB_CACHE
    • Variable Value: D:\PubCache (or another location on the same drive as your project).
  • Move the contents of the existing cache folder (C:\Users\ADMIN\AppData\Local\Pub\Cache) to the new location (D:\PubCache) if you want to keep the existing cached packages.
  • Restart your terminal or IDE to apply the changes.
  • Run the following commands:
    • flutter clean
    • flutter pub get

Upvotes: 2

ruiyong.lee
ruiyong.lee

Reputation: 1

If the project is not on the C drive, create a folder named Pub under the same drive letter as the project for plug-in caching, and then configure the folder path to the system environment variable PUB_CACHE, otherwise an error will be reported when compiling the Android native project.

Upvotes: 0

Absaar Hunzai
Absaar Hunzai

Reputation: 404

As mentioned by many above it is due to Pub cache directory and project directory not being on the same drive, which is a known issue

Apart from moving both directories to the same drive there is a simple workaround of creating a symbolic junction/link for your project directory

Assuming you have Pub cache in C drive and your project in D drive:

  1. Create a hard symbolic link in C drive to your app directory using windows command prompt:
mklink /J C:\Development\your\project\directory\link D:\your\project\directory\real\path
  1. Open the project in your IDEs from symbolic junction/link
C:\Development\your\project\directory\link instead of D:\your\project\directory\real\path
  1. With this everything should work as expected, however if you open terminal in IntelliJ it might give you the real path instead of symbolic link, hence after opening terminal do
cd C:\Development\your\project\directory\link
  1. If you are using any custom or forked local dependencies from a relative path not absolute path and these are also in D(or any other non Pub cache) drive then you will need to create symbolic links for these paths as well e.g.:
mklink /J C:\Development\Flutter\custom_dependencies D:\Development\Flutter\custom_dependencies

If you use PoweShell then you need to use New-Item to create symbolic directory junction:

New-Item -ItemType Junction -Path "Link" -Target "Target"

Upvotes: 7

Hassan Ahmad
Hassan Ahmad

Reputation: 1

For those whose Gradle Sync failed, follow these steps:

  1. Do flutter clean in your project terminal.
  2. Open android folder of your project using Android Studio - Android Studio->File->Open->Your_Project->Android.
  3. Now do Gradle Sync.
  4. Close your android project.
  5. Do flutter pub get in your flutter project terminal now.

Upvotes: 0

Taher Salah
Taher Salah

Reputation: 437

As a workaround, you can do the following steps :

    1. Open a terminal.
    1. Run flutter clean.
    1. Do the Gradle sync without flutter pub get and make necessary changes to native Android code or click on try again.
    1. Do flutter pub get and run the app.
    1. You will see that the SHA1 has been generated.

Upvotes: 7

YOUMTINET
YOUMTINET

Reputation: 33

I have the same issue, it seems the flutter project and the SDKs are in different prtitions of the hard disk

just go to the project root and run flutter clean then go to the android folder and delete the .gradle folder then back to the project root and run flutter pub get

and rebuild the app

Upvotes: 3

Shailendra Rajput
Shailendra Rajput

Reputation: 2982

I was facing the same issue all I did was to go build.gradle file in android folder and then change the following code as follows

    dependencies {
//CHANGE THE Version in  YOUR BUILD.GRADLE FILE
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

This is a temporary solution - track status here

Upvotes: 1

ANAS AJI MUHAMMED
ANAS AJI MUHAMMED

Reputation: 773

As a workaround, you can do the following steps -

  1. run flutter clean
  2. do the Gradle sync without flutter pub get and make necessary changes to native android code.
  3. do pub get and run the app.

Upvotes: 69

Lahiru Chandima
Lahiru Chandima

Reputation: 24128

I faced the same issue in my android project after upgrading gradle.

My project was in my D drive, and I had set the destination folder for the generated apk in my desktop, which is in C drive. I changed the destination folder to a folder in D drive, and the issue got resolved.

Upvotes: 1

Akmal Irfan
Akmal Irfan

Reputation: 243

I fixed mine by moving the project directory to the same drive. My project was stored in E:\ so, I moved it to C:.

My answer is almost the same as rvr93's answer but I did not add anything to the environment variables.

Upvotes: 23

rvr93
rvr93

Reputation: 913

Create a directory in the same drive as your project and add PUB_CACHE environment variable. Run flutter pub get.

This worked for me.

Upvotes: 14

alilosoft
alilosoft

Reputation: 331

I had your same issue, Gradle couldn't sync the android module, I solved it by deleting the android/ directory from the Flutter project, then recreate it using the command flutter create --platforms android .

Notice the "." at the end of the command it's part of it, it means create the Android project in the current directory.

Upvotes: 3

Related Questions