2011-12-27 36 views
11

Tôi đã bao gồm tệp jar trong dự án Android của mình như được giải thích trong How can I use external JARs in an Android project?. Với cả hai phương pháp được mô tả bởi MannyNS và Vinayak B. trong bài này tôi nhận được lỗi "Không thể tìm thấy lớp 'test.libraryCalc.Calc" là lớp được cung cấp bởi thư viện. Các mã sau minh họa các vấn đề:Android, không tìm thấy lớp học từ tệp jar đã nhập

Ví dụ lớp cung cấp thông qua thư viện: Calc.java

package test.libraryCalc; 

public class Calc { 
    public int add(int a, int b){ 
     return a + b; 
    } 
} 

LibraryTestActivity.java

package test.library; 

import test.libraryCalc.Calc; 
import android.app.Activity; 
import android.os.Bundle; 

public class LibraryTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Calc calc = new Calc(); 
     int c = calc.add(3, 4); 
    } 
} 

tôi xuất khẩu các tập tin jar chứa Calc.java để LibraryTest \ libs \ calc.jar

enter image description here

và thêm một tham chiếu đến nó bằng cách sử dụng "Add lọ ..." nút trong Java Build Path của LibraryTest

enter image description here Thư viện xuất hiện trong các thư viện tham chiếu trong LibraryTest

enter image description here

LibraryTest không có vấn đề về xây dựng nhưng khi chạy nó trên trình mô phỏng, những điều sau đây được hiển thị trong LogCat:

12-27 14:01:33.965: E/dalvikvm(747): Could not find class 'test.libraryCalc.Calc',    referenced from method test.library.LibraryTestActivity.onCreate 
12-27 14:01:33.965: W/dalvikvm(747): VFY: unable to resolve new-instance 13 (Ltest/libraryCalc/Calc;) in Ltest/library/LibraryTestActivity; 
12-27 14:01:33.995: D/dalvikvm(747): VFY: replacing opcode 0x22 at 0x0008 
12-27 14:01:33.995: D/dalvikvm(747): VFY: dead code 0x000a-0013 in Ltest/library/LibraryTestActivity;.onCreate (Landroid/os/Bundle;)V 
12-27 14:01:34.065: D/AndroidRuntime(747): Shutting down VM 
12-27 14:01:34.065: W/dalvikvm(747): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-27 14:01:34.075: E/AndroidRuntime(747): FATAL EXCEPTION: main 
12-27 14:01:34.075: E/AndroidRuntime(747): java.lang.NoClassDefFoundError: test.libraryCalc.Calc 
12-27 14:01:34.075: E/AndroidRuntime(747): at  test.library.LibraryTestActivity.onCreate(LibraryTestActivity.java:14) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.os.Looper.loop(Looper.java:123) 
12-27 14:01:34.075: E/AndroidRuntime(747): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-27 14:01:34.075: E/AndroidRuntime(747): at java.lang.reflect.Method.invokeNative(Native Method) 
12-27 14:01:34.075: E/AndroidRuntime(747): at java.lang.reflect.Method.invoke(Method.java:521) 
12-27 14:01:34.075: E/AndroidRuntime(747): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-27 14:01:34.075: E/AndroidRuntime(747): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-27 14:01:34.075: E/AndroidRuntime(747): at dalvik.system.NativeStart.main(Native Method) 
12-27 14:06:34.170: I/Process(747): Sending signal. PID: 747 SIG: 9 

Cần phải làm gì để làm việc này ? Cảm ơn tất cả các đề xuất.

+0

Nếu bạn cho rằng ảnh hữu ích và bạn chưa có quyền, vui lòng tải chúng lên hình ảnh bên ngoài đơn giản và thêm liên kết thay thế. Thông thường, người dùng có quyền chỉnh sửa và ảnh sẽ dừng lại và nhúng chúng nếu anh ta cho rằng điều này là phù hợp. Chỉnh sửa: Ok upvoted hơn 10. Bây giờ bạn có thể gửi chúng trên của riêng bạn. :) –

+0

Ngoài ra hãy chắc chắn rằng bình bạn đang thêm được biên dịch bằng Java 6 hoặc cũ hơn. Android KHÔNG hỗ trợ Java 7 kể từ khi đăng bài này (tháng 7 năm 2012) –

Trả lời

9

Tôi nghĩ rằng vấn đề là bạn cố thêm bình chứa mã Android. Bạn không thể làm điều này. Để bao gồm mã Android, bạn nên tạo thư viện Android. Đơn giản chỉ cần tạo một dự án Android và trong phần Android thuộc tính dự án thiết lập rằng đây là dự án thư viện. Sau đó bạn sẽ có thể thêm thư viện này vào các dự án của mình. Để biết thêm thông tin về thư viện Android, bạn có thể đọc here.

Cập nhật: Tôi đã thử mã của bạn ngay bây giờ. Nó hoạt động trong trường hợp của tôi. Sự khác biệt duy nhất mà tôi đã thực hiện là trong quá trình xuất Jar Tôi đã kiểm tra các tệp nguồn và nguồn Java xuất. Hy vọng điều này sẽ giúp bạn. Thử nó!

+0

Cảm ơn Yury vì câu trả lời của bạn. Tại sao bạn nghĩ rằng có mã Android trong bình? Tôi đã tạo dự án bằng cách sử dụng trình thủ thuật "Java Project" trong Eclipse. – Lorenz

+1

Vì LibraryTestActivity mở rộng Hoạt động) – Yury

+0

OK, tôi thấy nơi tôi đã tạo ra một số nhầm lẫn. LibraryTest là ứng dụng chính sử dụng lớp Calc từ thư viện LibraryCalc. – Lorenz

Các vấn đề liên quan