অ্যান্ড্রয়েড: ডেক্স 52 বাইট কোডটি সংস্করণ পার্স করতে পারে না


93

আমি কেবল অ্যান্ড্রয়েড স্টুডিও ২.১ এ স্যুইচ করেছি এবং পূর্বে কাজ করা একটি অ্যাপ্লিকেশন সংকলনের চেষ্টা করার সময় এই ত্রুটিটি প্রকাশ পেয়েছে:

Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.

আমি ইতিমধ্যে জাভা 1.7 কোড উত্পন্ন করার জন্য মূল প্রকল্পের গ্রেডল্ড বিল্ড ফাইলটি আপডেট করেছি:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        apply plugin: 'java'
        sourceCompatibility = 1.7
        targetCompatibility = 1.7
    }
}

আমি জাভা সংস্করণটি সেট করতে মডিউল গ্রেডেলও তৈরি করেছি ild

android {
compileSdkVersion 19
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.abc.def"
    minSdkVersion 19
    targetSdkVersion 19
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
}

সাবমনডটি মাভেনকে নিয়ে নির্মিত হচ্ছে। Pom.xML ফাইলটিতে আমি 1.7 কোড উত্পন্ন করার চেষ্টা করেছি।
আমি বুঝতে পারি যে আমি একটি অ্যাসেম্বলিটি আর্টিক্ট ব্যবহার করছি, যা অধস্তন মডিউলগুলি অন্তর্ভুক্ত করে, তবে আমি অধীনস্থ মডিউলগুলির কোনও পরিবর্তন করি নি এবং মডিউলের জন্য ফলাফলের .jar ফাইলটি গতবার সংকলন করার পরে ঠিকঠাক হয়ে গেছে।

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId> <!-- maven-compiler-plugin -->
            <version>2.6</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target> 
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

আমার প্রশ্ন: 1) এটি একটি অ্যান্ড্রয়েড স্টুডিও 2.1 সমস্যা? অন্যরা কি দেখেছেন? 2) এটি আমার ত্রুটি হিসাবে ধরে নেওয়া এবং যেহেতু ত্রুটি বার্তাটি খারাপ মডিউলটি খুঁজে পেতে কোনও সহায়তা দেয় না, তাই ভি 5 2 কোড সন্ধানের জন্য কোনও প্রস্তাবনা রয়েছে? আমি প্রচুর পরিমাণে কোড না ভেঙে লাইব্রেরিগুলি বাদ দিতে পারি না। কোড রিভিশনটি অনুসন্ধান করতে কেউ কি .jar ফাইলটি পরীক্ষা করতে পারে? আগাম ধন্যবাদ. -হেফেস্টাস


4
আমি এখনই এই ত্রুটির মুখোমুখি। সমাধানের জন্য কোনও ভাগ্য?
মেটাসনার্ফ

আমিও অ্যান্ড্রয়েড স্টুডিওটিকে ২.১ এ আপডেট করেছি। তার পর থেকে আমি এই সমস্যার মুখোমুখি হয়েছি। কোন সমাধান পেয়েছেন?
সুরেশ কুমার

পূর্বের একটি ত্রুটি বার্তা (যা পরে চলে গেছে) পরামর্শ দেয় যে পাবনব জার ফাইলটি সমস্যার অংশ ছিল। সুতরাং আমরা পাবুনাবের প্রতিটি রেফারেন্স মন্তব্য করেছি এবং এটি এখন সংকলন করে চলে। আমি বিশ্বাস করি যে আমরা কোডটি "1.7" তে বাধ্য করার জন্য সংকলক নির্দেশিকা (উপরে দেখানো) যুক্ত করার পরে ত্রুটি বার্তাটি চলে গেছে, তবে মনে হয় যে 1.8 কোডের কিছু এখনও লিক করছে।
হেফেসটাস

এখানে আরও একটি এসও আলোচনা যা সম্পর্কিত: স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / 69৯6868282828৮/২ । "যা একটি সাধারণ পরীক্ষা প্রকল্পের সাথে শুরু করুন" ব্যতীত যা প্রশ্নের উত্তর দেয় না।
হেফেসটাস

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

উত্তর:


89

অ্যান্ড্রয়েড স্টুডিও 3.0+ এর সাথে জাভা 1.8 ব্যবহার করুন এবং আমার জন্য নিম্নলিখিত কাজগুলি সেট করুন: এটির জন্য সর্বশেষতম বিল্ড সরঞ্জামগুলির প্রয়োজন seems

classpath 'com.android.tools.build:gradle:3.0.0'

এবং

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        ...        
        //jackOptions { // DEPRECATED
            //enabled true
        //}
    }
    dexOptions {
        incremental true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

4
ধন্যবাদ. যাইহোক, আমি এসডিকে ১৯-তে বিল্ডিং করছি এবং আমি নোট করছি যে আপনি 23-এ আছেন I আমি ভেবেছিলাম জাভা 8 কেবলমাত্র অ্যান্ড্রয়েড এন এর জন্য I
হেফেষ্টাস

4
আমি অ্যান্ড্রয়েড এনকে টার্গেট করার সময় জাভা 8 সহ কোডটি সংকলন করেছি তবে অ্যান্ড্রয়েড 16 এ অ্যাপ চালিয়েছি কোনও সমস্যা নেই। আপনি নিজে এটি পরীক্ষা করতে পারেন
ডিপস্কর্ন

7
দৃশ্যত dexOptions.incremental আর যেহেতু এটি সত্য ডিফল্ট প্রয়োজন বোধ করা হয় দেখতে stackoverflow.com/questions/37522668
devconsole

4
দয়া করে নিশ্চিত হয়ে নিন যে আপনি জাভা 8 ব্যবহারের সীমাবদ্ধতাগুলি বুঝতে পেরেছেন এবং সমস্ত ভাষার বৈশিষ্ট্য পিছনের দিকে সামঞ্জস্যপূর্ণ নয়। developer.android.com/guide/platform/j8-jack.html
ট্রেভজোনজ

4
মনে রাখবেন যে " android.dexOptions.incrementalসম্পত্তি হ্রাস করা হয়েছে এবং বিল্ড প্রক্রিয়াতে এর কোনও প্রভাব নেই" "
জোনিক

16

আপনার যদি জাভা লাইব্রেরি সহ একটি মডিউল থাকে যা অ্যান্ড্রয়েড-নির্দিষ্ট নয় , এটি কাজ করা উচিত:apply plugin:'java'

এটি বিল্ড.gradle ফাইলের শীর্ষে রাখুন, তারপরে পুনর্নির্মাণ করুন।

    apply plugin: 'java'
    apply plugin: 'jacoco'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.11'

        sourceCompatibility = 1.7
        targetCompatibility = 1.7
    }

শীতল। ধন্যবাদ আমি এটা চেষ্টা করে দেখব.
হেফেসটাস

4
যদি আপনার জাভা লাইব্রেরি সহ অ্যান্ড্রয়েড-নির্দিষ্ট নয় এমন একটি মডিউল থাকে তবে এটি সঠিক সমাধান।
gladed

17
ত্রুটি: 'জাভা' প্লাগইন প্রয়োগ করা হয়েছে, তবে এটি অ্যান্ড্রয়েড প্লাগইনগুলির সাথে সামঞ্জস্য নয়।
অ্যালেন সিলজাক

4
রাজি। 'জাভা' প্লাগইন স্পষ্টতই অ্যান্ড্রয়েড প্লাগইনগুলির সাথে সামঞ্জস্য নয়। আনন্দ নেই।
হেফেষ্টাস

4
@ অ্যালেন সিলজাক, প্লাগইন প্রয়োগ করুন: 'আপনার প্লাগইন নাম' জাভা হতে হবে না।
nexDev

8

আপনি যদি ব্যবহার করেন org.jetbrains:annotation:15এবং রেট্রোলম্বদা প্লাগইন করেন তবে compile org.jetbrains:annotations:15.0আপনার থেকে লাইন সরান build.gradleএবং ত্রুটিটি অদৃশ্য হয়ে যাবে। এটা আমার জন্য কাজ করে.


7

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

উদাহরণস্বরূপ: আমারও একই সমস্যা ছিল। কয়েক ঘন্টা অনুসন্ধানের পরে, আমি খুঁজে পেয়েছি যে গ্রন্থাগারের org.codehaus.httpcache4j.uribuilder:2.0.0জন্য জাভা 8 প্রয়োজন, গিথুব হিসাবে । সুতরাং, যখন আমি স্যুইচ করেছি 1.1.0, প্রকল্পটি সফলভাবে তৈরি এবং স্থাপন করা হয়েছে।


fobo66: হ্যাঁ, আমি একমত। এটি আমরা যা করেছি তা বেশ অনেকখানি। আমি মনে করি দুর্ভাগ্যক্রমে আরও অনেক বেশি লাইব্রেরি খুব শীঘ্রই জাভা 8 এর সাথে সংকলিত হবে এবং এটি তখন একটি সাধারণ সমস্যা হয়ে উঠবে। এটি পাইথনের পৃথিবীর মতোই মনে হয় যেখানে অনেক লাইব্রেরি এখনও ২.6-এ রয়েছে বলে মনে হয়।
হেফেসটাস

পাইথনের মতো আমরা খুব শীঘ্রই দেখতে পাব যে সমস্ত লাইব্রেরি জে 7 এবং জে 8 সংস্করণ হিসাবে পৃথকভাবে উপলব্ধ।
হেফেসটাস

7

বিভাগের সমস্ত প্রকল্পগুলিতে মূল বিল্ডড্রেডলে যুক্ত করার চেষ্টা করুন

tasks.withType(JavaCompile) {
    sourceCompatibility = "1.7"
    targetCompatibility = "1.7"
}

বা নির্ভরতা মধ্যে এটি যোগ করুন

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

মধ্যে সকল মডিউল ম্যানুয়ালি


7

আমি নিম্নলিখিত লাইনগুলি যুক্ত করে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি:

jackOptions {
    enabled true
}

থেকে defaultConfigমধ্যে build.gradleফাইল।

আপনি লিঙ্কটিতে জাভা 8 এর জন্য নির্দেশিকাটি অনুসরণ করতে পারেন - https://developer.android.com/guide/platform/j8-jack.html


4
জ্যাক 14 মার্চ 2017 থেকে
অবহেলিত হয়েছে

এই লিঙ্কটি জ্যাকঅপশনগুলি সরানোর প্রক্রিয়া বর্ণনা করে। এটি সম্ভবত সেরা সমাধান নয়।
অ্যান্টনি নাদদেও

5

গ্রেনাও-জেনারেটরের নির্ভরতা নিয়ে আমারও একই সমস্যা ছিল। আমি ভুলভাবে আমার বিল্ড.gradle ( compile 'org.greenrobot:greendao-generator:3.1.0') এর মধ্যে নির্ভরতা যুক্ত করেছি এবং অ্যান্ড্রয়েড স্টুডিও আমাকে একই ত্রুটি বার্তাটি দেখিয়েছে।

সম্ভবত এটি কারণ যে মডিউলটি জাভা 8 দিয়ে সংকলিত হয়েছে।

তাই আমি আমার বিল্ড.ড্রেডল থেকে সেই নির্ভরতা সরিয়েছি এবং সমস্ত খুশিতে সংকলন করেছি :)


2

আমি নিম্নরূপ হিসাবে এই সমস্যাটি সমাধান করেছি:

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

2

গ্রেডল প্লাগইন ২.২.২ সহ অ্যান্ড্রয়েড স্টুডিও ২.২ এ ইনস্ট্যান্ট রানটি বন্ধ করে দেওয়া আমার জন্য এটি স্থির করে। গ্র্যাডল প্লাগইন (যেমন ২.২.০) এর পুরানো সংস্করণে ফিরে যাওয়া এটিকেও ঠিক করেছে, তবে এটি কম কাঙ্ক্ষিত ইমো।


2

অ্যান্ড্রয়েড স্টুডিও ২.৩.৩ নিয়ে আমার সাথে এটি ঘটেছিল। আমি যে সমাধানটি পেয়েছি তা হ'ল বিল্ড ফোল্ডারটি মুছে ফেলা এবং তারপরে পুনর্নির্মাণ প্রকল্প । এটা ঐটার মতই সহজ ছিল।


1

Android 2.3.3কয়েক জেআর অনুপাত যুক্ত করার পরেও আমি একই ত্রুটির সম্মুখীন হয়েছিলাম। ডিপেনসির কারণে সমস্যা ছিলio.netty:netty-all:4.1.16.Final । এই ৪.১.১6 সংস্করণ জেআরটি জাভা ১.৮ এর সাথে সংকলিত হয়েছিল এবং অন্য সকল জাভা ১.7 দিয়ে তৈরি হয়েছিল।

nettyআমার build.gradleফাইলটিতে পুরানো সংস্করণ (যা জাভা 1.7 দিয়ে উত্পন্ন হয়েছিল) অন্তর্ভুক্ত করার পরে এটি সমাধান হয়ে যায় ।

compile 'io.netty:netty-all:4.1.5.Final'


এখানে একই ইস্যু নিয়ে এসেছেন, যদিও নেটটি পৃষ্ঠাতে উল্লেখ করা হচ্ছে যে জাভা ১.6 নেট ব্যবহারের জন্য যথেষ্ট।
টমাসজ ক্রাইস্কি

0

অ্যান্ড্রয়েড স্টুডিও ভি ২.৩.৩ এ অটো-মান v 1.5 আপগ্রেড করার চেষ্টা করার সময় আমি এই সমস্যাটি জুড়ে এসেছি। অটো-মান ১.৫ সম্ভবত এএস 3 এর সাথে সামঞ্জস্যপূর্ণ হবে (এটির জন্য একটি আপডেট জাভা সংকলক প্রয়োজন)

আপাতত স্বয়ংক্রিয় মান 1.4.1 কাজ করে।


0

আমি অ্যান্ড্রয়েড এবং আরএক্সজাভা ২ এর জন্য রিএ্যাকটিভ লোকেশন এপিআইএস লাইব্রেরিটির সাথে একই সমস্যার মুখোমুখি আছি ust.০১.১ এ জাস্ট আপডেট বিল্ড্র্যাডল এবং অ্যান্ড্রয়েডের জন্য রিএ্যাকটিভ লোকেশন এপিআইয়ের লাইব্রেরি এবং আরএক্সজাভা ২ লাইব্রেরির সংস্করণকে ১.০.৪ থেকে ১.০.৩ এ হ্রাস করে এটি সূক্ষ্মভাবে কাজ করে আমার ক্ষেত্রে.


0

অ্যান্ড্রয়েড স্টুডিও 3.0.০ এ jdk 1.8 দ্বারা সংকলিত একটি জারটি আমদানির চেষ্টা করার সময় আমি এই সমস্যাটি জুড়ে এসেছি। আমি উপরের সমস্ত সমাধান চেষ্টা করেছিলাম, কিন্তু কোনওটিই কাজ করে না। সুতরাং, আমি সেই জারটির বিকাশকারীকে এটি jdk 1.7 দিয়ে পুনরায় সংকলন করতে বলেছিলাম, এবং তারপরে এটি ভালভাবে কাজ করবে, আবার এই সমস্যাটি সামনে আসবে না।


0

যদি আপনার পক্ষে সম্ভব হয়:

  1. অ্যান্ড্রয়েড সরঞ্জামগুলিতে আপগ্রেড করুন: শ্রেণিপথ 'com.android.tools.build:gradle:3.0.0'
  2. বিল্ডটুলস ভার্সন "26.0.2"

এটি সমস্যার সমাধান করা উচিত।

তথ্যসূত্র: https://developer.android.com/studio/write/java8-support

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