1

TL;DR

How do I correctly use Kotlin plugin when creating a new flutter project in VSCode?

I'm trying to create a new flutter project in VSCode.

Flutter has been working for me since the start of the year but for some reason I’m getting this error in debug console when I try to run on my device.

Launching lib/main.dart on SM A520F in debug mode...
* Error running Gradle:
ProcessException: Process "/Users/jackstewart/Desktop/Work/All App Projects/Stiffness Method Solver/Flutter/newtest/android/gradlew" exited abnormally:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'android'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71.
     Required by:
         project :
      > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71.
         > Could not get resource 'https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.71/kotlin-gradle-plugin-1.2.71.pom'.
            > Could not GET 'https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.71/kotlin-gradle-plugin-1.2.71.pom'.
               > Connect to 10.1.1.150:19000 [/10.1.1.150] failed: Connection refused (Connection refused)
      > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71.
         > Could not get resource 'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.71/kotlin-gradle-plugin-1.2.71.pom'.
            > Could not GET 'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.71/kotlin-gradle-plugin-1.2.71.pom'.
               > Connect to 10.1.1.150:19000 [/10.1.1.150] failed: Connection refused (Connection refused)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
  Command: /Users/jackstewart/Desktop/Work/All App Projects/Stiffness Method Solver/Flutter/newtest/android/gradlew app:properties

Please review your Gradle project setup in the android/ folder.
Exited (sigterm)

My android/gradle.build is

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

My other flutter projects use java as their android code. This is the first time i'm using kotlin as it now seems to be the default. I'm not sure if i have the right kotlin plugin or how to install it i just assumed VSCode would do that automatically in setting up the New Project.

Steps to reproduce

1. Open new window in VSCode
2. View > command palate > Flutter: New Project
3. Type “newtest” and hit enter
4. Select a folder to create the project
5. Connect device
6. In vscode click debug > start debugging

My flutter sdk at the bottom bar on vscode is showing

Flutter: 1.9.1+hotfix.6

My gradlew file is

#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
    JAVACMD=`cygpath --unix "$JAVACMD"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

What I've tried

The console error suggests trying to run with: --stacktrace, --info , --debug, --scan. I figured out how to do that from this post

My stacktrace is long and similar. The info results were similar and the debug results were too long (if you really want I can include them) The scan results were short and odd. It seems its saying I can’t scan but then suggests to scan… |:

It seems my main issue is with kotlin in this line

Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71

But not much comes up when I google this

This SO post led me to this kotlin documentation that said to use a new version in gradle files like

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61" 

but i get the same error with the new version

Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61

My question is how do I correctly use Kotlin plugin when creating a new flutter project in VSCode?

EDIT:

In the end I gave up with kotlin and went back to java.

This is a shame because kotlin is the default in flutter which means it is preferred and I've heard there are some advantages to using it over java. This is why I didn't put this as an answer. Here are my steps to convert back to java

  1. Delete the android folder
  2. navigate to the parent directory of the project
  3. in terminal run

    flutter create --org com.example.newtest -a java newtest
    

    or more generally

    flutter create --org [package] -a java [project]
    
  4. In vscode click debug > start debugging

EDIT 2:

Since last edit I can't even get a hello world project to run.

EDIT 3:

I reinstalled Android studio twice (the first reinstall may have had problems maybe because I dragged my old Android SDK into Android studio folder as it wasn't included). After reinstalling again kotlin now works easily in a new project. The second time I uninstalled I used these commands to help https://stackoverflow.com/a/18458893/9713633

billy bud
  • 103
  • 2
  • 13

1 Answers1

0

Could not GET 'https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.71/kotlin-gradle-plugin-1.2.71.pom'. Connect to 10.1.1.150:19000 [/10.1.1.150] failed: Connection refused (Connection refused)

Based on this error, it seems like the hostname has resolved to the IP address 10.1.1.150. This IP address is reserved for local use and is not routable over the internet so it seems like something is wrong with the DNS resolution for this hostname. You should investigate why this is ocurring (possible a local hosts file, or a local DNS server?). If you can get it to resolve to the correct IP (the IP I currently get is 172.217.169.46) then it should solve your issue (or at least get you further).

Edit: Based on the port number in the error (which is not 443, as the URL would indicate), maybe it's trying to connect to a proxy on that IP rather than resolving the hostname to it? Do you have a proxy set up (that may no longer be working)?

Danny Tuppeny
  • 40,147
  • 24
  • 151
  • 275
  • Thanks Danny. I have a VPN but the same happened whether turning it off or on. See edit 3 in my question for how I resolved. – billy bud Dec 26 '19 at 21:30
  • It could be that your Proxy settings were cached somewhere (for ex. in env variables or build files). Glad you got it sorted anyway! – Danny Tuppeny Dec 27 '19 at 09:01