【问题标题】:can't call kotlin module from java module无法从 java 模块调用 kotlin 模块
【发布时间】:2016-04-08 17:50:30
【问题描述】:

我想在 java 中有一个 android 应用程序,但在 kotlin 中有一个库模块。但是,当我尝试在手机中运行该应用程序时,出现一个错误,提示它找不到我的 Kotlin 类。这是我的 kotlin 课程:

    package com.example.mylibrary

    import android.util.Log

    class A {
        fun helloWorld(){
            Log.d("Kotlin", "Hello World!")
        }
    }

我的 kotlin 模块的 gradle 文件:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 11
        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.2.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
buildscript {
    ext.kotlin_version = '0.6.+'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
repositories {
    mavenCentral()
}

这是我的主要活动:

package com.example.uisample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.mylibrary.A;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        A obj = new A();
        obj.helloWorld();

    }

}

请注意 android studio 如何导入 com.example.mylibrary.A 而不是 com.example.mylibrar.Akt 如参考所述。 Android studio 在编译前没有报错。

应用的 Gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.uisample"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile project(':mylibrary')
}

运行项目后,gradle抛出这个错误:“找不到符号类A”。我做错了什么?

【问题讨论】:

标签: android kotlin


【解决方案1】:

一些事情:

  1. 将 kotlin-android 插件应用到您的库模块 build.gradle (see the docs):

    apply plugin: 'kotlin-android'
    

    就目前而言,您甚至没有告诉 gradle 编译 Kotlin 文件。

  2. 您的 buildscript 块可能应该位于顶级 build.gradle 而不是模块 build.gradle。

  3. 考虑更新完整发布的 Kotlin 1.0.1-2 版本

【讨论】:

  • 对于其他有相同错误的人,请注意,如果您的库是纯 Java 库,那么他们必须改用 apply plugin: 'kotlin'
  • 如果您使用 Gradle Kotlin DSL,您必须将 kotlin("android") 添加到您的 plugins {}
【解决方案2】:

为此,您需要添加

buildscript {
ext.kotlin_version = '1.4.30' <-- This line
    repositories {
        google()
        jcenter()
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" <-- This line
    }
}

在 gradle.build(项目)中

然后添加

apply plugin: 'kotlin-android'

在 gradle.build(App) 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2019-07-17
    • 2018-06-30
    • 2019-06-03
    • 2010-12-29
    • 2021-02-09
    相关资源
    最近更新 更多