2012-07-13 39 views
5

Sau khi cập nhật lên ADT 20, tôi không thể xuất thành công bất kỳ dự án Android nào của mình nữa. Tôi nhận được:Lỗi bảo vệ khi xuất dự án Android sau khi cập nhật lên ADT 20

Proguard returned with error code 1. See console 

Trong giao diện điều khiển tôi nhận được tấn của can't find referenced class cảnh báo và đôi khi can't find superclass or interface cảnh báo. Vào cuối cảnh báo, tôi nhận được thông báo như sau:

You should check if you need to specify additional program jars. 
Warning: there were 199 unresolved references to classes or interfaces. 
    You may need to specify additional library jars (using '-libraryjars'). 
java.io.IOException: Please correct the above warnings first. 
at proguard.Initializer.execute(Initializer.java:321) 
at proguard.ProGuard.initialize(ProGuard.java:211) 
at proguard.ProGuard.execute(ProGuard.java:86) 
at proguard.ProGuard.main(ProGuard.java:492) 

Mỗi khi tôi cố gắng xây dựng, tôi nhận được nhiều cảnh báo khác nhau (không nhất quán). Ngoài ra, khi tôi thực hiện sạch trước khi xuất, quá trình xuất hoàn tất mà không tạo ra bất kỳ cảnh báo nào, nhưng kết quả là các lỗi bị lỗi khi khởi chạy thường là do ClassNotFoundException.

My proguard-project.txt bao gồm các quy tắc -keep class cần thiết cho Thư viện hỗ trợ Android và ActionBarSherlock.

Tôi không gặp vấn đề gì khi xây dựng dự án này trước ngày 20 tháng 10. Tôi thậm chí đã cố gắng xây dựng bản phát hành cuối cùng của tôi (mà rõ ràng là được xây dựng tốt khi tôi phát hành), nhưng tôi nhận được cảnh báo proguard và thất bại.

Tôi đã thử thêm -libraryjars và/hoặc -dontwarn quy tắc như nhiều câu hỏi SO khác được đề xuất, nhưng không có kết quả. Đôi khi nó sẽ xây dựng thành công, nhưng APK đã tạo ra sự cố khi khởi chạy.

Mọi đề xuất?

+0

Tôi cũng đã thử cập nhật từ trình bảo vệ 4.7 (mà đi kèm với các công cụ r20) để bảo vệ 4.8, nhưng điều đó dường như không tạo nên sự khác biệt. – ashughes

+0

Cuối cùng tôi đã có thể xây dựng thành công và chạy APK bị che khuất sau khi thêm các quy tắc bảo vệ đã bị xóa khỏi 'proguard-android.txt' trong công cụ Android r20 vào' proguard-project.txt' của tôi. Chờ đợi để xác nhận đây là một lỗi trước khi đăng câu trả lời: http://code.google.com/p/android/issues/detail?id=35107 – ashughes

Trả lời

5

Có một lỗi trong AAPT nơi mà nó sẽ chỉ xử lý

<fragment android:name"..." /> 

nhưng không

<fragment class="..." /> 

Chúng tôi sẽ sửa chữa AAPT nhưng trong thời gian chờ đợi, bạn có thể sử dụng thuộc tính khác và nó sẽ hoạt động.

+1

Một sửa chữa để aapt vừa được phát hành. Đó là trong nền tảng-công cụ r14. –

+0

Đã xóa bộ nhớ cache của Trình quản lý SDK của tôi theo đề xuất của Tor Norbye ("Lỗi bộ nhớ cache SDK Manager") trước khi các công cụ nền tảng r14 hiển thị. – ashughes

0

Được biết, có sự cố với bản cập nhật gần đây của plugin Eclipse trong ADT, không biên dịch lại đúng mã nguồn. Trong trường hợp đó, ProGuard sẽ in ra các cảnh báo về các lớp chương trình của bạn (trái ngược với các lớp thư viện). Bạn nên kiểm tra xem việc xuất (và ứng dụng kết quả) có hoạt động không có ProGuard hay không. Bạn cũng nên kiểm tra xem Ant build có hoạt động không ("ant release"). Đó có thể là một cách giải quyết.

+0

Không có vấn đề gì nếu tôi tắt trình bảo vệ. Tôi sẽ xem xét xây dựng trực tiếp với kiến. Bạn đã thấy các báo cáo về sự cố với bản cập nhật ADT mới nhất ở đâu? Tôi đã gặp khó khăn khi tìm kiếm bất cứ điều gì cho r20, chỉ có các phiên bản trước đó mà tôi không có vấn đề với. – ashughes

+0

Tôi thiết lập dự án để xây dựng Ant và tôi không nhận được bất kỳ cảnh báo hoặc lỗi nào khi tạo bản phát hành 'ant', tuy nhiên, APK kết quả bị lỗi khi khởi chạy (' ClassNotFoundException' trên lớp mở rộng thư viện hỗ trợ Fragment). Như tôi đã nói trong câu hỏi, tôi có các quy tắc '-keep class' thích hợp trong' proguard-project.txt' của mình cho thư viện hỗ trợ Android và ActionBarSherlock (dưới cùng của http://abs.io/faq.html) và tôi đã không có bất kỳ vấn đề với proguard loại bỏ hoặc obfuscating các lớp học trước khi ... bất kỳ ý tưởng những gì tôi có thể bị mất tích (hoặc có thể những gì các công cụ có thể được làm)? – ashughes

4

Trong ADT 20, chúng tôi sử dụng tính năng aapt (xem cờ -G) có thể tạo tệp bảo vệ chứa các quy tắc cho chính xác chế độ xem tùy chỉnh được mã của bạn sử dụng.

Tệp cấu hình bảo vệ cũ sẽ giữ tất cả lượt xem. Khi bạn sử dụng một dự án thư viện như thư viện tương thích, nơi bạn có thể chỉ sử dụng một tập con nhỏ của mã sẵn có, điều này có thể kết thúc bao gồm rất nhiều thứ bạn không cần. Bằng cách loại bỏ quy tắc lưu giữ chung và thêm tệp lưu giữ mới dựa trên ứng dụng của bạn, tệp .apks của bạn sẽ nhỏ hơn vì rất nhiều nội dung không sử dụng có thể bị xóa.

Một khu vực mà điều này có thể xảy ra là nếu bạn cập nhật lên Công cụ 20 (vì vậy bạn có tệp proguard-android.txt nhỏ hơn mới) và bạn tiếp tục sử dụng ADT 18. Đảm bảo sử dụng ADT 20, vì nó sẽ thêm vào không chỉ các tập tin proguard được chỉ định trong cài đặt project.properties của bạn, nhưng tệp proguard được tạo ra cũng liệt kê các tệp giữ từ aapt -G. Tôi tin rằng việc xây dựng kiến ​​cũng sẽ sử dụng tính năng -G.

(Lưu ý - xem http://code.google.com/p/android/issues/detail?id=35107 cho bất kỳ followups về vấn đề này)

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