4

I am testing out a basic Kotlin-based Android app based on the instructions in the "Kotlin for Android Developers" book. I am using Android Studio 2.1.1.

I have the following build.grade (Project: WeatherApp) setup:

allprojects {
    repositories {
        jcenter()
    }
}

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

I have the following build.grade (Module:App) setup:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

buildscript {
    ext.support_version = '23.1.1'
    ext.kotlin_version = '1.0.2'
    ext.anko_version = '0.8.2'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.qtimemedia.weatherapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'org.jetbrains.anko:anko-sdk23:0.8.3'
    compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
repositories {
    mavenCentral()
}

I have the following MainActivity.kt code:

package com.qtimemedia.weatherapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        message.text = "Hello Kotlin!"
    }
}

Here is my activity_main.xml code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.qtimemedia.weatherapp.MainActivity">

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</RelativeLayout>

Here is my strings.xml code:

<resources>
    <string name="app_name">WeatherApp</string>
    <string name="hello_world">"Hello World!"</string>
</resources>

I am trying to run my MainActivity using the available Nexus 6 API 23 emulator. I have the option "Tools >> Android >> Enable ADB Integration" checked as on (I tried this with it off as well). The emulator appears to be working but my app does not appear to be loading due to a failed build. When running the emulator I see the following messages in the "4: Run" window:

C:\Users\Owner\AppData\Local\Android\sdk\tools\emulator.exe -netdelay none -netspeed full -avd Nexus_6_API_23
Warning: requested ram_size 1536M too big, reduced to 1024M
emulator: WARNING: Crash service did not start
emulator: WARNING: VM heap size set below hardware specified minimum of 384MB
emulator: WARNING: Setting VM heap size to 384MB
Hax is enabled
Hax ram_size 0x40000000
HAX is working and emulator runs in fast virt mode.
console on port 5554, ADB on port 5555

I see the following in the Event Log window:

11:26:05 PM Gradle sync started
11:26:15 PM Gradle sync completed
11:26:16 PM Executing tasks: [:app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies]
11:26:34 PM Gradle build finished in 18s 266ms
11:35:55 PM Executing tasks: [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:assembleDebug]
11:39:04 PM Gradle build finished with 3 error(s) in 3m 8s 551ms

I see the following in the Gradle Console window:

e: C:\Users\Owner\AndroidStudioProjects\WeatherApp\app\src\main\java\com\qtimemedia\weatherapp\MainActivity.kt: (5, 8): Unresolved reference: kotlinx
e: C:\Users\Owner\AndroidStudioProjects\WeatherApp\app\src\main\java\com\qtimemedia\weatherapp\MainActivity.kt: (12, 9): Unresolved reference: message

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details

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

BUILD FAILED

Total time: 3 mins 5.237 secs

In the Messages section I see the following:

C:\Users\Owner\AndroidStudioProjects\WeatherApp\app\src\main\java\com\qtimemedia\weatherapp\MainActivity.kt
Error:(5, 8) Unresolved reference: kotlinx
Error:(12, 9) Unresolved reference: message
Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
Information:BUILD FAILED
Information:Total time: 3 mins 5.237 secs
Information:3 errors
Information:0 warnings
Information:See complete output in console

How can I get the app to compile properly?

MLev
  • 421
  • 1
  • 6
  • 16
  • Do you see any error message in logcat logs? – miensol May 21 '16 at 06:21
  • Hi miensol, I added a number of the debugging messages in the edited description above. The main issues appear to be: (1) Execution failed for task ':app:compileDebugKotlin', (2) unresolved reference: kotlinx e:, and (3) unresolved reference: message. – MLev May 22 '16 at 04:26
  • The paste log clearly shows that there's a compilation error, that's the first thing to resolve. Try [this](http://stackoverflow.com/questions/34169562/unresolved-reference-kotlinx) and let us know if it helped. – miensol May 22 '16 at 06:38
  • Can you paste your top level `build.gradle` file? The one where you have a `buildscript {}` block. – Marcin Koziński May 22 '16 at 18:53
  • 1
    @miensol, I updated the build.gradle files based on the link you provided and updated all of the outputs from the output of re-running the app. There still appears to be a compilation error unfortunately. Thanks for your help with this. – MLev May 24 '16 at 03:46

2 Answers2

10

See the following response: https://stackoverflow.com/a/36526153/256513

You need to move the kotlin buildscript section from your project build.gradle to your module build.gradle file.

hleb
  • 136
  • 2
  • 7
  • This worked perfectly, thanks! I will also edit the versions of the build files above as well for future reference. – MLev Jun 05 '16 at 23:53
-4

import the layout file from a R extension. like this

import kotlindemo.app.com.myapplication.R.layout.activity_main;
import kotlinx.android.synthetic.main.activity_main.*
Henrik Aasted Sørensen
  • 6,966
  • 11
  • 51
  • 60