2012-03-20 29 views
6

Tôi có một dự án sử dụng hai thư viện Android độc lập. Mỗi người trong số họ chứa gói hỗ trợ Android, do đó kiến ​​xây dựng không thành công trên bước 'dex':Hai thư viện Android trùng lặp với cùng một lọ - Lỗi xây dựng Ant

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
    [dx] java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; 
    [dx]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    [dx]  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
    [dx]  at com.android.dx.command.dexer.Main.processClass(Main.java:486) 
    [dx]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455) 
    [dx]  at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
    [dx]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
    [dx]  at com.android.dx.command.dexer.Main.processOne(Main.java:418) 
    [dx]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) 
    [dx]  at com.android.dx.command.dexer.Main.run(Main.java:206) 
    [dx]  at com.android.dx.command.dexer.Main.main(Main.java:174) 
    [dx]  at com.android.dx.command.Main.main(Main.java:95) 
    [dx] 1 error; aborting 

Tôi nên làm gì?

Tôi sẽ di chuyển một trong các tệp jar này ra khỏi thư mục libs trong mục tiêu -post-compile. Và sau đó di chuyển nó trở lại sau khi bước dex kết thúc. Đề xuất của bạn là gì?

UPDATE: tôi đã cố gắng để di chuyển các gói hỗ trợ ra khỏi một trong những thư viện trong -post-biên dịch mục tiêu nhưng nó vẫn thất bại vì một lý do khác. Bình này đã được đưa vào đường dẫn được xử lý bởi tác vụ dex. Và nhiệm vụ dex không thể mở lọ đã loại bỏ.

+0

bạn có thể có một thư viện phụ thuộc vào người kia, và thêm các gói hỗ trợ chỉ có – njzk2

+0

Tôi cũng nghĩ về điều đó, nhưng muốn sử dụng chúng một cách độc lập –

+0

Hình như nó sẽ được sửa trong r17 của các công cụ Android. http://code.google.com/p/android/issues/detail?id=21169 –

Trả lời

1

Bạn nên tránh việc cùng một thư viện trong cả hai. Bạn không thể loại trừ một gói hỗ trợ cụ thể bằng cách sử dụng các ký tự đại diện từ một trong các thư viện tại thời gian biên dịch của dự án của bạn? Bằng cách lọc nó ra với Proguard, ví dụ:

-libraryjars ${android.libraryjars}(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class,!META-INF/MANIFEST.MF,!META-INF/NOTICE.txt,!META-INF/LICENSE.txt) 
Các vấn đề liên quan