আমি কি এমন লাইব্রেরি ব্যবহার করতে পারি যা অ্যান্ড্রয়েড প্রকল্পগুলির সাথে অ্যান্ড্রয়েড সমর্থন ব্যবহার করে?


96

আমি জানি, অ্যান্ড্রয়েড এবং সমর্থন নির্ভরতা মাল্টিডেক্স ত্রুটির কারণ ঘটায় আমরা অ্যান্ড্রয়েড এবং অ্যান্ড্রয়েড সমর্থন একই সাথে ব্যবহার করতে পারি না। সুতরাং আমি সম্পূর্ণ অ্যান্ড্রয়েডে স্থানান্তরিত। তবে আমার নির্ভরতার একটি লাইব অ্যান্ড্রয়েড সমর্থন "লটি" ব্যবহার করে।

উপরের পরিস্থিতিতে আমরা কী করতে পারি? আমি কি আমার প্রকল্প থেকে 'লটি' অপসারণ করব?

নীচে আমার গ্রেড হয়

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }

উত্তর:


133

আপনি Jetifierআপনার প্রকল্পটিতে সক্ষম করতে পারেন , যা মূলত Android Support Libraryআপনার প্রকল্পের নির্ভরতাগুলিতে অন-এর সাথে বিনিময় করবে AndroidX। (যেমন আপনার লটি নির্ভরতাগুলি সাপোর্ট থেকে অ্যানড্রয়েডএক্সে পরিবর্তন করা হবে)

অ্যান্ড্রয়েড স্টুডিও ডকুমেন্টেশন ( https://developer.android.com/studio/preview/features/ ) থেকে:

অ্যান্ড্রয়েড গ্রেডল প্লাগইন নিম্নলিখিত গ্লোবাল ফ্ল্যাগ সরবরাহ করে যা আপনি আপনার গ্রেডল.প্রপার্টি ফাইলগুলিতে সেট করতে পারেন:

  • android.useAndroidX: সত্য হিসাবে সেট করা হলে, এই পতাকাটি ইঙ্গিত দেয় যে আপনি এখন থেকে AndroidX ব্যবহার শুরু করতে চান। পতাকাটি অনুপস্থিত থাকলে, অ্যান্ড্রয়েড স্টুডিও এমন আচরণ করে যে পতাকাটি মিথ্যাতে সেট করা আছে।
  • android.enableJetifier: সত্য হিসাবে সেট করা হলে, এই পতাকাটি ইঙ্গিত দেয় যে বিদ্যমান তৃতীয় পক্ষের লাইব্রেরিগুলিকে অ্যান্ড্রয়েডএক্সের জন্য লেখা হয়েছিল এমনভাবে স্বয়ংক্রিয়ভাবে রূপান্তর করতে আপনার কাছে সরঞ্জাম সমর্থন (অ্যান্ড্রয়েড গ্রেডল প্লাগইন থেকে) থাকতে চান। পতাকাটি অনুপস্থিত থাকলে, অ্যান্ড্রয়েড স্টুডিও এমন আচরণ করে যে পতাকাটি মিথ্যাতে সেট করা আছে।

জেটিফায়ারের পূর্ব শর্ত:

  • আপনাকে কমপক্ষে ব্যবহার করতে হবে Android Studio 3.2

জেটিফায়ার সক্ষম করতে, আপনার gradle.propertiesফাইলটিতে এই দুটি লাইন যুক্ত করুন:

android.useAndroidX=true
android.enableJetifier=true

অবশেষে, দয়া করে অ্যান্ড্রয়েডএক্সের রিলিজ নোটগুলি পরীক্ষা করুন, কারণ jetifierকিছু লাইব্রেরিতে এখনও কিছু সমস্যা রয়েছে (যেমন: ডাগার অ্যান্ড্রয়েড): https://developer.android.com/topic/libraries/support-library/androidx-rn


আমার প্রকল্পে একাধিক গ্রন্থাগার ব্যবহার করা হয়, তাদের মধ্যে কয়েকটি সাপোর্ট লাইব্রেরি ব্যবহার করে আবার কিছু অ্যান্ড্রয়েড ব্যবহার করে। আমি কীভাবে আমার প্রকল্পে উভয় গ্রন্থাগার ব্যবহার করব?
হিরেন দাবি

4
@ হিরেন ডাবী সমাধান প্রস্তাবটি আপনার পক্ষে কাজ না করলে আপনি কি আপনার সেটআপের জন্য একটি নতুন প্রশ্ন তৈরি করতে পারবেন? আপনার সেটআপ সম্পর্কে আরও বিশদ না জেনে উত্তর খুঁজে পাওয়া বরং কঠিন।
ক্রিস্টোফার

57

ম্যানুয়ালি যোগ করা android.useAndroidX=trueএবং android.enableJetifier=trueআমাকে কঠিন সময় দেওয়া। কারণ এটি কিছু ত্রুটি নিক্ষেপ বা Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

প্রকল্পে জেট-ফায়ার সক্ষম করতে অ্যান্ড্রয়েড স্টুডিওতে বিকল্প রয়েছে

আপনার প্রকল্প নির্বাচন করুন ---> রাইট ক্লিক করুন

অ্যাপ্লিকেশন ----> রিফ্যাক্টর ----> অ্যান্ড্রয়েডএক্সে স্থানান্তর করুন

নীচের চিত্রে দেখানো হয়েছে: -

এখানে চিত্র বর্ণনা লিখুন

Migrate to AndroidX এ ক্লিক করার পরে ।

এটি আপনার প্রকল্পের জন্য নিশ্চিতকরণ এবং ব্যাক আপ জিজ্ঞাসা করবে।

এখানে চিত্র বর্ণনা লিখুন

এবং শেষ পদক্ষেপ এটি আপনাকে রিফ্যাক্টর করতে বলবে।

এখানে চিত্র বর্ণনা লিখুন

Refactor করছেন পরে আপনার gradle.properties থাকে তাহলে চেক android.useAndroidX=trueএবং android.enableJetifier=true। যদি সেগুলি না হয় তবে আপনার গ্রেডল.প্রপার্টি ফাইলগুলিতে এই দুটি লাইন যুক্ত করুন:

android.useAndroidX=true
android.enableJetifier=true

দ্রষ্টব্য: - অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে আপগ্রেড করা, যদি আপনার অ্যান্ড্রয়েড স্টুডিও ৩.২ এবং এর পরে থাকে তবে এই বিকল্পটি কাজ করে। পরীক্ষা করে দেখুন এই


4
ভাল পরামর্শ, তবে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে আপগ্রেড করা লোকদের জন্য কেবলমাত্র একটি পাশের নোট, আপনার যদি অ্যান্ড্রয়েড স্টুডিও ৩.২ এবং এর বেশি থাকে তবে এই বিকল্পটি কাজ করে। এই বিকাশকারীকে
করুন

21

আপনার চিন্তা করার দরকার নেই

আপনার প্রজেটে কেবল জেটিফায়ারকে সক্ষম করুন ।

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


4
গ্রেড.প্রপ্রেটিসগুলি আমার ফাইলগুলিতে পাওয়া যায় নি, নিজেকে তৈরি করেছে
FindOutIslam এখন

আসলে, একটি ট্রানজিটিভ নির্ভরতা + গ্রেডল ক্যাশে কাজ নাও করতে পারে, এমনকি android.enableJetifier=trueযদি এটি ঘটে থাকে তবে আমি মনে করি ম্যানুয়ালি jetifier-standaloneতৃতীয় পক্ষের আয়ার ব্যবহার করে কাজ করতে পারে।
মোচাদ্বি

আমার অ্যান্ড্রয়েড স্টুডিও ৪.১ রয়েছে। আমি জেটিফায়ারকে সক্ষম করেছিলাম। আমার অ্যাপ চলছে না।
meekash55

@ meekash55 ত্রুটিটি কি?
খেমরাজ

@ খেমরাজ এমনকি জেটিফায়ারকে গ্রেড.প্রপ্রেটিসে যুক্ত করে, এটি প্রকল্পের যেখানেই ভি 4 সমর্থন লাইব্রেরি ব্যবহার করে সেখানে সংকলনের সময় ত্রুটিগুলি দেখাতে শুরু করে। সুতরাং কেবলমাত্র বিকল্পটি হ'ল অ্যানড্রইডএক্সে ম্যানুয়ালি সমস্ত কোড সংশোধন করে মাইগ্রেট করা। যা আমার পক্ষে কোনও বিকল্প ছিল না।
meekash55


1

এপিআই 29. + ব্যবহার AndroidX লাইব্রেরি। আপনি যদি এপিআই 29 ব্যবহার করেন তবে + আপনি এগুলি সরাতে পারবেন না। আপনি যদি অ্যান্ড্রয়েডএক্স মুছে ফেলতে চান তবে আপনাকে সম্পূর্ণ 29 অপসারণ করতে হবে + আপনার এসডিকে থেকে + এপিআই:

এসডিকে সেটিংস

এটি ভাল কাজ করবে।


1

আমি ম্যানিফেস্ট.এক্সএমএলে অ্যাপ্লিকেশন ট্যাগে কোডের এই দুটি লাইন ব্যবহার করেছি এবং এটি কার্যকর হয়েছে।

 tools:replace="android:appComponentFactory"    
 android:appComponentFactory="whateverString"

সূত্র: https://github.com/android/android-ktx/issues/576#issuecomment-437145192


1

আমি গ্রেড.প্রপার্টি ফাইলগুলিতে দুটি লাইনের নীচে যুক্ত করেছি

android.useAndroidX=true
android.enableJetifier=true

তাহলে আমি নিম্নলিখিত ত্রুটি পেয়েছি

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

আমি আমদানিগুলি সরিয়েছি এবং নীচে লাইন যুক্ত করেছি

import static android.app.AlertDialog.*;

এবং ক্লাসগুলি যা অ্যাপকম্প্যাকট্যাকটিভিটি থেকে প্রসারিত, নীচের লাইনটি যুক্ত করেছে। (এই ত্রুটিগুলির জন্য আপনাকে কেবল অ্যান্ড্রয়েড স্টুডিওতে Alt + প্রবেশ করাতে হবে যা আপনার জন্য সঠিক লাইব্রেরি আমদানি করবে this এর মতো আপনি সমস্ত ত্রুটিগুলি সমাধান করতে পারেন)

import androidx.appcompat.app.AppCompatActivity;

আপনার এক্সএমএল ফাইলটিতে যদি আপনি কোনও ব্যবহার করেন

<android.support.v7.widget.Toolbar 

এটি দিয়ে প্রতিস্থাপন androidx.appcompat.widget.Toolbar

তারপরে আপনার জাভা কোডে

import androidx.appcompat.widget.Toolbar;

4
তবে তারপরে আপনার কাছে বিশাল প্রকল্প রয়েছে যে কোনও একটি মাত্র একটি অ্যান্ড্রয়েডএক্স পরিবর্তনের জন্য সমস্ত খণ্ড এবং ক্রিয়াকলাপ পরিবর্তন করতে পারে না।
meekash55

0

যদি আপনার প্রকল্পটি অ্যান্ড্রয়েডএক্স না (মানে অ্যাপকম্প্যাট) না হয়ে থাকে এবং এই ত্রুটিটি পেয়ে থাকে তবে আমার ক্ষেত্রে প্লে-সার্ভিসেস-লোকেশন ("প্রয়োগকরণ 'com.google.android.gms: play-পরিষেবাদি-স্থান : ১.0.০.০ ''), আমি com.google.android.gms: play-পরিষেবাদি-অবস্থান: 16.0.0 'এ ডাউনগ্রেড করে সমস্যার সমাধান করেছি


0

আমার আগে এইরকম সমস্যা হয়েছিল, এটি গ্রেড.প্রোপার্টি ফাইলের অস্তিত্ব নেই, কেবল গ্রেড.প্রপ্রেটিস.টিএসটিএস্ট, তাই আমি আমার প্রকল্পের ফোল্ডারে গিয়ে কপি করে গ্রেড.প্রেপারটিস.টিএসটি ফাইলটি পেস্ট করেছি তবে ছাড়া। txt এক্সটেনশন তারপর এটি কাজ করে।


-1

এই লাইন মন্তব্য gradle.properties

android.useAndroidX = সত্য


ওপি অ্যান্ড্রয়েড সাপোর্টের সাথে অ্যান্ড্রয়েডএক্স ব্যবহার করা সম্ভব কিনা তা জিজ্ঞাসা করছে। আপনি অ্যান্ড্রয়েডএক্স
রেলডেক্স

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