2012-04-02 30 views
5

Ngay summerized, cấu trúc dự án của tôi là như sau:
- MộtB là android lib -projects, nơi B phụ thuộc vào Một
- C (dự án android bình thường) phụ thuộc vào B
- T được thử nghiệm dự án của CKhông tự động Android UI-Các xét nghiệm trên Jenkins-Server do phụ thuộc lib dự án phức tạp của dự án chính (s)

Tôi có tương ứng hai dự án trên máy chủ Jenkins của tôi, một cho C và một cho T, có kịch bản riêng của họ cho xây dựng, sử dụng lệnh thực sự chỉ android và kiến. Vì vậy, không có vấn đề với việc xây dựng C, nhưng tôi không thể xây dựng công trình của T.

"Công việc" nên có nghĩa là, tùy thuộc vào tập lệnh, nó không biên dịch hoặc thất bại khi chạy vì một số lớp bị thiếu, thực sự không thể hoặc không vượt qua giai đoạn dexing vì thêm các bản sao.

Vì vậy, rõ ràng, có điều gì đó sai với các phụ thuộc, nhưng điều thú vị là nó hoạt động rất tốt đẹp trên máy cục bộ với eclipse & trên trình giả lập.

Vì vậy, đây là một ví dụ mã vỏ kịch bản, mà thực sự nên làm việc và tạo ra một gói ứng dụng-file:

cd project-test 
android update test-project -m ../projectC -p . 
ant clean debug 

Điều này làm tiếc rằng một số các lớp học từ từ B, rằng tôi cũng sẽ kiểm tra, không thể tìm được từ trình biên dịch java và tôi nhận được luôn lỗi như thế này:

... 
[javac] Compiling 14 source files to /home/mehmed/git/project/test-project/bin/classes 
[javac] SomeActivityTest.java:8: package com.mydomain.portal.android.project.activity does not exist 
[javac] import com.mydomain.portal.android.project.activity.SomeClass1; 
[javac]              ^
[javac] SomeActivityTest.java:9: package com.mydomain.portal.android.project.data does not exist 
[javac] import com.mydomain.portal.android.project.data.SomeClass2; 
[javac]             ^
[javac] SomeActivityTest.java:10: package com.project.portal.android.project.util does not exist 
[javac] import com.mydomain.portal.android.project.util.SomeClass3; 
[javac]             ^
... 

tôi đã thử gần như mọi thứ có thể để khắc phục điều đó, thậm chí bằng tay chỉnh sửa các tập tin project.properties và bao gồm cả chỉ B hoặc B và C cùng lúc như lib dự án như thế này:

cd project-test 
android update test-project -m ../projectC -p . 
echo "android.library.reference.1=../projectB" >> project.properties 
# or even also projectA: 
echo "android.library.reference.2=../projectA" >> project.properties 
ant clean debug 

mà kết quả lần này trong Dexing lỗi vì trùng lặp thêm các lớp từ lib dự án.

Có ai có ý tưởng về việc sửa lỗi này không? Nhờ sự giúp đỡ trước!

Trả lời

1

Trong dự án thử nghiệm của bạn T, nếu bạn có SomeActivityTest rằng rõ ràng nhập khẩu/sử dụng một số gói/lớp từ Dự án Thư viện B và/hoặc C, bạn đã thêm Dự án thư viện như một sự phụ thuộc của thử nghiệm dự án, vì gói/lớp được tham chiếu là bắt buộc tại thời gian xây dựng dự án. nếu bạn không, bạn sẽ nhận được lỗi sau khi biên dịch bạn dự án thử nghiệm:

[javac] SomeActivityTest.java:8: package com.mydomain.portal.android.project.activity does not exist 
[javac] import com.mydomain.portal.android.project.activity.SomeClass1; 
[javac]              ^
[javac] SomeActivityTest.java:9: package com.mydomain.portal.android.project.data does not exist 

Nếu bạn thêm Dự án Thư viện như phụ thuộc vào cả hai dự án chính và dự án thử nghiệm, và sử dụng Ant build bạn kiểm tra dự án, nó gây ra các mục trùng lặp ở bước dexing.Eclipse Plugin ADT biết làm thế nào để hanlde tình huống này đúng cách, do đó bạn không nhận được rắc rối này khi xây dựng với Eclipse:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
[dx] java.lang.IllegalArgumentException: already added: Lcom/mydomain/...; 
[dx]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
[dx]  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 

Hiện nay, có một cách giải quyết khác (sửa chữa bẩn trong kịch bản kiến), hãy kiểm tra câu trả lời của tôi here cho chi tiết.

Lưu ý rằng bản phát hành SDK r17 mới nhất có nhiều sửa lỗi và cải tiến. Theo số changelog, nó tuyên bố rằng bây giờ SDK có thể xử lý các phụ thuộc trùng lặp thông minh hơn, mặc dù tôi vẫn chưa mệt mỏi với dự án thử nghiệm. Có lẽ bạn có thể cho nó một shot và xem nếu nó hoạt động. Hi vọng điêu nay co ich.

+0

cảm ơn câu trả lời, nó thực sự hữu ích tôi vừa thành công để sửa lỗi. tiếc là đã xuất hiện một lỗi khác. xin vui lòng xem phản ứng của tôi trên http://b.android.com/21720 –

1

Từ mô tả chung, điều này nghe như Android bug #21720 — nơi những thay đổi gần đây đối với hệ thống xây dựng Android có nghĩa là việc xây dựng các dự án đó trên dòng lệnh không hoạt động đúng.

Có một giải pháp thay thế tại số comments 16 and 17 mà bạn có thể thử.

+0

cảm ơn câu trả lời, nó thực sự hữu ích tôi vừa thành công để sửa lỗi. tiếc là đã xuất hiện một lỗi khác. vui lòng xem câu trả lời của tôi trên http://b.android.com/21720 –

+0

Bất cứ khi nào tôi gặp sự cố đó, đó là do tên gói hoặc tên người thử nghiệm sai, hoặc vì APK thử nghiệm chưa được cài đặt thành công (do thiếu chữ ký, chữ ký không khớp hoặc các điều kiện trong tệp kê khai ngăn không cho cài đặt này). –

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