[Android] Hỏi về release qua progurad
Mình đang có 1 thư viện lib.jar. (Với package là com.abc) import vào project Android
Hiện mình check thấy ở trong lib đấy có class A import class B từ 1 package khác ko có sẵn (com.xyz)
Điều lạ là khi chaỵ debug vẫn ok (Có thể class A ấy ko đc dùng đến), nhưng khi release qua progurad thì nó lại báo lỗi can't find referenced class com.xyz.B
Có ai support mình với đc ko ạ Thanks
1 CÂU TRẢ LỜI
Trường hợp của bạn khá khó để biêt chính xác lý do đến từ đâu, nhưng mình có chút suggestion để bạn thử nhé.
Phân tích
Điều lạ là khi chaỵ debug vẫn ok (Có thể class A ấy ko đc dùng đến), nhưng khi release qua progurad thì nó lại báo lỗi can't find referenced class com.xyz.B
Cái này thì không có gi lạ cả, vì bạn config proguard shrink code khi release mà thôi, debug thì không xài proguard nên nó sẽ không warning.
can't find referenced class com.xyz.B
Lỗi này là một dạng warning của proguard trong một số case. Chẳng hạn như class com.xyz.B
là một phần của java runtime, là file rt.jar
mà không chứa trong android runtime, đc đóng gói thành android.jar
, do đó proguard sẽ warning về case này. Có khá nhiều trường hợp tương tự như thế này, ví dụ như java 8 Stream
sẽ không fully support trong Android.
Cách giải quyết:
Thêm dòng này vào file config proguard
-dontwarn com.xyz.**
hoặc
-dontwarn com.xyz.B
Chú ý
Đừng vội bypass bằng cách thêm -dontwarn
nếu bạn thực sự chưa hiểu rõ về library kia. Ví dụ, một số lib đc viết để chạy trên JRT, chẳng hạn như version 8, và trong lib đó sử dụng một số func trong java 8 ví dụ như Stream
, không được support trong các version Android cũ. Nếu bạn bypass warning từ proguard, app có khả năng crash trên các thiết bị không được support, do đó bạn nên cân nhắc kỹ hoặc chạy test trên các thiết bị thấp để make sure app chạy đúng theo mong muốn
Happy coding~~