Android Studio 3.0 Canary 1应使用哪个Kotlin版本?

3

我有一个中等规模的Kotlin项目,使用anko和kotlin android扩展,特别是来自资源ID的合成属性。但是,升级到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插件。


尝试使用getApplicationContext()而不是this - Anchal Singh
MainActivity的类声明也被下划线标记了吗?如果是的话,首先修复这个错误,然后看看属性上的下划线是否消失。如果MainActivity的类声明有错误,那么插件可能无法识别它继承自Context,正如你所推测的那样。 - bartonstanley
2个回答

0

您可以从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'

}

到:

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'

}

然后,红色标识符将消失。

0

您需要至少使用 Kotlin 1.1.2-4 版本。因此请更改您的 ext.kotlin_version

ext.kotlin_version = '1.1.2-4'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接