2012-01-26 29 views
25

Tôi có hai Dự án Android 'A' và 'B'. 'B' phụ thuộc vào 'A' và là một Thư viện. Bất cứ khi nào tôi đang trong dự án 'B' và nhấn 'Khai báo mở' cho một tệp nguồn Java nằm trong 'A', Eclipse điều hướng đến tệp lớp thay vì tệp nguồn. Điều này tất nhiên có một số nhược điểm!'Khai báo mở' trong Eclipse điều hướng đến tệp lớp thay vì tệp nguồn cho Thư viện Android

Tôi đã xem xét đường dẫn xây dựng của dự án 'B' để xem thư viện được tham chiếu 'A' có đường dẫn chính xác đến dự án nguồn của nó hay không.

Bất kỳ ai biết cách khắc phục điều đó?

Sau đây là các classpath và project.properties file cho từng dự án:

PROJECTA classpath

<?xml version="1.0" encoding="UTF-8"?> 
    <classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="src" path="gen"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 
    <classpathentry kind="output" path="bin/classes"/> 
</classpath> 

PROJECTA project.properties

# This file is automatically generated by Android Tools. 
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! 
# 
# This file must be checked in Version Control Systems. 
# 
# To customize properties used by the Ant build system use, 
# "ant.properties", and override values to adapt the script to your 
# project structure. 

# Project target. 
target=android-8 
android.library=true 

ProjectB classpath

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="src" path="gen"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 
    <classpathentry kind="output" path="bin/classes"/> 
</classpath> 

ProjectB project.properties

# This file is automatically generated by Android Tools. 
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! 
# 
# This file must be checked in Version Control Systems. 
# 
# To customize properties used by the Ant build system use, 
# "ant.properties", and override values to adapt the script to your 
# project structure. 

# Project target. 
target=android-8 
android.library.reference.1=../ProjectA 

Trả lời

1

đoán đầu tiên của tôi sẽ được rằng bạn có một JAR với lớp Một trong nó trên con đường xây dựng B. Kiểm tra tab Thư viện. Bạn có thể chỉ cho chúng tôi các tệp .classpath và project.properties của bạn không?

+0

Tôi đã thêm các tệp được yêu cầu nhưng tôi nghĩ điều đó không giúp ích gì nhiều. – Andreas

+0

Các tập tin .classpath không hiển thị bất cứ điều gì trong số bình thường, vì vậy lý thuyết của tôi về việc có một JAR trên classpath không pan ra. Tôi sẽ thử xóa Project A dưới dạng phụ thuộc. Điều đó sẽ làm cho Project B xây dựng thất bại (nếu không, sử dụng Project> Clean). Sau đó, thêm dự án A trở lại làm phụ thuộc để xem điều đó có xóa mọi thứ không. Đây chỉ là nắm bắt tại ống hút, nhưng các plugin ADT dường như có một số lỗi kỳ lạ xung quanh xây dựng và phụ thuộc. –

19

Bạn có thể nhập dự án thư viện không chỉ như một Android Lib (đó là cách nó có nghĩa là để được thực hiện), mà còn như một dự án liên kết trong menu "Java Build Path" thông thường. Tiếp theo, hãy đảm bảo di chuyển phần nhập này lên trên cùng (ít nhất nhiều mục nhập "Dự án thư viện") trong tab "Đặt hàng và xuất".

Công trình này, nhưng nó là một hack và nó bẩn. Đây không phải là cách nó có nghĩa là để được thực hiện ... và khi bạn triển khai các ứng dụng cho điện thoại, nhật thực sẽ viết một thông báo lỗi trong giao diện điều khiển nói rằng một số apk không thể được tìm thấy ...

Tuy nhiên, tôi tìm thấy nó thuận tiện hơn khi liên kết đến tệp lớp.

Tôi không biết điều này đang xảy ra. Bạn bè của tôi trong văn phòng đang chạy cùng một cấu hình so với tôi, và họ không có vấn đề này, nhưng có vẻ như chúng tôi không phải là người duy nhất có vấn đề này: http://code.google.com/p/android/issues/detail?id=20731

+0

đây là bản sửa lỗi tôi đang tìm kiếm – Necronet

+1

mặc dù nó sẽ không hoạt động trong Juno – Necronet

+0

Điều này làm việc cho tôi ở Indigo. – Phanto

11

Tôi gặp vấn đề tương tự khi phiên bản của dự án thư viện A có trong "Properties> Java Build Path> Libraries", nhưng không có trong "Properties> Java Build Path> Projects".

bài toán đã được giải quyết sau khi tôi đã làm như sau:

  1. Remove "Dự án thư viện" từ "Properties> Java Build Path> Thư viện", mà đã được bổ sung bởi "Properties> Java Build Path> Libraries" (Tôi không chắc chắn nếu bước này là cần thiết, nhưng đây là những gì tôi đã làm).
  2. Thêm dự án A vào "Thuộc tính> Đường dẫn xây dựng Java> Dự án".
  3. Khởi động lại Eclipse (Indigo). Bằng cách nào đó Eclipse tái Dự án Thư viện trong "Properties> Java Build Path> Libraries"

Các classpath nên có những điều sau đây:

<classpathentry combineaccessrules="false" kind="src" path="/A"/> 

Thực ra điều hướng đến các tập tin lớp không phải là gây phiền nhiễu nhất, nhưng đột nhập các tệp lớp thay vì tệp java trong khi gỡ lỗi đã khiến tôi phát điên trước khi vấn đề này được giải quyết.

+0

Đây là giải pháp đầu tiên hữu ích cho tôi. Và nó hoạt động như một sự quyến rũ. Có thể nói nhật thực rằng nó nên đặt các thư viện vào tab dự án? – Naxos84

8

gì làm việc cho tôi: di chuyển các dự án lib lập theo thứ tự Xuất tab - ngay bên dưới /src/gen của dự án chính.

+1

Điều này có vẻ đúng. Tôi nghĩ rằng Android Dependencies chứa các jar của tất cả các thư viện. Vì vậy, bằng cách di chuyển các phụ thuộc Android xuống dưới cùng theo thứ tự và xuất, các tệp .java sẽ được tìm thấy trước các tệp .class cho dù 'Mở khai báo' hay đang gỡ lỗi. – Fracdroid

+0

Làm việc cho tôi. –

0

Giải pháp sau đây làm việc cho tôi:

Tới dự án thư viện android (trong trường hợp của bạn, nó là A) thiết lập -> Java xây dựng đường dẫn -> Trình tự, xuất khẩu, đảm bảo rằng các mục nhập đầu tiên là thư mục nguồn của thư viện (A). Sau đó làm sạch dự án thư viện và dự án đích. Bây giờ nó hoạt động tốt.

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