अप्रतिबंधित संदर्भ: kotlinx


108

मैं एंड्रॉइड स्टूडियो में कोटलिन और कोटलिन एंड्रॉइड एक्सटेंशन की कोशिश करने की कोशिश कर रहा हूं। मैंने उबंटू 14.04 पर एंड्रॉइड स्टूडियो वी 1.5.1, और इसी परिणाम के साथ ओएस एक्स एल कैपिटान पर एंड्रॉइड स्टूडियो वी 1.5.1 में दोनों की कोशिश की है।

यहाँ मैं क्या कर रहा हूँ:

  1. मैं कोटलिन प्लगइन 1.0.0-beta-35950-IJ141-11 स्थापित करता हूं
  2. एक नया रिक्त Android प्रोजेक्ट बनाएं
  3. कोटलिन के लिए MainActivity फ़ाइल परिवर्तित करें (मदद के माध्यम से-> खोज-> फ़ाइल को कोटलिन में बदलें)
  4. Kotlin के लिए प्रोजेक्ट कॉन्फ़िगर करें

मैं तब उत्पन्न content_main.xml फ़ाइल में जाता हूं और "हैलो वर्ल्ड" के लिए एक आईडी (हैलो) जोड़ता हूं। व्याख्यान दर्शन।

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/hello"
        />
</RelativeLayout>  

तब परिवर्तित MainActivity में मैं TextView सेट करने के लिए एक पंक्ति जोड़ता हूं। (नीचे दिखाया गया है)। Android Studio तब मुझे यह लाइन डालने के लिए (ऑल्ट-एंटर के माध्यम से) संकेत देता है (नीचे दिखाया गया है)

import kotlinx.android.synthetic.main.content_main.*

तो इस बिंदु पर सब कुछ ठीक लगता है

लेकिन तब जब मैं इसे संकलित करने की कोशिश करता हूं मुझे मिलता है

Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello

ध्यान दें कि मैंने कोटलिन एंड्रॉइड एक्सटेंशन प्लगइन स्थापित नहीं किया था । कुछ दिनों पहले तक अब इसे मुख्य प्लग में शामिल किया जाना है और इसे अप्रचलित के रूप में चिह्नित किया गया है। (वास्तव में यदि आप इसे स्थापित करने की कोशिश करते हैं जब आपके पास नवीनतम प्लगइन होता है, तो कुछ भी नया स्थापित नहीं होता है)

कोई भी देखता है कि मैं क्या गलत कर रहा हूं?

मुख्य गतिविधि

import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.View
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.content_main.*


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar = findViewById(R.id.toolbar) as Toolbar
        setSupportActionBar(toolbar)
        print("setting text view value to hey")
        hello.text = "hey"

        val fab = findViewById(R.id.fab) as FloatingActionButton
        fab.setOnClickListener { view -> Snackbar.make(view, "Replace this with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show() }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        val id = item.itemId

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true
        }

        return super.onOptionsItemSelected(item)
    }
}

मेरा समाधान पूरी तरह से अलग था, मैंने कोटलीन भाषा समर्थन को gradle.properties फ़ाइल से आधिकारिक रूप से हटा दिया और इसने फिर से काम किया। वास्तव में, फ़ाइल दूषित हो गई और कुछ यादृच्छिक तार हैं, मैंने इसे यादृच्छिक तारों पर वापस जाकर तय किया।
ललित फौजदार

जवाबों:


188

kotlin-android-extensionsहमारी बिल्डस्क्रिप्ट की निर्भरता में जोड़ें :

1. अपने प्रोजेक्ट-लेवल build.gradle में

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

और kotlin-android-extensionsप्लगइन लागू करें :

2. अपने मॉड्यूल-स्तर build.gradle में

apply plugin: 'kotlin-android-extensions'

मूल उत्तर:

सबसे अधिक संभावना है कि यह कोटलिन प्लगइन में एक बग है। मैंने उनके ट्रैकर पर एक मुद्दा दायर किया है ।


1
मैंने यही किया है, लेकिन मुझे अभी भी इस मुद्दे पर 1.0.0-बीटा -3595 :(
ई-कामी

मेरे लिए या तो काम नहीं करता है (1.0.0-beta-4589) - कोई समाधान अभी तक? बस बग ट्रैकर में टिकट के लिए एक टिप्पणी जोड़ दी।
स्टेफेन फणके

11
मेरा भी यह मुद्दा 1.0.0-बीटा -4589 पर था। आपको apply plugin: 'kotlin-android-extensions'अपनी build.gradle फ़ाइल
Kio Krofovitch

1
$ Kotlin_version चर के साथ बेहतर रूप से व्यक्त:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

यह भी ध्यान दें कि यदि आप इस awer को पूरा करते हैं, तो अमान्य कैश / पुनरारंभ मदद कर सकता है
Beloo

38

जब आप एंड्रॉइड स्टूडियो 2.0 और कोटलिन 1.0.1-2 का उपयोग करते हैं, तो आप उसी गलत के साथ आएंगे। आप अपनी परियोजना के build.gradle में कोटलिन एंड्रॉइड एक्सटेंशन को कॉन्फ़िगर नहीं कर सकते हैं, आपको प्रत्येक मॉड्यूल के बिल्ड.gradle में इस तरह से कॉन्फ़िगर और कोटलिन एंड्रॉइड एक्सटेंशन को कॉन्फ़िगर करने की आवश्यकता है:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

buildscript {
    ext.kotlin_version = '1.0.1-2'
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc2"

    defaultConfig {
        applicationId "com.dazd.kotlindemo"
        minSdkVersion 14
        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.3.0'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

सबसे महत्वपूर्ण बात, यहां तक ​​कि कोटलिन प्लगइन के माध्यम से कोटलिन एंड्रॉइड एक्सटेंशन भी शामिल है, आपको इस तरह से अपने मॉड्यूल के bulid.gradle में कोटलिन-एंड्रॉइड-एक्सटेंशन को कॉन्फ़िगर करने की आवश्यकता है:

...
apply plugin: 'kotlin-android-extensions'
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

बेशक, आप अपनी परियोजना के build.gradle में कोटलिन प्लगइन के वर्गपथ को कॉन्फ़िगर कर सकते हैं।


1
मेरे मामले में (एंड्रॉइड स्टूडियो 2.1.1, कोटलिन 1.0.2) "प्रोजेक्ट में कॉन्फ्लिक्ट कोटलिन" एक्शन ने प्रोजेक्ट बिल्ड.ग्रेडल को मॉड्यूल के बिल्ड.ग्रेड के बजाय कॉन्फ़िगर किया है और इससे मदद मिली।
इवान कूइट

प्रोजेक्ट डिप्ले में ऊपर उल्लिखित अपनी जाँच करें ext.kotlin_versionऔर जोड़ें classpath...। और दोनों apply...को ऐप में जोड़ दें ।
एल्स्टन

33

मैं इसे आधिकारिक दस्तावेज में नहीं ढूँढ सकता , लेकिन आपको अपनी build.gradleफ़ाइल में निम्न जोड़कर प्लगइन को लागू करना होगा :

apply plugin: 'kotlin-android-extensions'

हां, मुझे लगता है कि जब से kotlin-1.0.0-betaआपको प्लगइन को लागू करने की आवश्यकता है, लेकिन मुझे उसके लिए एक स्रोत नहीं मिल सकता है! धन्यवाद!
Orgmir

2
नोट: आधिकारिक दस्तावेज अपडेट कर दिया गया है: kotlinlang.org/docs/tutorials/…
मैक्सिमे

1
स्वीकृत उत्तर पर एक संपादन का अनुरोध करें और इस जानकारी को संलग्न करें! :)
रेमन मोरास

आधिकारिक दस्तावेज अब एक खाली कोड ब्लॉक दिखाता है जहां apply plugin: 'kotlin-android-extensions'होना चाहिए।
डायल्सन सेल्स

10

कोटलिन-एंड्रॉइड-एक्सटेंशन निर्भरता वाले बिल्डडस्क्रिप्ट ब्लॉक को जाहिरा तौर पर ऐप-मॉड्यूल बिल्ड.ग्रेड में होना चाहिए, शीर्ष-स्तर एक में नहीं।


1
मैंने सोचा कि यह कुछ ऐसा होगा; मेरे अधिकांश कर्म एक समान मुद्दे के साथ एक साधारण प्रश्न का उत्तर देने से है।
आयनोकॉस्ट ब्रिघम

8

मैंने पाया कि मेरा काम क्यों नहीं हुआ। मेरे ब्लॉक गलत हो गए थे और buildscript{}प्लग को ब्लॉक करने से पहले जैसा कि मैंने इसे काम कर लिया था:

buildscript {
    ext.kotlin_version = '1.0.0-beta-3595'
    ext.anko_version = '0.8.1'

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

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.kotlin"
        minSdkVersion 15
        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.1.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.anko:anko-sdk15:$anko_version"
    compile "org.jetbrains.anko:anko-support-v4:$anko_version"
}

इसने मेरे लिए काम किया। क्या आपको पता होगा कि इसे क्यों तय किया गया?
जो

केवल एक ही उत्तर दिखा रहा है कि कहाँ apply plugin: 'kotlin-android-extensions'जोड़े जाने की आवश्यकता है ... +1
ज़ेलफिर कलस्टहल

लेकिन इसे ठीक क्यों करें?
मो हज़्र

5

जोड़ने apply plugin: 'kotlin-android-extensions'में app/buildgradle

यदि आपने इसे पहले ही जोड़ लिया है, तो इसे हटाने का प्रयास करें और सिंक सिंक करें, जब सिंक पूरा हो जाता है, तो इसे वापस जोड़ें और फिर से सिंक करें। यह काम मेरे लिए।



4

मेरे लिए समस्या वह क्रम थी जिसमें मैंने प्लगइन्स को लागू किया था।

कोटलिन-एंड्रॉइड-एक्सटेंशन प्लगइन से पहले आपको कोटलिन-एंड्रॉइड प्लगइन लागू करना होगा

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

1

ऊपर वर्णित सुधारों को लागू करने के बाद, मुझे इसे काम करने के लिए एंड्रॉइड स्टूडियो को पुनरारंभ करना पड़ा।


0

इस तरह मेरे लिए काम किया। जब मैंने पहली बार कोटलिन को प्रोजेक्ट में कॉन्फ़िगर किया, तो मैंने 1.1.2-4 के बजाय 1.1.2-3 संस्करण का चयन किया और बिल्ड.ग्रेड एप्लिकेशन फ़ाइल में निम्न पंक्ति जोड़ी

apply plugin: 'kotlin-android-extensions'

उसके बाद मैंने बिल्ड को सिंक किया और यह उम्मीद के मुताबिक काम किया।


0

मुझे पता चला कि मेरे पास सी ++ और कोटलिन के लिए एक ही समय में समर्थन था जो निर्माण समस्याओं का कारण बन रहा था।

एक नई परियोजना शुरू करते समय, सुनिश्चित करें कि C ++ समर्थन अनियंत्रित है, और Kotlin समर्थन की जाँच की जाती है। मेरे लिए यह समस्या तय हो गई।


0

मेरे मामले में, मैंने एक में दृश्य का संदर्भ देते हुए कोड डाल दिया था companion object। कैसे मूर्ख..


0

निर्भरता को जोड़ने के लिए प्रयास करें अगले ब्लॉक:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.