Phiên bản hoặc ma thuật tệp lớp kém


101

Tôi đã biết rằng câu hỏi đó đã được hỏi rất thường xuyên và câu trả lời, nhưng không có câu trả lời nào mà tôi tìm thấy đã khắc phục được sự cố của tôi.

Đó là lỗi:

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

Lỗi là bad class file magic (cafebabe) or version (0034.0000).

Tôi đã tạo và thực thi ứng dụng mà không gặp sự cố nhiều lần trong cùng một ngày nhưng bây giờ điều này không thành công mọi lúc với thông báo này.


SDK dự án là Android API 19 Platformvà cấp dự án là 1.7.

CompileSDK là 19và buildToolsVersion là '20.0.0'.

Các tùy chọn biên dịch:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

và trong dependenciestôi có:

compile files('libs/bananaquery.jar')

Thư viện được xây dựng bằng SDK Android API 19 Platformvới cấp độ dự án 1.7.

.jarTệp của tôi nằm trong libs/thư mục.

Tôi sử dụng IntelliJ IDEA 14 Preview, đó có thể là lý do? Với IntellIJ IDEA 13, nó vẫn bị mắc kẹt ở "Đồng bộ hóa Gradle"

file biên dịch có thể là vô dụng kể từ khi tôi có compile fileTree(dir: 'libs', include: ['*.jar'])quá


Xin chào, tôi có vấn đề tương tự nhưng để đưa trình biên dịch dự án lên 1.7 không giúp được gì, bạn có thể xem qua được không? stackoverflow.com/questions/29098038/…
Csabi

Vấn đề nó có thể là rất nhiều thứ, tôi đã sử dụng 1,7 bởi vì tôi đã sử dụng Java 1.7, hãy thử thay đổi nó để 1.6
Marco Acierno

Xin chào Tôi đã thử toàn bộ dự án đưa lên 1.6 nó không được, tôi đã sử dụng thư viện đó trước đây, tôi vừa cập nhật tệp .jar với phiên bản mới hơn, Nó có thể là một vấn đề khi nó được biên dịch với java cao hơn?
Csabi

Tôi đã đi xuống một chặng đường dài để khắc phục sự cố này và nhận ra lỗi biên dịch đang xảy ra trên thư viện mà tôi đang nhập. Đây là một điểm khác biệt quan trọng bởi vì không có thay đổi cài đặt trình biên dịch IDE cục bộ nào sẽ khắc phục một số thứ đang được nhập.
Shadoninja

Câu trả lời:


95

JAVA_HOMEbiến của tôi đã thay đổi thành Java 1.8 và tôi nhận được thông báo lỗi này khi biên dịch một mô-đun java thuần túy như một phần phụ thuộc của dự án Android của tôi.

build.gradle của mô-đun java

apply plugin: 'java'

Giải pháp # 1: Nhanh chóng làm bẩn

Tôi đã sửa nó bằng cách đặt JAVA_HOMEtrở lại 1.7:

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

Giải pháp # 2: Thay đổi phiên bản trình biên dịch:

thay đổi trở lại 1.7 cho mô-đun cụ thể này trong build.gradle của nó

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

4
Trong phiên bản thử nghiệm của Gradle cú pháp là:compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 }
Stephen Kaiser

Giải pháp 2 phù hợp với tôi, mặc dù Android Studio đã gạch chân màu xám nguồn Tương thích và mục tiêu Khả năng tương thích nói rằng "Bài tập không được sử dụng"
CodyF

39

Ok, tệ của tôi.

Trong phần Project SDK, khi bạn thêm một, Android SDKbạn nên cung cấp Java SDKvà tất cả Android SDK của tôi sử dụng Java 8 làm SDK để nó tạo ra các tệp lớp có phiên bản sai ngay cả khi mức Dự án là như vậy 1.7(tôi không biết tại sao, tôi cho là rằng mọi thứ đã được lựa chọn theo cấp độ Dự án).

Bây giờ tôi đã thay đổi SDK ( java version "1.x.0"phần.)

nhập mô tả hình ảnh ở đây

và nó có vẻ biên dịch tốt.

Lý do mà làm việc trước ngày hôm nay là vì SDK của tôi đã 1.8và khôngAndroid API x


tôi có cùng một vấn đề. Tôi nên thay đổi điều này ở đâu. Cảm ơn
rupesh

1
Khi bạn thêm Android SDK, bạn nên chỉ định SDK mà bạn tham khảo ... (Trong trường hợp của tôi, tôi đã chọn Java 7 vì tôi đang sử dụng phiên bản này) Nhưng nó cũng tùy thuộc vào trường hợp của bạn. Tìm kiếm trực tuyến cho các lỗi khác có cùng tên, bạn sẽ tìm thấy rất nhiều thông tin
Marco Acierno

bạn đang nói về màn hình tùy chọn ??
rupesh

3
Mở cửa sổ cấu trúc Dự án> Chọn ở đâu với thông báo "SDK dự án" chọn SDK bạn cần (mã của bạn hoặc phiên bản SDK được sử dụng để biên dịch lib bên ngoài). Nếu bạn gặp sự cố tương tự của tôi, hãy kiểm tra dòng SDK Android của bạn và nhấp vào "Chỉnh sửa". Bạn sẽ được chuyển đến một bảng điều khiển, nơi bạn có Java SDK, chọn 1,7 (hoặc phiên bản bạn cần phải biên dịch)
Marco Acierno

2
Đã khắc phục tình trạng tương tự bằng cách đi tới Cài đặt mô-đun và chỉnh sửa vị trí JDK thành thư mục chính nơi cài đặt Java 7 jre
zztonedefzz

27

Trong trường hợp mọi người thấy câu trả lời của @Marco Acierno hơi không rõ ràng, giải pháp là đảm bảo bạn đang xây dựng bằng Java 7 chứ không phải phiên bản cao hơn.

Đối với Android Studio, hãy thay đổi File -> Project Structure -> SDK Location -> JDK Locationthành jdk1.7.x. Đối với dòng lệnh, hãy đảm bảo java -versionkết quả đầu ra java version "1.7.x".


Tôi đang sử dụng IntelliJ IDEA nên trong trường hợp của tôi, tôi phải đặt Java SDK chính xác khi thêm Android SDK ... (bạn không thể chỉ chọn Java 1.x trong Mô-đun Android nếu không nó sẽ không thấy các lớp Android)
Marco Acierno

15
Tại sao chúng ta không thể sử dụng java 8?
Sujay


3

thay đổi tất cả phiên bản java mô-đun của bạn thành java 1.7 trong mọi tệp build.grade.

trong plugin là thư viện và ứng dụng

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

và trong java

sourceCompatibility= 1.7
targetCompatibility= 1.7

Đây là điều duy nhất tôi cần làm. Cảm ơn
Chisko

2

Sự cố này xảy ra khi bạn sử dụng .jartệp không sử dụng bất kỳ tính năng nào của Java 6 trở lên nhưng được tạo bằng Java 6 trở lên.

Nếu bạn đã tạo .jartệp đó thì bạn không cần thay đổi bất kỳ điều gì trong Gradlehoặc ProGuardhoặc Compiler Version. Giải pháp rất đơn giản, chỉ cần xây dựng .jarlại tệp đó nhưng sử dụng Java 5 trở xuống .

Thêm chi tiết .


trong trường hợp của tôi, đó là tệp .aar. Tôi nên làm gì?
GvSharma

1

Tôi đã gặp sự cố tương tự, tôi đã giải quyết nó bằng cách nâng cấp proguard của mình. lấy phiên bản proguard của bạn bằng lệnh này

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

tải tệp progaurd.jar mới nhất từ ​​đây ( http://proguard.sourceforge.net )

thay thế android-sdks / tools / proguard / lib / proguard.jar hiện có bằng tệp .jar mới.

Hy vọng rằng điều này sẽ giúp bạn. Nếu bạn đang sử dụng java 8 thì bạn nên nâng cấp lên proguard 5.x coz proguard 4.x không hỗ trợ java 8.


@RookieGuy hãy thử đặt phiên bản java trở lại 1.7, điều đó cũng phù hợp với tôi.
spaceMonkey

Cảm ơn gợi ý, tôi đã phải biên dịch lại các thư viện được bao gồm với các phụ thuộc bắc cầu , đã viết nó lên đây uc-mobileapps.com/index.html%3Fp=509.html để tham khảo, vì các phiên bản đã thay đổi khá nhiều
RookieGuy

1

đã gặp sự cố tương tự khi tôi cố gắng thêm thư viện tự tạo từ netbeans vào android studio. đặt khả năng tương thích nguồn và đích trong android studio và định dạng nguồn / nhị phân trong netbeans (cả hai!) sang java 1.7 đã giải quyết được vấn đề.

trong studio android:

Cấu trúc dự án -> Mô-đun / Ứng dụng -> Quyền hạn -> Nguồn- và Mục tiêu đến 1.7

trong netbeans:

Tệp -> Thuộc tính dự án -> Nguồn -> Nguồn / Định dạng nhị phân thành 1.7

sau đó dọn dẹp và xây dựng projekt netbeans của bạn và sao chép .jar từ "NBProj / dist" sang "app / libs"


0

chia sẻ cách giải quyết của trường hợp chỉ cài Java8 thì chỉ cần đặt Java compiler level là 1.7 rồi build lại dự án là được.


0

Tôi gặp lỗi khi sử dụng thư viện của bên thứ ba. Theo câu hỏi đã đề cập ở trên, cần phải thay thế thư viện theo thông báo theo dõi ngăn xếp ở trên:

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

với phiên bản thích hợp.

Tương ứng với câu hỏi, bananaquery.jarsẽ được thay thế bằng phiên bản tương thích với Java.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.