2015-10-10 27 views
6

Chạy ProGuard trong dự án Android Studio của tôi, tôi nhận được cảnh báo như thế này:ProGuard Android: không thể tìm thấy tham chiếu lớp

Warning: com.google.common.collect.Maps: can't find referenced class javax.annotation.Nullable 

tôi có thể giải quyết việc này với một trong những biến thể này:

-keep class com.google.common.collect.** { *; } 
-dontwarn com.google.common.collect.** 
-keep class javax.annotation.** { *; } 
-dontwarn javax.annotation.** 

Cách tốt nhất để giải quyết cảnh báo trên là gì? Sự khác nhau giữa biến thể 1. và 2. là gì?

+0

Hiện file 'build.gradle' của bạn –

Trả lời

6

Đây là thông báo lỗi phổ biến nhất của "nhiều thư viện của bên thứ ba được biên dịch trước đề cập đến các thư viện khác không thực sự được sử dụng và do đó không có. Điều này hoạt động tốt trong gỡ lỗi xây dựng, nhưng trong bản phát hành, ProGuard dự kiến tất cả các thư viện, do đó, nó có thể thực hiện một phân tích tĩnh thích hợp. "

Từ: http://proguard.sourceforge.net/index.html#manual/examples.html

Vì vậy, javax.annotation.Nullable này có thể không có mặt ở đó trong dự án của bạn, nhưng các thư viện bạn đang sử dụng có một số lớp học đang trong nội bộ giới thiệu cho họ.

Tuy nhiên, bạn có thể tránh các cảnh báo này theo số -dontwarn javax.annotation.** hoặc --dontwarn com.google.common.collect.**. Nhưng tôi không nghĩ rằng -keep class javax.annotation.** { *; } và trông vô lý.

Vì vậy, nếu bạn làm -keep class com.google.common.collect.** { *; }, bạn bỏ qua gói này từ tất cả 3 bước thực hiện Proguard (Thu hẹp, tối ưu hóa và làm mờ) có ý nghĩa theo sự hiểu biết của tôi.

1

Đừng quên để thêm gói

-keep class com.package_name.** { *; } 
0

Sử dụng libs hỗ trợ Nullable thay vì:

import android.support.annotation.Nullable; 
Các vấn đề liên quan