Xin chào Tôi đang viết một ứng dụng Android và tôi đã thiết lập Proguard để làm hỏng ứng dụng của tôi. Tuy nhiên, tôi sử dụng trình nạp lớp để tải động các tiện ích mở rộng khác nhau vào ứng dụng của mình. Vấn đề là chúng không tải đúng nếu tên của chúng được thay đổi. Làm thế nào để giữ Proguard khỏi làm xáo trộn tên lớp cụ thể?Proguard giữ tên lớp học?
Trả lời
Sử dụng -keepnames
tùy chọn trong proguard.cfg bạn
Tham khảo hướng dẫn https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:
-keepnames
class_specificationngắn cho
-keep,allowshrinking
class_specificationChỉ định các lớp học và các thành viên lớp mà tên cần được bảo tồn, nếu chúng 't loại bỏ trong giai đoạn thu hẹp. Ví dụ, bạn có thể muốn giữ tất cả các tên lớp của các lớp thực hiện giao diện Serializable, do đó mã được xử lý vẫn tương thích với bất kỳ lớp được tuần tự hóa ban đầu nào. Các lớp học không được sử dụng ở tất cả vẫn có thể được gỡ bỏ. Chỉ áp dụng khi làm xáo trộn.
Điều này sẽ giúp classnames nguyên vẹn:
-keepnames class com.somepackage.*
mũi Handy cho tất cả những ai không muốn ProGuard để thay đổi bất kỳ tên lớp:
# please KEEP ALL THE NAMES
-keepnames class ** { *; }
Bằng cách này bạn sẽ nhận được đống dấu vết có thể đọc được trong khi vẫn ném ra những thứ bạn không cần. :-)
'' '-dontobfuscate''' là đúng cách để vô hiệu hóa obfuscation. –
Sai đường. Nó tốt hơn để tắt obfuscation với cấu hình này: "-dontobfuscate/n -optimizations! Code/alloc/variable" – oxied
Vì vậy, tôi gõ: -keepnames com.randompackage.lol.ClassName – Nik
Ok có cách nào để làm điều đó với toàn bộ gói không? – Nik
Có, bạn sử dụng ký tự đại diện *. tức là, -keepnames com.randompackage.lol. * Sẽ giữ tất cả các lớp trong lol –