2016-04-08 109 views
2

我想在java中有一个android应用程序,但在kotlin中有一个库模块。但是,当我尝试在手机中运行应用程序时,出现错误,说它无法找到我的Kotlin课程。这是我的科特林类:不能从java模块调用kotlin模块

package com.example.mylibrary 

    import android.util.Log 

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

和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(); 

    } 

} 

注意如何机器人工作室进口com.example.mylibrary.A代替com.example.mylibrar.Akt作为参考文献说。编译之前,Android Studio报告没有错误。对于应用

摇篮文件:

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”。我究竟做错了什么?

回答

6

有几件事情:

  1. 应用科特林-Android插件到您的库模块的build.gradle(see the docs):

    apply plugin: 'kotlin-android' 
    

    目前的情况是,你甚至没有告诉gradle来编译Kotlin文件。

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

  3. 考虑更新科特林1.0.1-2

+0

感谢您的的完全释放版本!我知道我错过了一些东西。 – Sloy