बुरा वर्ग फ़ाइल जादू या संस्करण


101

मुझे पहले से ही पता है कि सवाल पहले ही बहुत बार पूछे जा चुके हैं और जवाब भी दिए गए हैं, लेकिन जो जवाब मुझे मिला उनमें से किसी ने भी मेरी समस्या तय नहीं की।

यह त्रुटि है:

Error:Gradle: Execution failed for task ':ffcommunity:preDexDebug'.
 com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\Android SDK\sdk\build-tools\20.0.0\dx.bat --dex --output D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\build\intermediates\pre-dexed\debug\bananaquery-2ee85432877a057e7414910b8127805535139d5d.jar D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\libs\bananaquery.jar
Error Code:
    1
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.processClass(Main.java:665)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
        at com.android.dx.command.dexer.Main.access$600(Main.java:78)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:596)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    1 error; aborting

त्रुटि है bad class file magic (cafebabe) or version (0034.0000)

मैंने एक ही दिन में कई बार समस्याओं के बिना एप्लिकेशन का निर्माण और निष्पादन किया, लेकिन अब यह इस संदेश के साथ हर बार विफल हो जाता है।


प्रोजेक्ट SDK है Android API 19 Platformऔर प्रोजेक्ट स्तर है 1.7

CompileSDK है 19और buildToolsVersion है '20.0.0'

संकलन विकल्प:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

और dependenciesमेरे पास है:

compile files('libs/bananaquery.jar')

पुस्तकालय Android API 19 Platformपरियोजना स्तर के साथ एसडीके के साथ बनाया गया है 1.7

मेरी .jarफाइल libs/फोल्डर के अंदर है ।

मैं इंटेलीज आईडीईए 14 पूर्वावलोकन का उपयोग करता हूं, यह कारण हो सकता है? IntellIJ IDEA 13 के साथ यह "ग्रेड सिंक" पर अटका हुआ है

संकलित फ़ाइलें बेकार हो सकती हैं क्योंकि मेरे पास compile fileTree(dir: 'libs', include: ['*.jar'])भी है


नमस्ते, मैं इसी तरह की समस्या है, लेकिन 1.7 करने के लिए परियोजना संकलक मदद नहीं करता है, कृपया आप एक नज़र ले जा सकते हैं? stackoverflow.com/questions/29098038/…
Csabi

समस्या यह बहुत सारी चीजें हो सकती हैं, मैंने 1.7 का उपयोग किया क्योंकि मैं जावा 1.7 का उपयोग कर रहा था, इसे 1.6 में बदलने की कोशिश करें
मार्को एसेर्नो

नमस्ते, मैंने पूरी परियोजना को 1.6 में डालने की कोशिश की, यह मदद नहीं करता है, मैं पहले उस पुस्तकालय का उपयोग कर रहा था, मैंने अभी .jar फ़ाइल को एक नया संस्करण सफेद किया है, यह एक समस्या हो सकती है कि इसे उच्च जावा के साथ संकलित किया जाए?
सेसाबी

मैं इस मुद्दे को ठीक करने के लंबे रास्ते पर चला गया और महसूस किया कि संकलन त्रुटि एक पुस्तकालय पर हो रही थी जिसे मैं आयात कर रहा था। यह एक महत्वपूर्ण अंतर है क्योंकि कोई भी स्थानीय IDE संकलक सेटिंग परिवर्तन कुछ ऐसा नहीं करेगा जो आयात किया जा रहा है।
शादिनिजा

जवाबों:


95

जब मेरा JAVA_HOMEवेरिएबल जावा 1.8 में बदल गया और मुझे अपने एंड्रॉइड प्रोजेक्ट की निर्भरता के रूप में शुद्ध जावा मॉड्यूल का संकलन करते समय यह त्रुटि संदेश मिला।

जावा मॉड्यूल के build.gradle

apply plugin: 'java'

समाधान # 1: एक गंदा त्वरित

मैंने इसे JAVA_HOME1.7 पर वापस सेट करके तय किया :

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

समाधान # 2: संकलक संस्करण बदलें:

इसके build.gradle में इस विशिष्ट मॉड्यूल के लिए वापस 1.7 पर बदलें

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

4
ग्रेडल के प्रायोगिक संस्करण में वाक्य रचना है:compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 }
स्टीफन कैसर

समाधान 2 ने मेरे लिए काम किया, भले ही एंड्रॉइड स्टूडियो ने sourceCompatibility और targetCompatibility को ग्रे-अंडरलाइन किया, यह कहते हुए कि "असाइनमेंट का उपयोग नहीं किया गया है"
CodyF

39

ठीक है, मेरा बुरा।

प्रोजेक्ट SDK सेक्शन में, जब आप जोड़ते हैं तो आपको और सभी को मेरे Android SDK को SDK के रूप में Java 8 का उपयोग Android SDKकरना चाहिए, इसलिए यह प्रोजेक्ट स्तर के होने पर भी गलत वर्जन वाली क्लास फाइल बनाता है (मुझे पता नहीं क्यों, मुझे लगा कि वह सब कुछ परियोजना स्तर द्वारा चुना गया था)।Java SDK1.7

अब मैंने एसडीके ( java version "1.x.0"भाग) को बदल दिया ।

यहां छवि विवरण दर्ज करें

और यह ठीक संकलन करने के लिए लगता है।

आज से पहले काम करने का कारण यह था कि मेरा एसडीके था 1.8और नहींAndroid API x


मेरे साथ भी वही दिक्कत है। मुझे इसे कहाँ बदलना चाहिए धन्यवाद
रूपेश

1
जब आप एक एंड्रॉइड एसडीके जोड़ते हैं, तो आपको निर्दिष्ट करना चाहिए कि आप किस एसडीके का उल्लेख करते हैं ... (मेरे मामले में मैंने जावा 7 का चयन किया था क्योंकि मैं इस संस्करण का उपयोग कर रहा था) लेकिन यह आपके मामले में भी निर्भर करता है। उसी नाम की अन्य त्रुटियों के लिए ऑनलाइन खोजें, आपको बहुत सारी जानकारी मिल जाएगी
Marco Acierno

क्या आप वरीयताओं के बारे में बात कर रहे हैं स्क्रीन ??
रुपये

3
ओपन प्रोजेक्ट स्ट्रक्चर विंडो> जहां "प्रोजेक्ट एसडीके" संदेश के साथ चयन करना है वहां आपको जिस एसडीके की जरूरत है उसका चयन करें (आपका कोड या एसडीके का संस्करण बाहरी परिवाद को संकलित करने के लिए उपयोग किया जाता है)। यदि आपको मेरी यही समस्या है, तो अपने Android SDK लाइन की जाँच करें और "संपादित करें" पर क्लिक करें। आपको एक अन्य पैनल में ले जाया जाएगा, जहां आपके पास जावा एसडीके है, 1.7 का चयन करें (या जिस संस्करण को आपको संकलित करने की आवश्यकता है)
मार्को आइसेर्नो

2
एक ही स्थिति को मॉड्यूल सेटिंग्स पर जाकर और घर के डायरेक्टरी में JDK लोकेशन को एडिट करके जहाँ एक Java 7 jre स्थापित किया गया था
zztonedefzz

27

यदि लोग @Marco Acierno के उत्तर को थोड़ा अस्पष्ट पाते हैं, तो समाधान यह सुनिश्चित करना है कि आप जावा 7 के साथ निर्माण कर रहे हैं और उच्चतर संस्करण नहीं।

Android के लिए स्टूडियो, बदलने File -> Project Structure -> SDK Location -> JDK Locationके लिए jdk1.7.x। कमांड लाइन के लिए, java -versionआउटपुट सुनिश्चित करें java version "1.7.x"


मैं IntelliJ IDEA का उपयोग कर रहा था, इसलिए मेरे मामले में मुझे सही जावा एसडीके डालना पड़ा था जब मैंने एंड्रॉइड एसडीके जोड़ा था ... (आप केवल एंड्रॉइड मॉड्यूल में जावा 1.x का चयन नहीं कर सकते हैं अन्यथा यह एंड्रॉइड कक्षाएं नहीं देखेगा)
मार्को एसेर्नो

15
क्यों हम जावा 8 का उपयोग नहीं कर सकते?
सुजय


3

प्रत्येक बिल्ड.ग्रेड फ़ाइल में अपने सभी मॉड्यूल जावा संस्करण को जावा 1.7 में बदलें।

प्लगइन में जो पुस्तकालय और अनुप्रयोग है

compileOptions{
    sourceCompatibility=JavaVersion.VERSION_1_7
    targetCompatibility=JavaVersion.VERSION_1_7
}

और जावा में

sourceCompatibility= 1.7
targetCompatibility= 1.7

यह केवल एक चीज थी जिसकी मुझे जरूरत थी। धन्यवाद
Chisko

2

यह समस्या तब होती है जब आप एक ऐसी .jarफ़ाइल का उपयोग करते हैं जो जावा 6 या उच्चतर की किसी भी सुविधा का उपयोग नहीं कर रही है, लेकिन इसे जावा 6 या उच्चतर का उपयोग करके बनाया गया था।

आपको लगता है कि बनाया तो .jarफिर फ़ाइल आप में परिवर्तन कुछ भी करने की जरूरत नहीं Gradleया ProGuardया Compiler Version। समाधान बहुत सरल है, बस उस .jarफ़ाइल को फिर से बनाएं लेकिन जावा 5 या उससे कम का उपयोग करें

अधिक जानकारी


मेरे मामले में यह .AR फ़ाइल है। मुझे क्या करना चाहिए?
GvSharma

1

मेरे पास एक समान मुद्दा था, मैंने अपने प्रूफ़ को अपग्रेड करके इसे हल किया। इस कमांड द्वारा अपना प्रोगार्ड संस्करण प्राप्त करें

java -jar ~/android-sdks/tools/proguard/lib/proguard.jar 

नवीनतम progaurd.jar फ़ाइल यहाँ से प्राप्त करें ( http://proguard.sourceforge.net )

मौजूदा android-sdks / tools / proguard / lib / proguard.jar को नई .jar फ़ाइल से बदलें।

उम्मीद है कि यह आपकी मदद करनी चाहिए। अगर आप java 8 का उपयोग कर रहे हैं, तो आपको 5.x coz proguard के लिए नवीनीकरण करना चाहिए। 4. java 8 का समर्थन नहीं करता है।


@RookieGuy ने जावा संस्करण को 1.7 पर सेट करने की कोशिश की, जो मेरे लिए भी काम आया।
SpaceMonkey

संकेत के लिए धन्यवाद, मुझे उन लाइब्रेरियों को फिर से जोड़ना पड़ा, जिन्हें संक्रमणीय निर्भरता के साथ शामिल किया गया था, इसे यहाँ uc-mobileapps.com/index.html%3Fp=509.html के लिए लिखा था , क्योंकि संस्करण काफी बदल गए हैं
RookieGuy

1

इसी तरह का एक मुद्दा था जब मैंने netbeans से एंड्रॉइड स्टूडियो में एक स्व-निर्मित पुस्तकालय जोड़ने की कोशिश की। एंड्रॉइड स्टूडियो में सोर्स- और टारगेट कम्पेटिबिलिटी सेट करना और नेटबीन्स में सोर्स / बाइनरी फॉर्मेट (दोनों!) से java 1.7 की समस्या हल हो गई।

एंड्रॉइड स्टूडियो में:

परियोजना संरचना -> मॉड्यूल / ऐप -> व्याख्याएं -> स्रोत- और लक्ष्य 1.7

नेटबीन्स में:

फ़ाइल -> परियोजना गुण -> स्रोत -> स्रोत / बाइनरी प्रारूप 1.7 के लिए

फिर साफ करें और अपने नेटबीन्स प्रोजेक का निर्माण करें और "एनबीप्रोज / डिस्ट" से "ऐप / लिबास" में कॉपी करें।


0

मामले का समाधान साझा करें यदि केवल जावा 8 स्थापित किया गया है, तो बस जावा संकलक स्तर 1.7 पर सेट करें और फिर परियोजना का पुनर्निर्माण ठीक होना चाहिए।


0

थर्ड पार्टी लाइब्रेरी का उपयोग करते समय मुझे त्रुटि मिली। उपर्युक्त प्रश्न के अनुसार, लाइब्रेरी को उपरोक्त स्टैक ट्रेस संदेश के अनुसार बदलना आवश्यक था:

        ...
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    ...

उपयुक्त संस्करण के साथ।

प्रश्न के अनुरूप, bananaquery.jarजावा-संगत संस्करण द्वारा प्रतिस्थापित किया जाना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.