সংকলন এবং রানটাইমের জন্য অ্যান্ড্রয়েড নির্ভরতার বিভিন্ন সংস্করণ রয়েছে


105

ক্যানারি 3 থেকে ক্যানারি 4 এ অ্যান্ড্রয়েড স্টুডিও আপডেট করার পরে , নিম্নলিখিত ত্রুটিটি নির্মাণের সময় নিক্ষেপ করা হবে।

অ্যান্ড্রয়েড নির্ভরতা 'com.android.support :support-support-v4' এর কম্পাইল (25.2.0) এবং রানটাইম (26.0.0-বিটা 2) ক্লাসপাথের জন্য আলাদা সংস্করণ রয়েছে। DependencyResolution এর মাধ্যমে আপনার ম্যানুয়ালি একই সংস্করণটি সেট করা উচিত।

আমি পুরো প্রকল্প জুড়ে একটি সম্পূর্ণ অনুসন্ধান চালিয়েছি এবং সংস্করণটি 25.1.0ব্যবহৃত হয়নি।

অ্যাপ্লিকেশান-build.gradle

android {
compileSdkVersion 26
buildToolsVersion '26.0.0'


defaultConfig {
    applicationId "com.xxx.xxxx"
    minSdkVersion 14
    targetSdkVersion
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

}


buildTypes {
    debug {
        debuggable true
    }
    release {
        debuggable false
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    lintOptions {
        abortOnError false
    }

}}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation project(':core')
implementation com.google.android.gms:play-services-gcm:9.0.0'

implementation('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
    transitive = true
}
implementation 'com.android.support:multidex:1.0.1'
implementation 'com.flurry.android:analytics:7.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
implementation 'com.jakewharton:butterknife:8.6.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
}

লাইব্রেরী-build.gradle:

apply plugin: 'com.android.library'
android {
compileSdkVersion 26
buildToolsVersion '26.0.0'

defaultConfig {
    minSdkVersion 14
    targetSdkVersion
    versionCode 1
    versionName "1.0"
}

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation files('libs/model.jar')
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:percent:26.0.0-beta2'
implementation 'com.android.support:appcompat-v7:26.0.0-beta2'
implementation 'com.android.support:support-core-utils:26.0.0-beta2'

implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.picasso:picasso:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0'
implementation 'uk.co.chrisjenx:calligraphy:2.2.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.android.support:design:26.0.0-beta2'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'

}

দ্রষ্টব্য: প্রকল্পটি ক্যানারি 3 তে জরিমানা তৈরি করা হয়েছিল


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

উত্তর:


136

আপনার বিল্ডস্ক্রিপ্টে এই কোডটি ব্যবহার করুন (build.gradle মূল):

subprojects {
  project.configurations.all {
     resolutionStrategy.eachDependency { details ->
        if (details.requested.group == 'com.android.support'
              && !details.requested.name.contains('multidex') ) {
           details.useVersion "version which should be used - in your case 26.0.0-beta2"
        }
     }
  }
}

8
এটি আমার জন্য কাজ করেছে, বিবরণ পরিবর্তন করতে ভুলবেন না a সংস্করণ নম্বরটিতে সংস্করণ ব্যবহার করুন, আপনি যদি কেবল অনুলিপি করে পেস্ট করেন তবে এটি ব্যর্থ হবে
জন স্টার দেওয়ার

2
সেরা, আরএন 0.55, গ্রেড 4.1 নিয়ে কাজ করে, গ্রেডেলের সরঞ্জামগুলি তৈরি করে 3.0.1
নেরিয়াস জোক

1
!details.requested.name.contains('multidex')সত্যই আমাকে অন্তর্ভুক্ত করতে নিশ্চিত করা ।
জোনা স্টারলিং

2
আমি এটি চেষ্টা করেছি, তবে এটি কেবল com.android.support বিরোধের জন্যই কাজ করেছে। এটি com.google.firefire এর জন্য কাজ করে নি: ফায়ারবেস-অ্যানালিটিকস দ্বন্দ্ব। 'ধারণাগুলি' অনেক প্যাকেজের সাথে মেলে বলে মনে হচ্ছে। আমি এই পোস্টে সরল সমাধানটি সমস্ত দ্বন্দ্বের পরিবর্তে ব্যবহার করেছি এবং এটি পুরোপুরি কার্যকর হয়েছিল।
জ্যাকব জোয়েল

2
@ ব্যবহারকারী3908686 সমস্যার সমাধান করেছেন তবে দয়া করে ব্যাখ্যা করুন, কেন আমাদের এটি যুক্ত করা দরকার ??
আরগাপিকে

81

আমার একই ত্রুটি ছিল, আমার সমস্যাটি কী সমাধান হয়েছিল। আমার লাইব্রেরিতে সংকলন বা প্রয়োগের পরিবর্তে আমি "এপিআই" ব্যবহার করি। সুতরাং শেষ পর্যন্ত আমার নির্ভরতা:

dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
api files('libs/model.jar')
testApi 'junit:junit:4.12'
api 'com.android.support:percent:26.0.0-beta2'
api 'com.android.support:appcompat-v7:26.0.0-beta2'
api 'com.android.support:support-core-utils:26.0.0-beta2'

api 'com.squareup.retrofit2:retrofit:2.0.2'
api 'com.squareup.picasso:picasso:2.4.0'
api 'com.squareup.retrofit2:converter-gson:2.0.2'
api 'com.squareup.okhttp3:logging-interceptor:3.2.0'
api 'uk.co.chrisjenx:calligraphy:2.2.0'
api 'com.google.code.gson:gson:2.2.4'
api 'com.android.support:design:26.0.0-beta2'
api 'com.github.PhilJay:MPAndroidChart:v3.0.1'
}

আপনি এই লিঙ্কে "এপিআই", "বাস্তবায়ন" সম্পর্কে আরও তথ্য পেতে পারেন https://stackoverflow.com/a/44493379/3479489


36
সমস্ত অ্যান্ড্রয়েড স্টুডিও বাস্তবায়ন ব্যবহার করার পরামর্শ দেয় .. এবং এই অফবিট সমাধান কাজ করে। অ্যান্ড্রয়েড স্টুডিওতে গুগল ইঞ্জিনিয়ারদের বিশ্ব থেকে শেখার জন্য একটি পাঠ প্রয়োজন। হতাশার হাতিয়ার
সিদ্ধার্থ

3
এটি সমস্যার সমাধান করতে পারে না, বার্তাটি বলে: "অ্যান্ড্রয়েড নির্ভরতা '...............' সংকলনের জন্য আলাদা সংস্করণ রয়েছে"
জর্জেসিস

আমার জন্য কাজ। ধন্যবাদ
ডুয়ান এনগুইন

@KeithLoughnane এই খারাপ অভ্যাস নয়, করার সঠিক উপায় হল এটা এবং পথ ডকুমেন্টেশন সুপারিশ
Yayo Arellano

1
@ ইয়াওআরেল্লানানো বাস্তবায়ন হ'ল এপিআই এর যথাযথ প্রয়োজনীয়তার যথাযথ ব্যবহারের সাথে সুপারিশ করা হয়। এটি দেয়ালে সমস্ত কিছু ফেলে দেয় এবং দেখুন কী স্টিক প্রোগ্রামিং। এগুলির কয়েকটিতে এপি প্রয়োজন হতে পারে তবে তাদের সকলেরই নয়। আপনি অনেক বেশি প্রকাশ করছেন।
কিথ লোগেনে

22

gradle -q dependenciesআপনার প্রকল্পের জন্য এখানে বর্ণিত সঠিক কমান্ডটি পরিচালনা করে কোন নির্ভরশীলতাটি ট্রানজিটিভ নির্ভরতা হিসাবে বিজোড় সংস্করণে টানছে তা দেখতে আপনি সক্ষম হবেন :

https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies

একবার এটি কী টানছে তা সন্ধান করার পরে, আপনি এই জাতীয় কিছু দিয়ে আপনার গ্রেড ফাইলের সেই নির্দিষ্ট নির্ভরতার একটি বাদ দিতে পারেন:

implementation("XXXXX") {
    exclude group: 'com.android.support', module: 'support-compat'
}

হাই, আমি গ্রেড নির্ভরতা কমান্ডটি চালিয়েছি এবং আমি এখানে স্ক্রিনশট url পোস্ট করছি, imgur.com/dL35BaN। আমি কখনও আমার প্রকল্পে ফায়ারবেস ব্যবহার করি না। জিএমসি-তে এই লাইনটি যুক্ত হয়েছে, যদিও এটি কার্যকর হয়নি
DroidLearner

@DroidLearner আমার কিছু অনুপস্থিত হতে পারে তবে আমি আপনার পোস্ট করা স্ক্রিনশটে com.android.support:support-compat এর কোনও রেফারেন্স দেখতে পাচ্ছি না। এছাড়াও সেই স্ক্রিন শটে একটি সতর্কতা রয়েছে যা একটি 'সংকলন' কনফিগারেশনকে বোঝায় যা আমি ওপিতে আপনার গ্রেড ফাইলটিতে উপস্থিত দেখছি না। এটি সম্ভবত: মূল সাবমডিউল থেকে আসছে। আপনি কি সেখান থেকে প্রাসঙ্গিক গ্রেডের তথ্য পোস্ট করতে পারেন?
jdonmoyer

হাই, আপনাকে নির্ভরতা গাছের সাথে পুরো গ্রেড ফাইল এখানে পোস্ট করা হচ্ছে .. অ্যাপ গ্রেড ফাইল -> gist.github.com/anonymous/93affc0d75eb96b59f9fde51332b9716 মূল গ্রেড ফাইল -> gist.github.com/anonymous/5c85031f26ff766109061ab1f00b833 ডিস্টেন্সি ট্রি -> । com / বেনামে / 71dd33b6fa4dc63dd357889e8aff01e আশা করি এটি সাহায্য করবে।
DroidLearner

1
দেখে মনে হচ্ছে লাইব্রেরির পুরানো সংস্করণটি ফায়ারবেস দ্বারা টানছে যা ফলস্বরূপ জিএমএসের একটি ট্রানসিটিভ নির্ভরতা। আপনি সম্ভবত এই কাজটি যোগ করতে পারেন: বাস্তবায়ন 'com.android.support:support-v4:26.0.0-beta2' অন্য যে কোনও নির্ভরতার আগে। সুস্পষ্ট হওয়ার পক্ষে বা রেজোলিউশনস্ট্রেজি ( ডকসস.আরডল.আর.এল. / বর্তমান / ডিএসএল/… ) ব্যবহারের পক্ষে দীর্ঘমেয়াদী ট্রানজিটিভ নির্ভরতা বন্ধ করে দেওয়া সম্ভবত আরও ভাল পদ্ধতির।
jdonmoyer

1
ধন্যবাদ। কোনওভাবে ট্রান্সজিটিভ নির্ভরতা ঠিক করতে সক্ষম হয়েছে। গ্রেডল বিল্ড সফল। রানটাইমের সময়ে এটি সমস্ত লাইব্রেরি ক্লাসে ত্রুটি দেখায়। ত্রুটি: প্যাকেজ retrofit2 ত্রুটি বিদ্যমান নেই: প্যাকেজ android.support.v7.app উপস্থিত নেই ত্রুটি: প্যাকেজ com.google.gson বিদ্যমান নেই। সংকলনের সময় এটি কোনও ত্রুটি দেখায় নি।
DroidLearner

16

অনেক সময় পরে এবং অ্যান্ড্রয়েড: অ্যাপ / বিল্ড.gradle সম্পর্কে আমার চেয়ে আরও অনেক কিছু জানেন এমন একজনের কাছ থেকে সহায়তা পাওয়ার পরে

android {
    compileSdkVersion 27

    // org.gradle.caching = true

    defaultConfig {
        applicationId "com.cryptoviewer"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 196
        versionName "16.83"
        // ndk {
        //     abiFilters "armeabi-v7a", "x86"
        // }
    }

এবং নির্ভরতা

dependencies {
    implementation project(':react-native-camera')
   //...
    implementation "com.android.support:appcompat-v7:26.1.0" // <= YOU CARE ABOUT THIS
    implementation "com.facebook.react:react-native:+"  // From node_modules
}

build.gradle এ

allprojects {
   //...
    configurations.all {
        resolutionStrategy.force "com.android.support:support-v4:26.1.0"
    }

গ্রেড.প্রোপার্টিগুলিতে

android.useDeprecatedNdk=true
android.enableAapt2=false
org.gradle.jvmargs=-Xmx4608M

4
resolutionStrategy.forceআমার জন্য কাজ করা একমাত্র জিনিস ছিল। ধন্যবাদ!
অরিওন এডওয়ার্ডস 21

7

আমার উত্তর ছিল আমার build.gradleফাইলে এটি যুক্ত করা:

configurations.all {
  resolutionStrategy.eachDependency { details ->
      if (details.requested.group == 'com.android.support'
              && !details.requested.name.contains('multidex') ) {
          details.useVersion "26.1.0"
      }
  }
}

আমার ক্ষেত্রে, রেজুলেশনের কৌশলটি একটি configurations.all { .. }ব্লকে বন্ধ করে দেওয়া সংবেদনশীল ছিল। আমি configurations.allব্লকটি সরাসরি আমার app/build.gradleফাইলে রেখেছি (যেমন configurations.allঅন্য কোনও কিছুতে নেস্ট করা হয়নি)


5

এটি আমার পক্ষে কাজ করেছে:

app/build.gradleনির্ভরতা বিভাগে অনুসরণ করুন লাইন :

implementation "com.android.support:appcompat-v7:27.1.0"

বা :27.1.1আমার ক্ষেত্রে


4

আপনার প্রকল্প স্তরের build.gradle ফাইলটিতে এই কোডটি যুক্ত করুন।

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "version which should be used - in your case 28.0.0-beta2"
            }
        }
    }
}

কোডের উদাহরণ :

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath 'io.fabric.tools:gradle:1.31.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "28.0.0"
            }
        }
    }
}

3

2019 এ যে কেউ যদি এই নির্ভরতার বিষয়টি পেয়ে থাকে তবে অ্যান্ড্রয়েড স্টুডিওটি 3.4 বা তার পরে আপডেট করুন


3

আমি এটিকে android / build.gradle ফাইল: ক্লাসপথ 'com.android.tools.build:gradle:3.3.1' এ আমার গ্রেড নির্ভরতা আপগ্রেড করে সমাধান করেছি (আমি আগে সংস্করণে ছিল 2.২।


2

এডি উপরে বর্ণিত যা অনুসরণ করে তা সমাধান করেছি,

 resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "26.1.0"
            }
        }

2

আমার বিরোধী নির্ভরতা বাস্তবায়ন থেকে এপিআই এ পরিবর্তন করানো কৌশলটি করে does পার্থক্যটি ব্যাখ্যা করে মাইন্ডার্কদের দ্বারা এখানে একটি ভাল নিবন্ধ's

https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa

সম্পাদনা:

এখানে আমার নির্ভরতার রেজোলিউশনগুলিও রয়েছে

 subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.android.support'
                        && !details.requested.name.contains('multidex')) {
                    details.useVersion "28.0.0"
                }
                if (details.requested.group == 'com.google.android.gms'
                        && details.requested.name.contains('play-services-base')) {
                    details.useVersion "15.0.1"
                }
                if (details.requested.group == 'com.google.android.gms'
                        && details.requested.name.contains('play-services-tasks')) {
                    details.useVersion "15.0.1"
                }
            }
        }
    }

2

আপনার লাইব্রেরি প্রকল্পে তুলুন compileSdkVersion এবং targetSdkVersion একই স্তর সংস্করণ হিসাবে আপনার অ্যাপ্লিকেশন

android {
    compileSdkVersion 28

    defaultConfig {
        consumerProguardFiles 'proguard-rules.txt'
        minSdkVersion 14
        targetSdkVersion 28
    }
}

সমস্ত স্তরের উপর নির্ভরশীলতা একই স্তরের করুন



1

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

রেজোলিউশনস্ট্রেজি.ফोर्স

রেজোলিউশনস্ট্রেজি.ফোর্স "com.android.support:support-v4:26.0.0-beta2"


0

আমার ক্ষেত্রে, আমি দুটি পৃথক মডিউলটিতে নীচের প্রয়োগের দুটি ভিন্ন সংস্করণ পেয়েছি, সুতরাং আমি উভয় বাস্তবায়নকে সংস্করণে পরিবর্তিত করেছি: 6.0.2 এবং এটি কার্যকর হয়েছে। আপনার নির্ভরতা রেজোলিউশনের লেখার জন্য গৃহীত উত্তরটিও দেখতে হতে পারে।

অ্যাপ্লিকেশন মডিউল

implementation 'com.karumi:dexter:5.0.0'

কমন্স মডিউল

implementation 'com.karumi:dexter:6.0.2'


-7

একটি হার্ড কোডিং সংস্করণ + উদাহরণে প্রতিস্থাপন করুন:

implementation 'com.google.android.gms:play-services-base:+'
implementation 'com.google.android.gms:play-services-maps:+'

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

1
একটি ভাল অনুশীলন না। @ জোনা স্টারলিং যা বলেছিল তা ছাড়াও, অফলাইন বৈশিষ্ট্যটি বন্ধ করা থাকলে গ্রেডল বিল্ড পারফরম্যান্সেও এটি প্রভাব ফেলবে।
অঙ্কিত বাত্রা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.