2011-10-24 26 views
18

Tôi đang sử dụng proguard để làm hỏng ứng dụng Android của mình. Ứng dụng android chứa một số mã nguồn gốc, làm cho các cuộc gọi lại đến các phương thức java đủ điều kiện. Tôi không cần phải làm xáo trộn những lớp này và tên của các phương pháp của họ. Các bên dưới đúng cách giữ tên lớp, nhưng không phải tên phương thức.Trong proguard, làm thế nào để bảo tồn một tập hợp các tên phương thức của các lớp?

-keep public class com.me.dontobf.* 
-keepnames public class com.me.dontobf.* 

Trả lời

48

Đối với phương pháp tự nhiên: ProGuard manual > Examples > Processing native methods

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

Trong trường hợp này, đối với các phương thức callback: ProGuard manual > Examples > Processing callback methods

-keep class mypackage.MyCallbackClass { 
    void myCallbackMethod(java.lang.String); 
} 

Hoặc ví dụ, nếu tất cả các phương pháp nào có thể các phương thức callback:

-keep class mypackage.MyCallbackClass { 
    public <methods>; 
} 

Bạn có lẽ cũng cần phải giữ cho bất kỳ lớp học chương trình xảy ra trong mô tả phương pháp.

+0

hoạt động. cảm ơn bạn. – ab11

+0

Điều này giúp tôi rất nhiều. Cảm ơn bạn! –

+0

Tôi có thể bảo quản mã do người dùng xác định bằng cách nào? –

2

Hãy thử:

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

Từ hướng dẫn ProGuard: http://proguard.sourceforge.net/manual/examples.html#native

+2

Đề xuất của bạn không hoạt động đối với tôi. Tôi cần phải bảo tồn tên phương thức của các phương thức không phải là native, được gọi từ mã nguồn gốc. Đề xuất của bạn giữ tên lớp của các lớp chứa các phương thức gốc. – ab11

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