16

Tôi đang sử dụng Android Studio mới, tôi đang tìm cách sử dụng thư viện hỗ trợ từ nhiều dự án. Về cơ bản tôi có một dự án sử dụng ActionBarSherlock dự án này yêu cầu thư viện hỗ trợ. Vì vậy, tôi đã thêm một tham chiếu như trong this question.Sử dụng thư viện hỗ trợ trong các dự án và thư viện android (Android Studio)

Bây giờ tôi có vấn đề là dự án chính của tôi cũng sử dụng thư viện hỗ trợ để tôi có nó bao gồm hai lần theo một cách nào đó. Nếu tôi xóa thư viện khỏi một trong hai dự án, tôi sẽ nhận được lỗi rằng một số lớp liên quan đến thư viện hỗ trợ không xác định rõ ràng đối với tôi, nhưng nếu tôi có tham chiếu trong cả hai dự án, tôi sẽ gặp lỗi này:

Android Dex: [ProjectName] UNEXPECTED TOP-LEVEL EXCEPTION: 
Android Dex: [ProjectName] java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ShareCompat$ShareCompatImplJB; 
Android Dex: [ProjectName] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
Android Dex: [ProjectName] at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processClass(Main.java:490) 
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) 
... 

Bất kỳ ý tưởng nào về cách sửa lỗi này?

+0

tôi đoán bạn phải tháo bình từ dự án du lịch và cố gắng . – Raghunandan

+0

@Raghunandan bạn có lưu ý điều này: * "[...] Nếu tôi xóa thư viện khỏi một trong hai dự án, tôi sẽ gặp lỗi rằng một số lớp liên quan đến thư viện hỗ trợ không xác định [...]" * – rekire

Trả lời

28

Tôi đã sửa lỗi này bằng cách đi vào File > Project Structure... và chọn Modules rồi nhấp vào tab Dependencies của mô-đun. Sau đó, bên cạnh thư viện, tôi đã thay đổi phạm vi từ Compile thành Provided.

Điều này có nghĩa là mô-đun vẫn có thể sử dụng, nhưng nó không đạt được biên dịch, vì tôi cho rằng bạn đã sử dụng JAR đó trong dự án chính của bạn.

Hy vọng điều này sẽ hữu ích!

+0

Câu trả lời hay - chỉ hoạt động :) – Ron

+1

Có cách nào để xác định điều này theo cách thủ công trong build.gradle không? – nhaarman

+4

Đã cung cấp không còn là tùy chọn trong Android Studio 0.4.0. Có cách nào để xác định hành vi này trong tệp Gradle không? – Greg

0

Việc sử dụng này có phải là một dự án Eclipse không? Nếu vậy hãy thử đi vào Eclipse, dọn dẹp dự án, thoát ra, xây dựng lại trong IntelliJ. Tôi tin rằng đây là một vấn đề nhà nước, không phải là một vấn đề cấu hình.

+0

Tôi cần một giờ để sửa lỗi nhật thực có dây. Tuy nhiên điều này không hoạt động. – rekire

1

Tôi đã gặp phải sự cố tương tự. Chọn actionbarsherlock trong tab/thanh dự án/bất kỳ thứ gì (ở bên trái để bạn có thể thấy cây dự án). nhấn F4 để mở cài đặt mô-đun.
Đảm bảo rằng bạn đang không sử dụng cùng một phụ thuộc hai lần trong bộ đệm hành động và dự án của bạn.
Cũng đảm bảo rằng bạn đang sử dụng phiên bản của thư viện hỗ trợ có trong android-studio sdk (android-studio/sdk/extras/android).

Cuối cùng, nếu bạn giống như tôi, hãy chắc chắn rằng bạn đã không vô tình làm cho actionbarsherlock phụ thuộc vào chính nó, do đó tải thư viện hai lần R THNG cách đó! >. <

Hãy xem những hình ảnh này cho thấy sở thích của mô-đun của tôi: http://imgur.com/a/JupWp Actionbar Sherlock enter image description here

Ngoài ra, đừng quên để đảm bảo libs không được che giấu bất kỳ của những người cùng!

0

Thay vì nhập khẩu thư viện hỗ trợ android như jar, tôi đã thay đổi các thư viện (trong trường hợp facebook sdk của tôi) phụ thuộc vào build.gradle tới:

dependencies { 
    compile 'com.android.support:support-v4:13.0.0' 
} 
Các vấn đề liên quan