Подтвердить что ты не робот

Использование Kotlin в библиотечном модуле без использования его в модуле приложения

Я пытаюсь использовать Kotlin в библиотечном модуле, не используя его в модуле приложения. Модуль приложения использует только Java и не использует классы Kotlin из библиотеки. Gradle не будет компилировать hoever:

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

Изменения, внесенные мной, включают Котлина:

{library root}/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()
}
}

{library root}/{library module}/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. Я надеялся на решение, в котором нужно было бы добавить только зависимость от библиотеки, чтобы все это работало.

4b9b3361

Ответ 1

Я могу сделать это без каких-либо проблем.

build.gradle(Project)

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"
}

Ответ 2

Вам просто нужно добавить в сборку модуля:

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
}

Ответ 3

Вы можете добавить секцию buildscript с плагинами kotlin только в своей библиотеке:

buildscript {
    ext.kotlin_version = '1.1.4-2'

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

apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"

И теперь вы можете включить библиотеку в приложение без изменения root build.gradle

compile project(path: ":library")