web-dev-qa-db-ja.com

アプリモジュールで使用せずにライブラリモジュールでKotlinを使用する

アプリモジュールで使用せずにライブラリモジュールでKotlinを使用しようとしています。 appモジュールはJavaのみを使用し、ライブラリのKotlinクラスを使用しません。Gradleはコンパイルしません:

Error:(2, 1) A problem occurred evaluating project ':<Library>'.
> Plugin with id 'kotlin-Android' not found.

Kotlinを含めるために行った変更:

{ライブラリルート}/build.gradle

buildscript {
ext.kotlin_version = '1.1.3-2'

repositories {
    jcenter()
}
dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    ...
}

allprojects {
repositories {
    jcenter()
}
}

{ライブラリルート}/{ライブラリモジュール}/build.gradle

apply plugin: 'com.Android.library'
apply plugin: 'kotlin-Android'
...

dependencies{
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

アプリモジュールに同じものを追加すると、プロジェクトは問題なくコンパイルされますが、アプリにコードを変更せずにこのライブラリを複数のアプリで使用したいので、アプリモジュールに追加しないでください。

使用されているGradleバージョン:3.3 Android gradleプラグインバージョン:2.3.3

編集:@Jushuaの答えは機能しますが、プロジェクトルートbuild.gradleを更新する必要があります。すべてを機能させるには、ライブラリへの依存関係のみを追加する必要があるソリューションを望んでいました。

28
Nino van Hooff

私は問題なくそれをすることができます。

build.gradle(プロジェクト)

buildscript {
    ext.kotlin_version = "1.1.4"
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.Android.tools.build:gradle:2.3.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

build.gradle(アプリ)

apply plugin: "com.Android.application"

Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile("proguard-Android.txt"), "proguard-rules.pro"
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    androidTestCompile("com.Android.support.test.espresso:espresso-core:2.2.2", {
        exclude group: "com.Android.support", module: "support-annotations"
    })
    compile "com.Android.support:appcompat-v7:26.0.1"
    testCompile "junit:junit:4.12"
    compile project(path: ":library")
}

build.gradle(ライブラリ)

apply plugin: "com.Android.library"
apply plugin: "kotlin-Android"
apply plugin: "kotlin-Android-extensions"

Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 26
        versionCode 13
        versionName "1.1.4"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile("proguard-Android.txt"), "proguard-rules.pro"
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    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 "com.Android.support:appcompat-v7:26.0.1"
    testCompile "junit:junit:4.12"
}
7
Joshua

モジュールビルドに追加するだけです。

buildscript {
  // (Optional) ext.kotlin_version = '1.1.4-3'

  repositories {
    google()
    jcenter()
  }

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

apply plugin: 'com.Android.library'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'    

その特定のビルドでkotlin_version変数を宣言するか、プロジェクトルートビルドファイルで宣言することができます。kotlinバージョンは他のモジュールから更新できるためです。

buildscript {
  ext.kotlin_version = '1.1.4-3'

  repositories {
    google()
    jcenter()
  }

  dependencies {
    classpath 'com.Android.tools.build:gradle:3.0.0-beta3'
  }
}

allprojects {
  repositories {
    google()
    jcenter()
  }
}

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