2013-07-15 26 views
5

Tôi muốn xây dựng một thư viện, nhưng tôi không muốn một số lớp học được tiếp xúc với nhà phát triển, nhưng tôi muốn chúng được tiếp xúc với mã thư viện của tôi và kiểm tra dễ dàng.Làm thế nào để ẩn các lớp công khai trong thư viện Jar bằng cách sử dụng ProGuard (hoặc bất kỳ cách nào khác)?

Có cách nào để ẩn các lớp công khai cụ thể bằng cách sử dụng ProGuard hoặc theo bất kỳ cách nào khác (như ký hiệu @hide được sử dụng trong Android SDK) không?

+0

'tiếp xúc với mã của tôi' bạn có nghĩa là mã của bạn trong thư viện của bạn hoặc ở một nơi khác không? – njzk2

+0

Tiếp xúc với mã trong thư viện của tôi –

+0

Sau đó, tại sao chúng là 'công khai'? Thư viện của bạn có quá phức tạp đến mức bạn cần nhiều gói không? Hay chúng là 'public' bởi vì nó được yêu cầu bởi superclasses/interfaces? – CommonsWare

Trả lời

0

toàn bộ điểm của obfuscatin là nó ẩn phương pháp cho mọi người ở bên ngoài, nhưng các tham chiếu bên trong thư viện được cập nhật. Thông thường, bạn sẽ có một

void myMethodWithAVeryExplicitName() { 
    // Do Stuff 
} 

void otherMethod() { 
    // Call the first method 
    myMethodWithAVeryExplicitName(); 
} 

Nó sẽ được obfuscated như:

void a() { 
    // Do Stuff 
} 

void b() { 
    // Call the first method 
    a(); 
} 

Sau đó Proguard có rất nhiều tùy chọn cho obfuscating hoặc giữ lớp nào, lớp học mở rộng các lớp học cụ thể, các thành viên ..

0

Có thể một mặt tiền (http://en.wikipedia.org/wiki/Facade_pattern) sẽ hữu ích. Mục đích của mẫu này tương tự với vấn đề của bạn. Nó cung cấp một giảm đến thế giới bên ngoài trong khi nó giữ tất cả các chuông và còi bên trong thư viện.

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