2014-09-03 18 views
17

phép nói rằng tôi có ..Giữ tên phương pháp giao diện bên trong Proguard

public class SomeClass { 


    public interface someInterface { 

     public void firstMethod(String variable); 


     public void secondMethod(String variable); 


     public void thirdMethod(); 

    } 
} 

và tôi làm ..

-keep,includedescriptorclasses public class com.somepackage.SomeClass { 
    <fields>; 
    <methods>; 
} 

-keep public interface com.somepackage.someInterface {*;} 

tôi kết thúc với

public interface someInterface { 

     public void a(String variable); 


     public void a(String variable); 


     public void a(); 

    } 

Làm thế nào để đảm bảo tên phương thức của giao diện này không bị xáo trộn trong khi vẫn làm xáo trộn phần còn lại của lớp?

+0

Nếu bên trong của một lớp, nên không phải là thông số Proguard bao gồm lớp bên ngoài của bạn như một phần của tên đầy đủ của giao diện? –

Trả lời

24

ProGuard sử dụng quy ước đặt tên của mã Java bytecode, như được thấy trong tên tệp lớp và stacktraces. Do đó:

-keep public interface com.somepackage.SomeClass$someInterface {*;} 
+2

Không hoạt động đối với tôi. – Fra

+3

Tôi mất một giờ vì tôi đã sử dụng cú pháp trên không hiệu quả đối với tôi. Lý do là tôi xác định giao diện của tôi mà không có accessor công cộng (nó đã lỗi thời vì tất cả các giao diện đều được công khai). Trong trường hợp đó bạn cần sử dụng: -keep interface com.somepackage.SomeClass $ someInterface {*;}. Tôi nghĩ ProGuard nên "thông minh" đủ để xử lý trường hợp của mình một cách tự động. –

0

Tôi đã thử các sau đây và nó dường như làm việc:

-keep interface com.somepackage.SomeClass$someInterface 
Các vấn đề liên quan