Какие версии kotlin мне следует использовать для Android Studio 3.0 Canary 1?

У меня есть проект Kotlin среднего размера, в котором используются расширения anko и kotlin для Android, в частности синтетические свойства из идентификаторов ресурсов. Все они перестали работать с моим обновлением до Android Studio 3.0 Canary 1. Хотя, похоже, они перестали работать и с AS 2.3.2.

Вот соответствующий сценарий сборки верхнего уровня:

buildscript {
    ext.kotlin_version = '1.1.2'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
...

И в моем скрипте сборки модуля приложения соответствующие части:

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

repositories {
  mavenCentral()
  jcenter()
}

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'

    dataBinding {
      enabled = true
    }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'org.jetbrains.anko:anko-sdk21:0.9.1'
    compile 'org.jetbrains.anko:anko-support-v4:0.9.1'
    compile 'org.jetbrains.anko:anko-appcompat-v7:0.9.1'

    kapt "com.android.databinding:compiler:2.5.0-alpha-preview-02"
}

kapt {
    generateStubs = true
}

Моя сборка из командной строки прошла успешно; фактически сборка в IDE завершается успешно. Но Kotlin теперь дает мне красные идентификаторы для всех моих синтетических свойств.

Одна из возможных подсказок заключается в том, что Kotlin, похоже, не распознает мою Activity (AppCompatActivity) как подкласс Context:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    MultiDex.install(this)

«This» подчеркнуто с ошибкой, что означает ожидание Context! и получил MainActivity; моя MainActivity определяется как:

class MainActivity : AppCompatActivity() {

Мой плагин Kotlin IDE - 1.1.2-4. Я не знаю, как вернуть его к более старой версии.

Я попытался переустановить Android Studio 2.3.2, но ни один из плагинов Kotlin там больше не работает.


person Stevey    schedule 20.05.2017    source источник
comment
Вместо использования this попробуйте использовать getApplicationContext().   -  person Anchal Singh    schedule 20.05.2017
comment
Также подчеркнуто объявление класса для MainActivity? Если да, то сначала исправьте эту ошибку и посмотрите, исчезнут ли подчеркивания свойств. Если объявление класса для MainActivity ошибочно, то, как вы предполагаете, плагин может не распознать, что он унаследован от Context.   -  person bartonstanley    schedule 21.06.2017


Ответы (2)


Вам нужно будет использовать хотя бы Kotlin 1.1.2-4. Таким образом измените свой ext.kotlin_version:

ext.kotlin_version = '1.1.2-4'
person nhaarman    schedule 20.05.2017

вы можете изменить файл build.gradle (Module: app) из

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
compile "org.jetbrains.anko:anko-commons:$anko_version"
compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar')
{
    transitive = true;
}
compile "com.squareup.retrofit2:retrofit:$retrofit_version"
compile "com.squareup.retrofit2:converter-gson:$retrofit_version"
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.3.1'

}

To:

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation "org.jetbrains.anko:anko-commons:$anko_version"
implementation('com.crashlytics.sdk.android:crashlytics:2.6.8@aar')
{
    transitive = true;
}
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation 'com.android.support:appcompat-v7:25.3.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:design:25.3.1'

}

Тогда красные идентификаторы исчезнут.

person Changwei    schedule 23.06.2017