কীভাবে বর্ধনীয় টীকাকরণ প্রক্রিয়াজাতকরণের অনুরোধ করা সতর্কতা থেকে মুক্তি পাবেন?


150

আমি স্রেফ অ্যান্ড্রয়েড বিকাশ এবং রুম লাইব্রেরি ব্যবহার করার চেষ্টা শুরু করেছি। গতকাল থেকে আমি এই সতর্কতা বার্তার মুখোমুখি হয়েছি

ডাব্লু: [ক্যাপ্ট] বর্ধিত এনোটেশন প্রক্রিয়াজাতকরণের জন্য অনুরোধ করা হয়েছে, তবে সমর্থনটি অক্ষম করা হয়েছে কারণ নিম্নলিখিত প্রসেসরগুলি ইনক্রিমেন্টাল নয়: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL)।

আমি গবেষণা এবং সমাধান করার চেষ্টা করেছি কিন্তু এই ত্রুটিটি এড়াতে অক্ষম হ'ল আমার গ্রেলে.বিল্ড ফাইল। আমি কী ভুল করছি দয়া করে পরামর্শ / পরামর্শ দিন।

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "ps.room.bookkeeper"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
            }
        }    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // life cycle dependencies
    def lifecycle_version = "2.0.0"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    kapt "android.arch.lifecycle:compiler:$lifecycle_version"

    //Room dependencies
    //def room_version = "2.1.0"
    implementation 'android.arch.persistence.room:runtime:2.1.0'
    kapt 'android.arch.persistence.room:compiler:2.1.0'
    //annotationProcessor 'android.arch.persistence.room:compiler:2.1.0'

//    implementation "android.arch.lifecycle:extensions:$room_version"
//    kapt "android.arch.persistence.room:compiler:$room_version"
//    androidTestImplementation "android.arch.persistence.room:testing:$room_version"

    //implementation 'androidx.room:room-runtime:2.1.0'
    //annotationProcessor 'androidx.room:room-compiler:2.1.0'
}

আপনার এ্যানোটেশন প্রসেসর মন্তব্য করা হয় কেন? আপনি কি তাদেরকে অসুবিধা দেওয়ার এবং তারপরে প্রকল্প তৈরির চেষ্টা করেছিলেন? (ঘর এবং আজীবন উভয়ের জন্য)
ফেরহাট এরগান

1
android.enableSeparateAnnotationProcessing যোগ করার জন্য চেষ্টা = আপনার gradle.properities সত্য reddit.com/r/androiddev/comments/ai92pt/... এই পাওয়া, এটি আপনার সমস্যা এর সাথে সম্পর্কিত করা যেতে পারে
Ferhat Ergun

7
আপনি আপাতত আপনার প্রকল্প বিল্ড.gradle ফাইলের 1.3.41 সংস্করণে কোটলিন-গ্রেডেল-প্লাগইন ডাউনগ্রেড করতে পারেন। আমি মনে করি এটি ক্যাপ্ট সম্পর্কিত একটি বাগ। আরো তথ্য: youtrack.jetbrains.com/issue/KT-33515
Necrontyr

4
আপনি যেমন ওয়ার্কআরন্ড kapt.incremental.apt=falseহিসাবে ইস্যুতে বর্ণিত হয়েছে তেমন একটি গ্রেড.প্রোপার্টি ফাইলও libs / <আপনার মডিউল নাম> এ তৈরি করতে পারেন । এটা আমার জন্য কাজ করেছে।
Necrontyr

2
@ নেক্রন্টায়ার, আপনার পরামর্শটি সত্যই কার্যকর করেছে। অনেক অনেক ধন্যবাদ
শেক্স

উত্তর:


80

@Necrontyr উল্লিখিত হিসাবে 1.3.50 এর কোটলিন-গ্রেডেল-প্লাগইন সংস্করণে একটি বাগ রয়েছে। কেবল বিল্ড.gradle (প্রজেক্ট) এ কোটলিন_আরোজনকে 1.3.41 এ নামিয়ে দিন।


71
@ নেক্রনটিয়ার দ্বারা উল্লিখিত বাগ সতর্কতার সাথে সম্পর্কিত নয়। সতর্কবার্তাটি আসলে উদ্দেশ্যযুক্ত এবং 1.3.41 এ নেমে যাওয়া কেবল সতর্কতাটি আড়াল করে তবে আরও খারাপ না হলে সমস্যাটি একই থাকে। লোকেরা ভাবতে পারে যেহেতু তারা ইনক্রিমেন্টাল এনোটেশন প্রক্রিয়াকরণ চালু করেছে এটি জিনিসগুলিকে আরও দ্রুত করে তুলবে। তবে সত্যটি হ'ল এন্টোটেশন প্রসেসরের কোনওটি যদি বর্ধিত না হয় তবে তাদের কোনওটিই বর্ধিতভাবে প্রক্রিয়াভুক্ত হবে না। এটি একটি বন্ধুত্বপূর্ণ অনুস্মারক যা দোষী কি লাইব্রেরিটি নির্দেশ করবে।
অ্যান্টিমনিট

15
পুরানো গ্রন্থাগার সংস্করণ ব্যবহার করা কোনও সমাধান নয়।
অ্যান্ড্রু কোস্টার

5
কোটলিনের ক্ষেত্রেও কি এখনও এই অবস্থা আছে 1.3.70?
ইগোরগানাপলস্কি

2
আমি কোটলিন 1.3.72 ব্যবহার করছি এবং এখনও এই সমস্যার মুখোমুখি?
আনবুসেলভান রকি

4
আমি এই সমস্যার সমাধান করছি 1.3.72 কোনও সমাধান লোক?
হাইশুটোষসিংহ

174

আপনার এই গ্রেডটি কেবল গ্রেড.প্রোটারটি যুক্ত করুন:

kapt.incremental.apt=true

11
এটি একটি আরও ভাল বিকল্প যা গৃহীত উত্তর। যাঁদের আরও বিশদ বোঝার এবং into োকা
অভিমন্যু

4
আমার জন্যও দুর্বল।
স্টিভেন স্মিথ

কেউ কি এখানে কারণ হওয়ার কারণ?
ওমর

আমি সম্প্রতি আমার অ্যান্ড্রয়েড (কোটলিন) প্রকল্পে ডেটা বাঁধাই সক্ষম করেছি এবং এই সতর্কতা পেতে শুরু করেছি। উপরে বর্ণিত সম্পত্তি যুক্ত করে আমার পক্ষে কাজ করেছে। এছাড়াও সবকিছুর সর্বশেষ সংস্করণ ব্যবহার করে, সব নির্ভরতা, কম্পাইলার, বিল্ড সরঞ্জাম, SDK আছে, ইত্যাদি যেমন
নাম Gail

4
এই কাজটি করা, আমার পক্ষে কাজ করে নি। রুম লাইব্রেরির ডকুমেন্টেশনে বর্ণিত হিসাবে আমার বিল্ড.gradle ফাইলটিও আমাকে সম্পাদনা করতে হয়েছিল ।
নেলসন ফেরাগুট

121

আসল সমস্যাটি হ'ল ইনক্রিমেন্টাল প্রসেসিং জিনিসগুলিকে দ্রুত করে তোলে, তবে টীকা প্রসেসরের কোনওটি যদি বর্ধিত হয় না, তবে তাদের কোনওটিই সেই উপায়ে প্রক্রিয়াকৃত হবে না।

ইনক্রিমেন্টাল প্রসেসিংয়ের উদ্দেশ্য কী?

সংস্করণ ১.৩.৩০+ থেকে , ইনক্রিমেন্টাল প্রসেসিং মডিউলগুলিকে পুনরায় পুরোপুরি প্রক্রিয়া না করার মঞ্জুরি দেয় প্রতিবার পরিবর্তন ঘটে, বিল্ড প্রক্রিয়াটিকে আরও ভাল পারফরম্যান্স দেয়:

এই রিলিজের ফোকাসের প্রধান ক্ষেত্রগুলি কোটলিন / নেটিভ, কেএপটি পারফরম্যান্সের পাশাপাশি ইন্টেলিজ আইডিইএর উন্নতি হয়েছে।

কোটলিন ডকুমেন্টেশন থেকে :

এনটেশন প্রসেসর (দেখুন জেএসআর 269 দেখুন) কোটলিনে কেপ্ট সংকলক প্লাগইন সহ সমর্থিত। সংক্ষেপে, আপনি আপনার কোটলিন প্রকল্পগুলিতে ড্যাজার বা ডেটা বন্ডিংয়ের মতো লাইব্রেরি ব্যবহার করতে পারেন।

রুম বর্ধিত প্রক্রিয়াজাতকরণ কীভাবে ঠিক করবেন?

এবং রুম ইনক্রিমেন্টাল এনোটেশন প্রসেসরটি ডিফল্টরূপে অক্ষম থাকে । এটি একটি পরিচিত সমস্যা এবং এটি এখানে বর্ণিত । তারা এটি ২.২.০ সংস্করণে ঠিক করার ইচ্ছা করে। আপনি কেবল আপডেটের জন্য অপেক্ষা করতে পারেন বা আপনি সেটিংস দ্বারা সতর্কতা থেকে মুক্তি পেতে সক্ষম করতে পারেন:

মধ্যে gradle.properties ফাইল:

kapt.incremental.apt=true

(stepsচ্ছিক পদক্ষেপ)

ডেটাবাইন্ডিংকে বাড়ানোর অনুমতি দেওয়ার জন্য:

android.databinding.incremental=true

দ্রুত নির্মাণের জন্য:

kapt.use.worker.api=true

যদি কেবল কয়েকটি পরিবর্তন করা হয় তবে বিল্ড সময়টি হ্রাস পায়:

kapt.include.compile.classpath=false

(বিষয়টিতে ফিরে)

আপনার প্রজেক্ট বিল্ড। এড্রেডে , প্রয়োজনীয় নির্ভরতা যুক্ত করুন (গ্রোভি):

dependencies {
    ...
    implementation "androidx.room:room-runtime:2.2.0-rc01"
    annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}

এবং

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.incremental":"true"]
            }
        }
    }
}

কোটলিন ডিএসএল সংস্করণ:

dependencies {
    ...
    implementation("androidx.room:room-runtime:2.2.0-rc01")
    kapt("androidx.room:room-compiler:2.2.0-rc01")
}

এবং

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    } 
}

সম্পাদনা:

অক্টোবর 9, 2019

androidx.room:room-* रात্ট ২.০ প্রকাশিত হয়েছে

গ্রেডেল ইনক্রিমেন্টাল এনটেশন প্রসেসর: কক্ষটি এখন একটি গ্রেডলকে পৃথক করে টীকা দেওয়ার প্রসেসর এবং প্রসেসরের অপশন রুমের মাধ্যমে বর্ধনযোগ্যতা সক্ষম করা যেতে পারে।


8
এটিকে কেপট.সিঙ্ক্রেমেন্টাল.অ্যাপ্ট হিসাবে স্বীকার করা উচিত = সত্য এমন কিছু যা আপনার প্রকল্পের রুম সহ অন্তর্ভুক্ত থাকবে। এক যে এমনকি Android এর জন্য দস্তাবেজে উল্লেখ নেই রুম
সেলা

1
আমি উত্তরটি androidx.lifecycle:lifecycle-extensions২.১.০ সংস্করণে ব্যবহার করার সাথে সাথে এবং ২.২.০-বিটা0১-এ স্যুইচ করার পরে সতর্কতাটি চলে গেল!
simne7

2
@ simne7 শেষ পর্যন্ত আমার সম্পাদনাটি দেখুন। সংস্করণ ২.২.০ প্রকাশিত হয়েছে =) আপনি বর্ধমান প্রক্রিয়াকরণ বৈশিষ্ট্যটি অ্যাক্সেস করতে এবং আপনার বিল্ডটি উত্সাহ দিতে ইতিমধ্যে এটি আপগ্রেড করতে পারেন।
ডিমাস মেন্ডেস

android.buildcache=trueএটি আরও দ্রুত করতে সক্ষম করবে?
ইগোরগানাপলস্কি

1
গুগল বিকাশকারী ওয়েবসাইট অনুসারে @ আইগরগানাপলস্কি Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache),। সুতরাং এটি এটি ডিফল্টরূপে সক্ষম হওয়ায় এটি সক্ষম করার কোনও অর্থ নেই।
ডিমাস মেন্ডেস

37

রুম ডকুমেন্টেশন থেকে :

"কক্ষে নিম্নলিখিত টিকা রচনাকারী প্রসেসরের বিকল্পগুলি রয়েছে ... রুম incসেন্টিমেন্টাল: গ্রেডেল ইনক্রিমেন্টাল এনোটেশন প্রোসেসর সক্ষম করে।"

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

রুম সংস্করণটি ২.২.x বা তার চেয়েও উচ্চতরতে আপডেট করার বিষয়ে নিশ্চিত হন।


3
সঠিক উত্তর লোকেরা, আপনি যদি ইনক্রিমেন্টাল প্রসেসিং রাখতে চান তবে। আপনার উপরের সেট করে স্কিমা লোকেশন বা প্রসারণপ্রজেক্ট আর্গুমেন্টের প্রয়োজন নেই। room.incremental পর্যাপ্ত।
বাজিকডুস্কো

1
মতে developer.android.com/jetpack/androidx/releases/room সেখানে 2.2.0-rc01 সংস্করণ এখনও।
কুলমাইন্ড


রুম সংস্করণটি
২.২.০ এ

25

এটি ঠিক করার জন্য আপনি যে জিনিসগুলি করতে পারেন তার একটি তালিকা এখানে রয়েছে এবং আপনি যখন নিজের বিল্ডিংয়ের সময় হয়ে থাকেন তখন তা উল্লেখযোগ্যভাবে হ্রাস করে।

আপনার build.gradle(মডিউল) ফাইলে:

android {
    ...
    defaultConfig {
        ...
        kapt {
            arguments {
                 arg("room.schemaLocation", "$projectDir/schemas".toString())
                 arg("room.incremental", "true")
                 arg("room.expandProjection", "true")
            }
        }
    }
    ...
}

আপনার gradle.propertiesফাইলে:

kapt.incremental.apt=true            // enabled by default on 1.3.50+
kapt.use.worker.api=true             // faster builds
kapt.include.compile.classpath=false // near instant builds when there are few changes

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
//add your specific library if it supports incremental kapt 

18

কাপ্ত বর্ধনীয় টীকা প্রক্রিয়াকরণ প্রয়োজনীয়তা সক্ষম করুন

কোটলিন 1.3.31 বা নতুন কোটলিন 1.3.30 প্রকাশিত ব্যবহার করুন

আপনার অ্যান্ড্রয়েড কোটলিন প্রকল্পে গ্রেড.প্রোপার্টি ফাইল

# Enable Kapt Incremental annotation processing requeste
kapt.incremental.apt=true

# Enable android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC)
android.databinding.incremental=true

# Decrease gradle builds time 
kapt.use.worker.api=true

# turn off AP discovery in compile path, and therefore turn on Compile Avoidance
kapt.include.compile.classpath=false

# Enable In Logcat to determine Kapt
kapt.verbose=true

কি হবে android.lifecycleProcessor.incremental=true?
ইগোরগানাপলস্কি

10

এখানে অন্যান্য অনেক উত্তর ত্রুটিটি আবৃত করে বা বর্ধিত প্রক্রিয়াজাতকরণকে অক্ষম করে পরিবর্তে এটি আপনার পছন্দ মতো কাজ করে।

আপনি gradle.propertiesফাইলটিতে আপনার নির্দিষ্ট লাইব্রেরির জন্য বর্ধিত প্রক্রিয়াকরণ সক্ষম করতে পারেন । কেবল এই সেটিংস যুক্ত করুন, বা যে কোনও একটি লাইব্রেরির সাথে মেলে যা ত্রুটি ছুঁড়ে ফেলে:

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true

2
আমি এ সম্পর্কে তেমন নিশ্চিত নই android.lifecycleProcessor.incremental=true, এটি কোথাও নথিভুক্ত বলে মনে হচ্ছে না
ড্যানিয়েল উইলসন

আমিও নিশ্চিত নই, তবে আমি এটি একটি কুঁচকে চেষ্টা করেছিলাম এবং সংকলকটি আমাকে বলতে থামিয়ে দিয়েছিল যে জীবনকালীন প্রসেসর লাইব্রেরিতে বর্ধিত প্রক্রিয়াজাতকরণ সক্ষম হয়নি।
জ্যাকস.এস

5

যদি এটি অভিযোগ করে যে "বর্ধিত টিকা রোধ প্রক্রিয়াজাতকরণের জন্য অনুরোধ করা হয়েছে তবে নীচের প্রসেসরগুলি ইনক্রিমেন্টাল না হওয়ায় সমর্থন অক্ষম করা হয়েছে", তবে গ্রেড.প্রপ্রেটিসগুলিতে "ক্যাপ্ট.ইনক্রিমেন্টাল.অ্যাপ্ট" কে "সত্য" (একটি ভিন্ন উত্তরে উল্লিখিত) "সেট করা বিপরীত - স্বজ্ঞাত। আপনার এটি "মিথ্যা" এ সেট করা দরকার। এটা আমার জন্য এটা।


1
এই আসলে কাজ করে। এটি মিথ্যা লোকের জন্য সেট করুন! ধন্যবাদ
সাকিবয়

আর কী হবে? এটি কি দ্রুত সঙ্কলন করবে বা কেবল সতর্কতাটি আড়াল করবে?
কুলমাইন্ড

@ কুলমাইন্ড আপনি ইনক্রিমেন্টাল এনোটেশন প্রক্রিয়াকরণটি অক্ষম করবেন, এমন কিছু যা আপনার যাই হোক না কেন ঘটছে না যদি আপনার নির্ভরতাগুলির কোনও এটি সমর্থন না করে। সুতরাং, সতর্কতাটি চলে যায় এবং বিল্ড প্রক্রিয়ায় আগের থেকে কোনও পরিবর্তন হয় না।
ডিসি ক্রিস্টোফার

2
আশ্চর্যজনকভাবে সেটিং kapt.incremental.apt=falseআমাকে সহায়তা করেছিল, আমি আর ত্রুটি পাচ্ছি না
রাখি ধাওয়ালে

2
আপনার আর কোনও ত্রুটি নেই তবে এখন আপনার কোনও ইনক্রিমেন্টাল প্রসেসিং নেই :)
JustAnotherCoder

2

আমি অ্যান্ড্রয়েডএক্স ব্যবহার করছি তবে এটি অনুমান করে যে এটি একই রকম android.arch.lifecycle। আমার জন্য এটি সহজভাবে এটি প্রতিস্থাপন করতে সহায়তা করেছে:

kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

... এর সাথে:

implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

সুতরাং আপনি যদি এটি ব্যবহার করেন তবে android.arch.lifecycleএটির পরিবর্তে একই প্রভাব থাকতে পারে:

kapt "android.arch.lifecycle:compiler:$lifecycle_version"

... এর সাথে:

implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

আপনি কেবল জাভা 8 ব্যবহার করছেন এবং আপনার ক্লাসগুলির OnLifecycleEventজন্য টীকাগুলিও মুছে ফেলা উচিত LifecycleObserverএবং DefaultLifecycleObserverপরিবর্তে সেই পর্যবেক্ষকদের প্রয়োগ করতে দেওয়া উচিত তবে এটি কেবল কাজ করে তা সজাগ রাখুন ।

এখানেbuild.gradle দেখানো হতাশাগুলিতেও এই পদ্ধতিতে পরিবর্তনের পরামর্শ দেওয়া হচ্ছে ।


কেন মুক্তি পাচ্ছেন kapt?
ইগোরগানাপলস্কি

@ ইগোরগানাপলস্কি যা আপনি জাভা ৮ ব্যবহার করছেন যদি অ্যান্ড্রয়েডএক্স লাইফসাইকেলের পরামর্শ দেওয়া হয় তবে আরও দেখুন এখানে: ডেভেলপার.অ্যান্ড্রয়েড
জেটপ্যাক


1
লিবিব প্রয়োজন হয় শুধুমাত্র যদি। এই পৃষ্ঠাটি অনুসারে জাভা 8 অ্যান্ড্রয়েডে আরও মূলধারার দিকে একবার টীকাগুলি common-java8
অবহেলা করা

মজাদার. kaptযদিও তারা বিশেষভাবে উল্লেখ করে না ...
ইগোরগানাপলস্কি

2

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

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }

0

সর্বোপরি উত্তর উপযোগী হতে পারে, কিন্তু কি আমাকে হ্রাস করা হয় সাহায্য করেছে kotlin_versionbuild.gradle(Project)থেকে1.3.41 এবং প্রকল্প নির্মাণের। এটি আপনাকে সত্তা মডেলটিতে কোনও সমস্যা আছে কিনা তা দেখার অনুমতি দেবে।

আমার ছিল, আমি মন্তব্য করতে ভুলে গেছি @PrimaryKey। আপনার কিছু আলাদা হতে পারে। কোটলিন 1.3.41এই সমস্যাগুলি দেখতে দেয়। এই সমস্যাগুলি ঠিক করুন এবং আপনার আগেরটিতে ফিরে kotlin_versionযান।


-1

এই যেমন "চরিত্রেও সমস্যার কারণেও হতে পারে আমি " এ databinding পাশ যখন সিস্টেমের ভাষা একটি অ-ইংরেজি ভাষা। এমন ক্ষেত্রে, কম্পিউটারে কম্পিউটারের ভাষা ইংরেজী ভাষায় ব্যবহার করা সমস্যার সমাধান করবে।

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