Kötü sınıf dosya büyüsü veya sürümü


101

Bu sorunun zaten çok sık sorulduğunu ve yanıtladığını zaten biliyorum, ancak bulduğum yanıtların hiçbiri sorunumu çözmedi.

Hata:

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

Hata bad class file magic (cafebabe) or version (0034.0000).

Uygulamayı aynı gün içinde birçok kez sorunsuz bir şekilde oluşturup çalıştırdım ama şimdi bu mesajla her seferinde başarısız oluyor.


Proje SDK'sı Android API 19 Platformve proje düzeyi 1.7.

CompileSDK 19ve buildToolsVersion '20.0.0'.

Derleme seçenekleri:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

ve dependenciesbende var:

compile files('libs/bananaquery.jar')

Kitaplık, Android API 19 Platformproje düzeyinde SDK ile oluşturulmuştur 1.7.

Benim .jardosya içinde bulunmaktadır libs/klasörde.

IntelliJ IDEA 14 Preview kullanıyorum, nedeni bu olabilir mi? IntellIJ IDEA 13 ile "Gradle sync" de takılı kalır

i beri derleme dosyaları yararsız olabilir compile fileTree(dir: 'libs', include: ['*.jar'])de


Merhaba benzer bir sorunum var ama proje derleyicisini 1.7'ye koymak yardımcı olmuyor, lütfen bir göz atabilir misiniz? stackoverflow.com/questions/29098038/…
Csabi

Sorun pek çok şey olabilir, 1.7 kullandım çünkü Java 1.7 kullanıyordum, 1.6 olarak değiştirmeyi deneyin
Marco Acierno

Merhaba 1.6'ya koyulan tüm projeyi denedim, yardımcı olmuyor, daha önce o kütüphaneyi kullanıyordum, .jar dosyasını daha yeni bir sürümle güncelledim, daha yüksek java ile derlenmiş olması bir sorun olabilir mi?
Csabi

Bu sorunu çözmek için uzun yoldan gittim ve içe aktardığım bir kitaplıkta derleme hatasının oluştuğunu fark ettim. Bu önemli bir ayrımdır çünkü hiçbir yerel IDE derleyici ayar değişikliği içe aktarılan bir şeyi düzeltmez.
Shadoninja

Yanıtlar:


95

Benim JAVA_HOMEbenim android projenin bir bağımlılık olarak saf java modülünü derlerken Java 1.8 ve I olarak değiştirildi değişken bu hata mesajını aldım.

java modülünün build.gradle'ı

apply plugin: 'java'

1.Çözüm: Hızlı ve kirli

JAVA_HOMESırtımı 1.7'ye ayarlayarak düzelttim :

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

Çözüm 2: Derleyici sürümünü değiştirin:

build.gradle içindeki bu belirli modül için 1.7'ye geri dönün

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

4
Gradle'ın deneysel versiyonunda sözdizimi şöyledir:compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 }
Stephen Kaiser

Android Studio, "Atama kullanılmıyor" diyerek kaynağın ve targetCompatibility'nin gri altını çizmesine rağmen Çözüm 2 benim için çalıştı
CodyF

39

Tamam, benim hatam.

Proje SDK bölümünde, bir eklediğinizde Android SDK, Java SDKtüm Android SDK'larımın SDK olarak Java 8 kullanmasını sağlamalısınız, böylece Proje seviyesi olsa bile 1.7(nedenini bilmiyorum, sanıyorum) her şeyin Proje düzeyine göre seçildiğini).

Şimdi SDK'yı ( java version "1.x.0"bölüm) değiştirdim .

görüntü açıklamasını buraya girin

ve iyi derlenmiş görünüyor.

Bugün önce çalışmış sebebi benim SDK olmamdı 1.8değilAndroid API x


bende de aynı sorun var. bunu nerede değiştirmeliyim? Teşekkürler
rupesh

1
Bir Android SDK eklediğinizde, hangi SDK'ya başvurduğunuzu belirtmelisiniz ... (Benim durumumda Java 7'yi seçtim çünkü bu sürümü kullanıyordum) Ama sizin durumunuza da bağlı. Aynı ada sahip diğer hataları çevrimiçi olarak arayın, birçok bilgi bulacaksınız
Marco Acierno

tercihler ekranından mı bahsediyorsun?
rupesh

3
Proje yapısı penceresini açın> "Proje SDK" mesajıyla birlikte seçim nerede ihtiyacınız olan SDK'yı seçin (kodunuz veya harici kütüphaneyi derlemek için kullanılan SDK sürümü). Aynı sorunu yaşıyorsanız, Android SDK satırınızı kontrol edin ve "Düzenle" yi tıklayın. Java
SDK'nızın

2
Modül Ayarları'na gidip JDK konumunu Java 7
jre'nin

27

İnsanların @Marco Acierno'nun cevabını biraz belirsiz bulması durumunda çözüm, daha yüksek bir sürüm değil, Java 7 ile oluşturduğunuzdan emin olmaktır.

Android Studio için, değiştirmek File -> Project Structure -> SDK Location -> JDK Locationiçin jdk1.7.x. Komut satırı için java -versionçıktılardan emin olun java version "1.7.x".


IntelliJ IDEA kullanıyordum, bu yüzden benim durumumda Android SDK'yı eklerken doğru Java SDK'yı koymak zorunda kaldım ... (bir Android Modülünde yalnızca Java 1.x'i seçemezsiniz, aksi takdirde Android sınıflarını görmez)
Marco Acierno

15
Java 8'i neden kullanamıyoruz?
Sujay


3

her build.grade dosyasında tüm modül java sürümünüzü java 1.7'ye değiştirin.

kütüphane ve uygulama olan eklentide

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

ve java'da

sourceCompatibility= 1.7
targetCompatibility= 1.7

Yapmam gereken tek şey buydu. Teşekkürler
Chisko

2

Bu sorun, bir .jar , Java 6'nın herhangi bir özelliğini kullanmayan ancak Java 6 veya üstü dosya .

Bu .jardosyayı siz oluşturduysanız, Gradleveya ProGuardveya içinde hiçbir şeyi değiştirmenize gerek yoktur Compiler Version. Çözüm çok basit, sadece o .jardosyayı yeniden oluşturun, ancak Java 5 veya daha azını kullanın .

Daha fazla ayrıntı .


benim durumumda .aar dosyası. Ne yapmalıyım?
GvSharma

1

Benzer bir sorun yaşadım, proguard'ımı yükselterek çözdüm. proguard versiyonunuzu bu komutla alın

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

en son progaurd.jar dosyasını buradan alın ( http://proguard.sourceforge.net )

mevcut android-sdks / tools / proguard / lib / proguard.jar dosyasını yeni .jar dosyasıyla değiştirin.

Umarım bu size yardımcı olur. Java 8 kullanıyorsanız, proguard 5.x'e yükseltmelisiniz coz proguard 4.x, java 8'i desteklemiyor.


@RookieGuy java sürümünü tekrar 1.7'ye ayarlamayı deneyin, bu da benim için çalıştı.
spaceMonkey

İpucu için teşekkürler, geçişli bağımlılıklarla birlikte gelen kitaplıkları yeniden derlemek zorunda kaldım , referans için buraya uc-mobileapps.com/index.html%3Fp=509.html yazdım , çünkü sürümler biraz değişti
RookieGuy

1

netbeans'ten android stüdyosuna kendi kendine yapılmış bir kitaplık eklemeye çalıştığımda benzer bir sorun yaşadım. android stüdyosunda kaynak ve hedef uyumluluğunu ve netbeans'te (her ikisi!) kaynak / ikili formatını java 1.7'ye ayarlamak sorunu çözdü.

android stüdyosunda:

Proje Yapısı -> Modüller / Uygulama -> Özellikler -> Kaynak- ve Hedef 1.7

net fasulyede:

Dosya -> Proje Özellikleri -> Kaynaklar -> Kaynak / İkili Biçim 1,7'ye

sonra netbeans projekt'inizi temizleyin ve oluşturun ve .jar'ı "NBProj / dist" den "app / libs" e kopyalayın


0

yalnızca Java8 yüklüyse, vakanın çözümünü paylaşın, yalnızca Java derleyici düzeyini 1.7'ye ayarlayın ve ardından projeyi yeniden oluşturun tamam olmalıdır.


0

Üçüncü taraf kitaplığı kullanırken hata aldım. Yukarıdaki soruya uygun olarak, kütüphaneyi yukarıdaki yığın izleme mesajına göre değiştirmek gerekiyordu:

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

uygun versiyon ile.

Soruya karşılık gelen bananaquery.jar, Java uyumlu sürümle değiştirilecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.