2011-11-23 22 views
5

Tôi cần giới thiệu gần đây ProGuard trên Android vì các vấn đề với Scala trên Android. Tôi cần ProGuard cho tính năng thu nhỏ của nó, loại bỏ các lớp được cho là không sử dụng. Tôi rất quan tâm đến tác động của việc loại bỏ các lớp học về khả năng kiểm tra.Với ProGuard, tác động đến chiến lược thử nghiệm là gì?

Khi viết tắt, tôi viết các bài kiểm tra đơn vị chạy trên máy chủ và kiểm tra chấp nhận chạy ứng dụng được tích hợp đầy đủ trên nền tảng Android.

Thông thường, tôi sẽ cảm thấy thoải mái với phạm vi phủ sóng thử nghiệm đơn vị tương đối hoàn chỉnh và phạm vi kiểm tra chấp nhận điểm chấp nhận. Tuy nhiên, cho rằng trong mã của tôi, tôi sử dụng tiêm phụ thuộc Guice rất nhiều, cho đến nay nó là kinh nghiệm của tôi rằng ProGuard loại bỏ mã theo cách mà tôi khó dự đoán. Bởi vì điều này rất có thể khiến tôi giới thiệu lỗi.

Điều này khiến tôi tin rằng tôi cần phải viết các bài kiểm tra chấp nhận/nền tảng để đạt được mức độ phù hợp đầy đủ vì tại bất kỳ thời điểm nào, có thể có một lớp bị thiếu.

Những người khác có trải nghiệm này không? Nếu vậy, chiến lược thử nghiệm của bạn là gì? Hoặc với kinh nghiệm, bạn có tự tin hơn rằng các lớp mà ProGuard đang loại bỏ thực sự không cần thiết?

Trả lời

2

ProGuard sẽ không phá vỡ ứng dụng của bạn cho đến khi nó cố gắng sử dụng phản ánh hay Class # forName trên lớp loại bỏ và/hoặc thành viên obfuscated.

Từ kinh nghiệm của tôi (với Scala làm phiền trên Android quá) nó thực sự dễ dàng để phát hiện các vấn đề gây ra bởi ProGuard cho ứng dụng Android của bạn bằng cách sử dụng các bài kiểm tra khói đơn giản. Bạn biết thư viện nào bạn đưa vào dự án của mình. Nếu một số người trong số họ sử dụng phản chiếu hoặc Class # forName - thực hiện kiểm tra khói trên chúng. Sau đó loại trừ các lớp/thành viên cần thiết khỏi cấu hình ProGuard.

Hãy nhớ rằng bạn cũng có thể tự động hóa thử nghiệm dự án bị làm mờ của mình bằng cách sử dụng ActivityInstrumentationTestCase2 và trình mô phỏng. Nếu bạn định sử dụng ProGuard trên dự án của mình, hãy luôn thực hiện kiểm tra thiết bị trên APK bị làm mờ.

Kết luận - không sợ. Các vấn đề liên quan đến ProGuard là thuyết tương đối dễ phát hiện.

+0

điều này thường được báo trước, nhưng hãy cẩn thận về sự không nhất quán kỳ lạ khi sử dụng thư viện crappy, như SDK Android của Android và những thứ tương tự. Nó thường phá vỡ mọi thứ. –

2

Chúng tôi đã thử nghiệm cả hai đơn vị và "hoàn toàn" thử nghiệm ứng dụng ProGuard-ed của chúng tôi trong một thời gian ngắn và chúng tôi không gặp phải sự cố "thực". Vấn đề duy nhất chúng tôi gặp phải là khi chúng tôi sử dụng một số phương pháp thư viện trong các thử nghiệm không được sử dụng trong ứng dụng chính; trong những trường hợp này ProGuard sẽ xóa mã khỏi các thư viện và chúng tôi sẽ phải thêm thủ công các phương thức cụ thể vào proguard.cfg.

Oh, và chúng tôi cũng sử dụng Guice :)

+0

Từ những gì tôi đã thấy, nhiều khách hàng của Roboguice không sử dụng Guice một cách rõ ràng. Bạn có chủ yếu sử dụng nguồn tài nguyên Android của Roboguice hay bạn đang thực hiện các liên kết rộng rãi với mô-đun Guice không tầm thường? –

+1

Chúng tôi thực hiện khá nhiều thao tác không phải là roboguice. Tôi không chắc chắn nếu điều đó sẽ đủ điều kiện là "ràng buộc rộng rãi" và "không tầm thường" mặc dù. Ấn tượng tổng thể của tôi là bạn thực sự không nên lo lắng, ProGuard nó làm công việc của mình khá tốt. – dmon

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