অমীমাংসিত রেফারেন্স: কোটলিনেক্স


108

আমি অ্যান্ড্রয়েড স্টুডিওতে কোটলিন এবং কোটলিন অ্যান্ড্রয়েড এক্সটেনশানগুলি চেষ্টা করার চেষ্টা করছি। আমি উবুন্টু 14.04 এ অ্যান্ড্রয়েড স্টুডিও ভি 1.5.1 এবং ওএস এক্স এল ক্যাপিটেনে একই ফলাফল সহ অ্যান্ড্রয়েড স্টুডিও ভি 1.5.1 এ উভয়ই চেষ্টা করেছি।

আমি যা করছি তা এখানে:

  1. আমি কোটলিন প্লাগইন 1.0.0-বিটা -35950-IJ141-11 ইনস্টল করেছি
  2. একটি নতুন ফাঁকা Android প্রকল্প তৈরি করুন
  3. মেইনএ্যাকটিভিটি ফাইলটি কোটলিনে রূপান্তর করুন (সহায়তা-> সন্ধানের মাধ্যমে> ফাইলটি কোটলিনে রূপান্তর করুন)
  4. কোটলিনের জন্য প্রকল্পটি কনফিগার করুন

আমি তারপরে উত্পন্ন সামগ্রী_main.xML ফাইলটিতে যাই এবং "হ্যালো ওয়ার্ল্ড!" এর জন্য একটি আইডি (হ্যালো) যুক্ত করি! TextView।

<?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>  

তারপরে রূপান্তরিত মেইনএকটিভিটিতে আমি টেক্সটভিউ সেট করতে একটি লাইন যুক্ত করব। (নিচে দেখানো). অ্যান্ড্রয়েড স্টুডিও তখন এই লাইনটি সন্নিবেশ করানোর জন্য আমাকে (Alt-enter মাধ্যমে) অনুরোধ জানায় (নীচেও দেখানো হয়েছে)

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

সুতরাং এই সময়ে সবকিছু বলে মনে হয় জরিমানা

তবে তারপরে যখন আমি এটি সংকলন করার চেষ্টা করি তখন তা পাই

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

লক্ষ্য করুন যে, আমি না না Kotlin অ্যান্ড্রয়েড এক্সটেনশন প্লাগইন ইনস্টল করুন। কয়েক দিন আগে এটি এখন মূল প্লাগইনটিতে অন্তর্ভুক্ত হওয়ার কথা এবং এটি অপ্রচলিত হিসাবে চিহ্নিত হয়েছে। (আসলে আপনার যদি সর্বশেষতম প্লাগইন থাকে তবে এটি ইনস্টল করার চেষ্টা করা থাকলে নতুন কিছু ইনস্টল করা হয়নি)

কেউ কি দেখছে আমি ভুল করছি?

যথোপযুক্ত সৃষ্টিকর্তা

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

আমার সমাধানটি সম্পূর্ণ আলাদা ছিল, আমি গ্রেড.প্রোপার্টি ফাইল থেকে অফিসিয়াল হিসাবে কোটলিন ভাষার সমর্থন সরিয়ে দিয়েছিলাম এবং এটি আবার কাজ করে। আসলে, ফাইলটি দূষিত হয়ে গেছে এবং কিছু এলোমেলো স্ট্রিং রয়েছে, আমি এলোমেলো স্ট্রিংগুলিতে ফিরে গিয়ে এটি ঠিক করেছি fixed
ললিত ফৌজদার

উত্তর:


188

যোগ kotlin-android-extensionsআমাদের buildscript এর নির্ভরতা মধ্যে:

1. আপনার প্রকল্প-স্তরের build.gradle এ

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

এবং kotlin-android-extensionsপ্লাগইন প্রয়োগ করুন :

2. আপনার মডিউল-স্তরের বিল্ড.gradle এ

apply plugin: 'kotlin-android-extensions'

আসল উত্তর:

সম্ভবত এটি কোটলিন প্লাগইনে একটি বাগ। আমি তাদের ট্র্যাকারে একটি সমস্যা দায়ের করেছি ।


1
আমি এটিই করেছি তবে আমি এখনও সমস্যাটি 1.0.0-বিটা -3595 নিয়ে পেয়েছি :(
ই-কামি

আমার জন্য হয় না (1.0.0-বিটা -4589) - এখনও কোনও সমাধান? সবেমাত্র বাগ ট্র্যাকারে টিকিটে একটি মন্তব্য যুক্ত করা হয়েছে।
স্টিফেন ফানকে

11
আমি এই সমস্যাটি 1.0.0-বিটা -4589 এও পেয়েছি। apply plugin: 'kotlin-android-extensions'আপনাকে নিজের বিল্ড.gradle ফাইলটিতেও যুক্ত করতে হবে
কিও ক্রোফোভিচ

1
কোনও $ কোটলিন_ভার্সন ভেরিয়েবলের সাথে আরও ভাল প্রকাশ করা হয়েছে:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
করোলডেপকা

এছাড়াও খেয়াল করুন আপনি যদি এই অ্যানোয়ারটি পূর্ণ পূরণ করেন তবে অবৈধ ক্যাশে / পুনঃসূচনাটি সহায়তা করতে পারে
বেলু

38

আপনি যখন অ্যান্ড্রয়েড স্টুডিও ২.০ এবং কোটলিন ০.০.১-২ ব্যবহার করেন, আপনি একই ভুলটি প্রকাশ করবেন। আপনি আপনার প্রকল্পের বিল্ড.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"
}

সর্বাধিক গুরুত্বপূর্ণ, এমনকি কোটলিন প্লাগইনে কোটলিন অ্যান্ড্রয়েড এক্সটেনশান অন্তর্ভুক্ত করার পরেও আপনাকে নিজের মডিউলটির বুলিড অ্যাড্রডলে কোটলিন-অ্যান্ড্রয়েড-এক্সটেনশনগুলি এটির মতো কনফিগার করতে হবে:

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

অবশ্যই, আপনি আপনার প্রকল্পের বিল্ড.gradle এ কোটলিন প্লাগইনের ক্লাসপথটি কনফিগার করতে পারেন।


1
আমার ক্ষেত্রে (অ্যান্ড্রয়েড স্টুডিও ২.১.১, কোটলিন ১.০.২) "প্রজেক্টে কোটলিন কনফিগার করুন" অ্যাকশনটি মডিউলটির বিল্ড.gradle এর পরিবর্তে প্রজেক্ট বিল্ড.gradle এ কোটলিনকে কনফিগার করেছে এবং এটি সাহায্য করেছে।
ইভান কুয়েট

আপনার পরীক্ষা করুন ext.kotlin_versionএবং classpath...প্রকল্প গ্রেডে উপরে উল্লিখিত যুক্ত করুন । এবং apply...অ্যাপ্লিকেশন গ্রেডেল এ দুটি যোগ করুন ।
অ্যালস্টন

33

আমি এটি অফিসিয়াল ডকুমেন্টেশনে খুঁজে পাচ্ছি না , তবে আপনাকে অবশ্যই আপনার build.gradleফাইলে নিম্নলিখিতটি যুক্ত করে প্লাগইনটি প্রয়োগ করতে হবে :

apply plugin: 'kotlin-android-extensions'

হ্যাঁ, আমার মনে হয় যেহেতু kotlin-1.0.0-betaআপনাকে প্লাগইন প্রয়োগ করা দরকার, তবে আমি এর কোনও উত্স খুঁজে পাই না! ধন্যবাদ!
অরগমির

2
নোট: অফিসিয়াল ডকুমেন্টেশন আপডেট করা হয়েছে: kotlinlang.org/docs/tutorials/...
ম্যাক্সিম

1
গৃহীত উত্তরের উপরে একটি সম্পাদনার অনুরোধ করুন এবং এই তথ্য সংযোজন করুন! :)
রামন মোরেস

অফিসিয়াল ডকুমেন্টেশন এখন খালি কোড ব্লক দেখায় যেখানে হওয়া apply plugin: 'kotlin-android-extensions'উচিত the
ডিলসন বিক্রয় 15

10

কোটলিন-অ্যান্ড্রয়েড-এক্সটেনশান নির্ভরতা যুক্ত বিল্ডস্ক্রিপ্ট ব্লকটি স্পষ্টতই অ্যাপ-মডিউল বিল্ড.gradle এ থাকা দরকার, শীর্ষ-স্তরের একটিতে নয়।


1
আমি ভেবেছিলাম এটি এমন কিছু হবে; আমার বেশিরভাগ কর্মফল হ'ল একই সমস্যা নিয়ে গ্রেড প্রশ্নের উত্তর দেওয়া থেকে from
আয়নোক্লাস্ট ব্রিঘাম

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'দরকার তা
দেখায়

তবে কেন এটি ঠিক করুন?
মো হাজর

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 সংস্করণটি নির্বাচন করেছি এবং বিল্ড.gradle অ্যাপ্লিকেশন ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করেছি

apply plugin: 'kotlin-android-extensions'

এর পরে আমি বিল্ডটি সিঙ্ক করেছিলাম এবং এটি প্রত্যাশার সাথে কাজ করে।


0

আমি জানতে পেরেছিলাম যে একই সময়ে আমার সি ++ এবং কোটলিনের সমর্থন ছিল যা বিল্ডিংয়ের সমস্যা তৈরি করেছিল।

একটি নতুন প্রকল্প শুরু করার সময়, সি ++ সমর্থনটি চেক করা হয়নি এবং কোটলিন সমর্থন পরীক্ষা করা হয়েছে তা নিশ্চিত করুন। এটা আমার জন্য সমস্যা স্থির করে।


0

আমার ক্ষেত্রে, আমি কোডটি ভিটিতে উল্লেখ করে একটিতে রেখেছি companion object। কি বোকা..


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.