ডেক্স কার্যকর করতে অক্ষম: পদ্ধতি আইডি [0, 0xffff] এ নেই: 65536


344

আমি এর আগেও ডেক্স এর্রগুলির বিভিন্ন সংস্করণ দেখেছি, তবে এটি নতুন। পরিষ্কার / পুনঃসূচনা ইত্যাদি সাহায্য করবে না। গ্রন্থাগার প্রকল্পগুলি অক্ষত বলে মনে হচ্ছে এবং নির্ভরতা সঠিকভাবে লিঙ্কযুক্ত বলে মনে হচ্ছে।

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

অথবা

Cannot merge new index 65950 into a non-jumbo instruction

অথবা

java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

tl; dr : গুগলের সরকারী সমাধান অবশেষে এখানে!

http://developer.android.com/tools/building/multidex.html

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

dexOptions {
        javaMaxHeapSize "4g"
}

একটি জাম্বো মোডও রয়েছে যা এটি কম নির্ভরযোগ্য উপায়ে সমাধান করতে পারে:

dexOptions {
        jumboMode true
}

আপডেট: যদি আপনার অ্যাপটি চর্বিযুক্ত হয় এবং আপনার মূল অ্যাপ্লিকেশনটির ভিতরে আপনার অনেকগুলি পদ্ধতি রয়েছে তবে আপনাকে নিজের অ্যাপ্লিকেশনটিকে নতুন করে org করতে হবে

http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html


1
আপনি কি এপিআই ব্যবহার করেন যা আপনার কারিগর ডিভাইসে পাওয়া যায় না?
rekire

এটি সেখানে রয়েছে, কারণ অন্য প্রকল্পটি একই এপিআই সংস্করণকে লক্ষ্য করে জরিমানা করে।
এডিসন

সুতরাং আপনি কিছু পয়েন্ট এপিআই ব্যবহার করেন যা উপলভ্য নয়? if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)আপনি কি এই জাতীয় লাইনের সাথে চেক করেন যে আপনি যদি এই ফাংশনটি উপলব্ধ না হন তবে এটি কল করবেন না?
rekire

হ্যাঁ, আমি করি. প্রকল্পটি আগে জরিমানা নির্মিত হয়েছিল। এছাড়াও, আমি লাইনটি মিস করলেও এটি রানটাইম ত্রুটি হওয়া উচিত।
এডিসন

এটি সম্ভবত নির্ভরতাগুলির মধ্যে একটি গণ্ডগোল হয়। (এই মুহুর্তে ম্যাভেন + প্রজেক্ট লিব এর মিশ্রণ করছেন)
এডিসন

উত্তর:


379

আপডেট 3 (11/3/2014)
গুগল অবশেষে সরকারী বিবরণ প্রকাশ করেছে ।


আপডেট 2 (
10/31/2014 ) অ্যান্ড্রয়েডের গ্রেডল প্লাগইন v0.14.0 মাল্টি- ডেক্সের জন্য সমর্থন যোগ করে । সক্ষম করতে, আপনাকে কেবল বিল্ড . gradle এ এটি ঘোষণা করতে হবে :

android {
   defaultConfig {
      ...
      multiDexEnabled  true
   }
}

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

dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
} 

আপনার যত তাড়াতাড়ি সম্ভব ClassLoader প্যাচ কোড কল করতে হবে। MultiDexApplicationক্লাসের ডকুমেন্টেশনগুলি এটি করার জন্য তিনটি উপায়ের পরামর্শ দেয় ( তাদের মধ্যে একটি বেছে নিন যা আপনার পক্ষে সবচেয়ে সুবিধাজনক):

1 - MultiDexApplicationআপনার AndroidManLive.xML এ অ্যাপ্লিকেশন হিসাবে শ্রেণি ঘোষণা করুন :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

2 - আপনার Applicationক্লাসটি মাল্টিডেক্স প্রয়োগের ক্লাসটি বাড়িয়ে দিন :

public class MyApplication extends MultiDexApplication { .. }

3 - MultiDex#installআপনার Application#attachBaseContextপদ্ধতি থেকে কল করুন :

public class MyApplication {
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
        ....
    }
    ....
}

আপডেট 1 ( 10/17/2014 ):
প্রত্যাশিত হিসাবে, অ্যান্ড্রয়েড সমর্থন লাইব্রেরির 21 পুনর্বিবেচনায় মাল্টেডেক্স সমর্থন সরবরাহ করা হয়। আপনি / এসডিকে / এক্সট্রা / অ্যান্ড্রয়েড / সমর্থন / মাল্টিডেক্স / লাইব্রেরি / লিবস ফোল্ডারে অ্যান্ড্রয়েড-সাপোর্ট-মাল্টিডেক্স.জার খুঁজে পেতে পারেন।


মাল্টি-ডেক্স সমর্থন এই সমস্যার সমাধান করে। dx 1.8 ইতিমধ্যে বেশ কয়েকটি ডেক্স ফাইল তৈরি করার অনুমতি দেয়।
অ্যান্ড্রয়েড এল দেশীয়ভাবে মাল্টি-ডেক্সকে সমর্থন করবে এবং সমর্থন লাইব্রেরির পরবর্তী সংশোধনগুলি পুরানো রিলিজগুলি এপিআই 4 এ ফিরে আসবে।

আনোয়ার গুলুমের এই অ্যান্ড্রয়েড বিকাশকারী ব্যাকস্টেজ পডকাস্ট পর্বে এটি বলা হয়েছিল । আমি প্রাসঙ্গিক অংশটির একটি প্রতিলিপি (এবং সাধারণ মাল্টি-ডেক্স ব্যাখ্যা) পোস্ট করেছি ।


2
ব্লগ পোস্টটি সেভার! : ডি
নাদভফিমা

39
গ্রহন ব্যবহারকারীদের জন্য কিছু?
মুহাম্মদ বাবর

52
@ মুহম্মদবাবার, গ্রহন গ্রাহকদের জন্য অ্যান্ড্রয়েড স্টুডিও রয়েছে।
বিপুলকুমার

2
@ মোহাম্মদআলি অবশ্যই, আপনি যদি এটি করতে পারেন তবে এটি ব্যবহার এড়িয়ে চলুন। তবে আপনি যদি আপনার অ্যাপ্লিকেশনটিতে সত্যই অনেকগুলি পদ্ধতি ব্যবহার করে থাকেন এবং আপনি ইতিমধ্যে যা উল্লেখ করেছেন তার মতো সমস্ত কৌশল ব্যবহার করে দেখতে পারেন? বিল্ড টাইম সম্পর্কিত - এর সমাধান আছে, কমপক্ষে উন্নয়ন তৈরির জন্য - আমার উত্তরটি এখানে দেখুন: stackoverflow.com/a/30799491/1233652
অ্যালেক্স লিপভ

2
কিউটি ফর অ্যান্ড্রয়েডে, মাল্টিডেক্স সমর্থন সক্ষম করার পরেও ফেসবুক + টুইটারের এসডিকে একত্রে সংহত করার সময় আমার অ্যাপ্লিকেশনের জন্য রানটাইমের সময় আমার সমস্যা ছিল (বিশেষত এটির একটি ত্রুটি আমাকে দুঃস্বপ্ন দিয়েছে java.lang.ClassNotFoundException: Didn't find class "org.qtproject.qt5.android.QtActivityDelegate" on path: DexPathList[[],nativeLibraryDirectories=[/vendor/lib, /system/lib]]:)। দেখা গেল যে আমার ভুলটি হ'ল আমি 5.0 এর আগে অ্যান্ড্রয়েড সহায়তার জন্য অতিরিক্ত পদক্ষেপগুলি প্রয়োগ করছিলাম না। এই বলে, বিকল্প # 3 এটি সমাধান করেছে এবং আমার আর ClassNotFoundExceptionসমস্যা নেই। ধন্যবাদ, @ অ্যালেক্স লিপভ!
ডাকাতি

78

ইতিমধ্যে যেমনটি বলা হয়েছে, আপনার প্রকল্প এবং লিবিসে আপনার অনেকগুলি পদ্ধতি রয়েছে (65 কিলোকের বেশি)।

সমস্যাটি প্রতিরোধ করুন: প্লে পরিষেবাদি 6.5+ এবং সমর্থন-ভি 4 24.2+ এর সাথে পদ্ধতির সংখ্যা হ্রাস করুন

যেহেতু প্রায়শই গুগল প্লে পরিষেবাগুলি তার 20k + পদ্ধতিতে "নষ্ট" পদ্ধতিগুলির অন্যতম প্রধান সন্দেহভাজন । গুগল প্লে পরিষেবাগুলির সংস্করণ .5.৫ বা তার পরে, আপনার পক্ষে বেশ কয়েকটি ছোট ক্লায়েন্ট লাইব্রেরি ব্যবহার করে আপনার অ্যাপ্লিকেশনটিতে গুগল প্লে পরিষেবা অন্তর্ভুক্ত করা সম্ভব উদাহরণস্বরূপ, আপনার যদি কেবলমাত্র জিসিএম এবং মানচিত্রের প্রয়োজন হয় তবে আপনি কেবল এই নির্ভরশীলতাগুলি ব্যবহার করতে বেছে নিতে পারেন:

dependencies {
    compile 'com.google.android.gms:play-services-base:6.5.+'
    compile 'com.google.android.gms:play-services-maps:6.5.+'
}

সাব লাইব্রেরিগুলির সম্পূর্ণ তালিকা এবং এর দায়িত্বগুলি সরকারী গুগল ডকটিতে পাওয়া যাবে

আপডেট : সাপোর্ট লাইব্রেরি v4 v24.2.0 যেহেতু এটি নিম্নলিখিত মডিউলগুলিতে বিভক্ত হয়েছে:

support-compat, support-core-utils, support-core-ui, support-media-compatএবংsupport-fragment

dependencies {
    compile 'com.android.support:support-fragment:24.2.+'
}

তবে খেয়াল রাখবেন, আপনি যদি ব্যবহার করেন তবে support-fragmentএটির অন্যান্য মডিউলগুলির উপর নির্ভরতা থাকবে (যেমন আপনি যদি ব্যবহার android.support.v4.app.Fragmentকরেন তবে কোনও লাভ নেই)

সমর্থন-ভি 4 লাইবের জন্য সরকারী প্রকাশের নোটগুলি এখানে দেখুন


মাল্টিডেক্সিং সক্ষম করুন

ললিপপ যেহেতু (ওরফে বিল্ড সরঞ্জাম 21+) এটি পরিচালনা করা খুব সহজ। আপনার অ্যাপ্লিকেশনের জন্য একাধিক ডেক্স ফাইল তৈরি করতে ডেক্স ফাইল সমস্যার জন্য 65k পদ্ধতিগুলি ব্যবহার করার পদ্ধতিটি রয়েছে। আপনার গ্রেড বিল্ড ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন ( এটি 65k এরও বেশি পদ্ধতির অ্যাপ্লিকেশনগুলিতে অফিশিয়াল গুগল ডক থেকে নেওয়া হয়েছে ):

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

দ্বিতীয় পদক্ষেপটি হয় আপনার অ্যাপ্লিকেশন ক্লাসটি প্রস্তুত করা বা আপনি যদি অ্যাপ্লিকেশনটি প্রসারিত না MultiDexApplicationকরেন তবে আপনার অ্যান্ড্রয়েড ম্যানিফেস্টে এটি ব্যবহার করুন :

হয় এটি আপনার অ্যাপ্লিকেশন.জভাতে যুক্ত করুন

@Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
  }

বা প্রদত্ত অ্যাপ্লিকেশনটি mutlidex lib থেকে ব্যবহার করুন

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

মাল্টিডেক্সের সাথে আউটঅফমেমরি প্রতিরোধ করুন

পরবর্তী টিপ হিসাবে, আপনি যদি OutOfMemoryবিল্ড পর্বের সময় ব্যতিক্রম হিসাবে চালিত হন তবে আপনি গাদাটি আরও বড় করতে পারেন

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g"
    }
}

যা 4 গিগাবাইটে গাদা সেট করবে।

ডেক্স হ্যাপ মেমরি ইস্যুতে আরও বিশদের জন্য এই প্রশ্নটি দেখুন।


সমস্যার উত্স বিশ্লেষণ করুন

পদ্ধতির উত্স বিশ্লেষণ করতে গ্রেড প্লাগইন https://github.com/KeepSafe/dexcount-gradle-plugin উদাহরণস্বরূপ গ্রেড দ্বারা সরবরাহিত নির্ভরতা গাছের সাথে মিশ্রণে সহায়তা করতে পারে

.\gradlew app:dependencies

অ্যান্ড্রয়েডে পদ্ধতিতে গণনা সম্পর্কিত আরও তথ্যের জন্য এই উত্তর এবং প্রশ্নটি দেখুন


আমি প্লে পরিষেবাদি 6.5+ সমাধান ব্যবহার করেছি এবং এটি পুরোপুরি কার্যকর হয়েছে। অবিশ্বাস্য দরকারী টিপ। অনেক ধন্যবাদ!
হোয়াং এনগুইন হুউ

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

1
তোমার চেয়ে অনেক বেশি আমার চোখে জল। আপনি আমাকে বাঁচিয়েছেন
অনিদ্রা

আমি জিসিএমের জন্য ক্লায়েন্ট লাইব্রেরি ব্যবহার করেছি, কারণ আমি প্লে পরিষেবা থেকে কেবল জিসিএম পরিষেবা ব্যবহার করছি, এখন এটি আমার সমস্যাটি স্থির করেছে। ধন্যবাদ! আমার সময় বাঁচাতে
অঙ্কিত

57

আপনার প্রকল্পটি খুব বড়। আপনার অনেকগুলি পদ্ধতি রয়েছে। প্রতি অ্যাপ্লিকেশনটিতে কেবল 65536 পদ্ধতি থাকতে পারে। এখানে https://code.google.com/p/android/issues/detail?id=7147#c6 দেখুন


আমি দেখি. এই প্রকল্পের জন্য আমার প্রচুর নির্ভরতা রয়েছে। আমি যদিও maven ব্যবহার করতে সরানো আগে এটি জরিমানা তোলে, সম্ভবত maven অপ্রয়োজনীয় নির্ভরতা যুক্ত। ডাবল চেক করবে।
এডিসন

5
আরও সুনির্দিষ্টভাবে বলতে গেলে ডালভিক এক্সিকিউটেবল (ডেক্স) ফাইলের জন্য কেবল 65,536 টি পদ্ধতি থাকতে পারে। এবং একটি অ্যাপ্লিকেশন (APK) এ কাস্টম লোডিংয়ের মতো জিনিসগুলির সাথে একাধিক ডেক্স ফাইল থাকতে পারে।
ডেনিস শীল

7
এটি অ্যান্ড্রয়েডের জন্য সত্যিই বিব্রতকর বাগ! যাইহোক, আমার ক্ষেত্রে আমি জারটি অপসারণ করেছি যা libs ছিল এবং ব্যবহৃত হয়নি, এবং অ্যাপটি সংকলিত হয়েছে
ডেভিড

আমার প্রকল্পটি পরিষ্কার করার সময়: /
ডিকয়

1
একটি দ্রুত ফিক্স
হ'ল প্রোগার্ডটি

12

আপনি যদি গ্র্যাডল ব্যবহার করেন তবে নীচের কোডটি সহায়তা করে। 65k থ্রেশহোল্ডের নীচে ফিরে আসার জন্য আপনাকে সহজেই বিনা শৃঙ্খলাযুক্ত Google পরিষেবাগুলি মুছে ফেলার অনুমতি দেয় (মনে করে আপনি সেগুলি ব্যবহার করছেন)। এই পোস্টের সমস্ত ক্রেডিট: https://gist.github.com/dmarcato/d7c91b94214acd936e42

2014-10-22 সম্পাদনা করুন : উপরে উল্লিখিত গিস্টটিতে অনেক আকর্ষণীয় আলোচনা হয়েছে। TLDR? এটি দেখুন: https://gist.github.com/Takhion/10a37046b9e6d259bb31

আপনার বিল্ড.gradle ফাইলের নীচে এই কোডটি আটকান এবং আপনার প্রয়োজন নেই এমন Google পরিষেবাদির তালিকাটি সামঞ্জস্য করুন:

def toCamelCase(String string) {
    String result = ""
    string.findAll("[^\\W]+") { String word ->
        result += word.capitalize()
    }
    return result
}

afterEvaluate { project ->
    Configuration runtimeConfiguration = project.configurations.getByName('compile')
    ResolutionResult resolution = runtimeConfiguration.incoming.resolutionResult
    // Forces resolve of configuration
    ModuleVersionIdentifier module = resolution.getAllComponents().find { it.moduleVersion.name.equals("play-services") }.moduleVersion

    String prepareTaskName = "prepare${toCamelCase("${module.group} ${module.name} ${module.version}")}Library"
    File playServiceRootFolder = project.tasks.find { it.name.equals(prepareTaskName) }.explodedDir

    Task stripPlayServices = project.tasks.create(name: 'stripPlayServices', group: "Strip") {
        inputs.files new File(playServiceRootFolder, "classes.jar")
        outputs.dir playServiceRootFolder
        description 'Strip useless packages from Google Play Services library to avoid reaching dex limit'

        doLast {
            copy {
                from(file(new File(playServiceRootFolder, "classes.jar")))
                into(file(playServiceRootFolder))
                rename { fileName ->
                    fileName = "classes_orig.jar"
                }
            }
            tasks.create(name: "stripPlayServices" + module.version, type: Jar) {
                destinationDir = playServiceRootFolder
                archiveName = "classes.jar"
                from(zipTree(new File(playServiceRootFolder, "classes_orig.jar"))) {
                    exclude "com/google/ads/**"
                    exclude "com/google/android/gms/analytics/**"
                    exclude "com/google/android/gms/games/**"
                    exclude "com/google/android/gms/plus/**"
                    exclude "com/google/android/gms/drive/**"
                    exclude "com/google/android/gms/ads/**"
                }
            }.execute()
            delete file(new File(playServiceRootFolder, "classes_orig.jar"))
        }
    }

    project.tasks.findAll { it.name.startsWith('prepare') && it.name.endsWith('Dependencies') }.each { Task task ->
        task.dependsOn stripPlayServices
    }
}

এটা ভালবাসা! গুগলের মতো সংস্থাগুলি প্যাকেজগুলি স্ফীত করে রাখায় ডিএফের প্রয়োজন।
এডিসন

1
ভাল - এটি কাজ স্পট করেছে। কোনও ঝামেলা নেই এবং উদ্বেগ নেই!
স্লট

দ্রষ্টব্য: এই মুছে ফেলা গুগল প্লে পরিষেবাগুলি অ্যান্ড্রয়েড স্টুডিওতে আমার অ্যান্ড্রয়েড এসডিকে জার করে! একটি খারাপ ধারণা যেহেতু মূল জারগুলিতে ফিরে যাওয়া সহজ নয়। বিল্ড ডিরেক্টরিতে জারগুলি পরিবর্তন করতে লেখকের স্ক্রিপ্টটি পরিবর্তন করা উচিত।
ইন্দর

@ বাইন্ডার: আমার তো সমস্যা হয়নি। যাইহোক, cleanপ্রতিবার বাদ পড়ার সাথে আমি বানর করার সময় আমাকে একটি করতে হয়েছিল (আমরা বিশ্লেষণ ব্যবহার করি)।
জনিলম্বদা

মুক্তি বিল্ডস থেকে এটি বাদ দেবেন কীভাবে?
ব্যবহারকারী 1324936

6

আমি একটি নমুনা প্রকল্প ভাগ করেছি যা কাস্টম_রুল.এক্সএমএল বিল্ড স্ক্রিপ্ট এবং কয়েকটি লাইন কোড ব্যবহার করে এই সমস্যাটি সমাধান করে।

আমি এটি আমার নিজের প্রকল্পে ব্যবহার করেছি এবং এটি 1 এম + ডিভাইসগুলিতে (অ্যান্ড্রয়েড -8 থেকে সর্বশেষতম অ্যান্ড্রয়েড -১ 19) এ নির্দোষ চালাচ্ছে। আশা করি এটা সাহায্য করবে.

https://github.com/mmin18/Dex65536


1
স্ক্রিপ্টগুলির জন্য ধন্যবাদ। আপনার এআরটি জন্য নজর রাখা উচিত। ডিভাইস কেবলমাত্র আপনার ডিফল্ট ডেক্সকে রূপান্তর করতে পারে এবং দ্বিতীয়টি নয় not প্রিগার্ড সমাধানগুলি পছন্দ করা উচিত।
এডিসন

2
যখন আমি প্রকল্পগুলি Eclipse এ আমদানি করি এবং চালিত করি তখন এটি ত্রুটি দেয়। "ডেক্স কার্যকর করতে অক্ষম: পদ্ধতি আইডি [0, 0xffff]: 65536 এ নেই"। আপনি কি প্রকল্পটির ব্যবহার ব্যাখ্যা করতে পারেন
কারাকাগো

6

একই সমস্যার মুখোমুখি হয়েছিলেন এবং নির্ভরতা বিভাগে আমার বিল্ড.gradle ফাইলটি সম্পাদনা করে এটিকে সমাধান করেছেন:

compile 'com.google.android.gms:play-services:7.8.0'

এবং এর সাথে প্রতিস্থাপন:

compile 'com.google.android.gms:play-services-location:7.8.0'
compile 'com.google.android.gms:play-services-analytics:7.8.0' 

পারফেক্ট! আমি কেবল গুগল ড্রাইভ এপিআই ব্যবহার করি এবং এটি কাজ করে।
বেদভিস

5

বিল্ড.gradle এর নীচে কোড যুক্ত করার চেষ্টা করুন, এটি আমার জন্য কাজ করেছে -

compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
    multiDexEnabled true
}

2

এর সঠিক সমাধানটি হ'ল প্রোগুয়ার্ডের সাথে কাজ করা। মন্তব্য হিসাবে উল্লেখ aleb হিসাবে। এটি ডেক্স ফাইলের আকার অর্ধেক কমাবে।


1
একমত হয়ে উঠেছে, ক্রমবর্ধমান বৃহত গুগল প্লে পরিষেবাগুলির জারের সাথে বিশেষত * (নিজেই 18 কে পদ্ধতি)
এডিসন

2

আপনি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে সমস্যার (ডেক্স ফাইলের রেফারেন্স) বিশ্লেষণ করতে পারেন:

বিল্ড -> APK বিশ্লেষণ করুন ..

ফলাফল প্যানেলে ক্লাস.ডেক্স ফাইলটি ক্লিক করুন

এবং আপনি দেখতে পাবেন:

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


0

গ্রেড + অগ্রগতির সমাধান:

afterEvaluate {
  tasks.each {
    if (it.name.startsWith('proguard')) {
        it.getInJarFilters().each { filter ->
            if (filter && filter['filter']) {
                filter['filter'] = filter['filter'] +
                        ',!.readme' +
                        ',!META-INF/LICENSE' +
                        ',!META-INF/LICENSE.txt' +
                        ',!META-INF/NOTICE' +
                        ',!META-INF/NOTICE.txt' +
                        ',!com/google/android/gms/ads/**' +
                        ',!com/google/android/gms/cast/**' +
                        ',!com/google/android/gms/games/**' +
                        ',!com/google/android/gms/drive/**' +
                        ',!com/google/android/gms/wallet/**' +
                        ',!com/google/android/gms/wearable/**' +
                        ',!com/google/android/gms/plus/**' +
                        ',!com/google/android/gms/topmanager/**'
            }
        }
    }
  }
}

0

Libs ফোল্ডার থেকে কিছু জার ফাইল সরান এবং অন্য কোনও ফোল্ডারে অনুলিপি করুন, এবং _প্রজেক্ট বৈশিষ্ট্যাবলী> জাভা বিল্ড পাথ নির্বাচন করুন, লাইব্রেরি নির্বাচন করুন, আপনার প্রকল্পে মুছে ফেলা নির্বাচন করুন, সংরক্ষণ ক্লিক করুন, এটি রেফারেন্সডের অধীনে যুক্ত করা হবে Libs ফোল্ডারের পরিবর্তে লাইব্রেরি। এখন আপনার প্রকল্পটি পরিষ্কার করুন এবং চালান। মাল্টডেক্সের জন্য আপনাকে কোনও কোড যুক্ত করতে হবে না। এটি কেবল আমার পক্ষে কাজ করেছিল।


0

আমি আজ একই ইস্যুটির মুখোমুখি হয়েছি যার জন্য যা কাজ করেছে তা নীচে রয়েছে

অ্যান্ড্রয়েড স্টুডিওর জন্য ... তাত্ক্ষণিক রান সক্ষম করুন

ফাইল-> অগ্রাধিকার-> বিল্ড, এক্সিকিউশন, ডিপ্লোয়মেন্ট-> তাত্ক্ষণিক রান-> চেক হট অদলবদলের জন্য তাত্ক্ষণিক রান সক্ষম করুন ...

আশা করি এটা সাহায্য করবে


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