Tôi có 3 dự án được sử dụng làm thư viện trong vòng 4 (dự án chính).Ẩn các lớp thư viện - Android
3 dự án được tuân thủ trong nhau như sau (build.gradle):
Dự án Thư viện:
Dự án A Dự án
compile project(":projectA") compile project(":projectB")
B
compile project(':projectC')
Main Project:
compile(name: 'projectA', ext: 'aar')
compile(name: 'projectB', ext: 'aar')
compile(name: 'projectC', ext: 'aar')
Tôi muốn làm điều gì đó để "Dự án thư viện", do đó từ bên trong dự án chính, nếu tôi nhấp vào bất kỳ lớp từ trong dự án Thư viện, tôi sẽ không thể xem mã hoặc mã sẽ được mã hóa. Ví dụ:
Vì vậy, ví dụ: nếu có InterfaceA
trong ProjectA và hoạt động chính của Dự án chính thực hiện giao diện đó, nếu tôi "Ctrl-Click" vào giao diện, kết quả sẽ tương tự như những gì tôi đã chỉ định ở trên.
Tôi hiểu Proguard làm điều gì đó tương tự, nhưng đó chỉ là nếu bạn đang xây dựng bản phát hành .apk, tôi cần kết quả tương tự cho các thư viện được biên dịch.
Tôi nghĩ bạn đang hỏi về cách kiểm soát/cấu hình IDE của bạn, không giải quyết được vấn đề lập trình. Chỉ cần một con trỏ khác: Proguard * obfuscates *, không mã hóa, và nó thực hiện điều này trên bytecode.Nếu bạn có các tập tin nguồn mở trong IDE (hoặc trong một AAR phát triển), thì tất nhiên IDE sẽ giúp bạn bằng cách nhấp chuột vào nguồn .... –
Rõ ràng bạn không hiểu câu hỏi đó. Làm thế nào IDE của tôi được cấu hình không giúp thực tế rằng nếu tôi phân phối thư viện cho một thực thể bên ngoài, họ vẫn sẽ có thể xem mã thư viện. Bạn mong đợi tôi để đi cấu hình IDE của họ là tốt sau đó? – TejjD
Tôi hiểu. Sau đó, bạn phải làm xáo trộn mã của bạn bằng Proguard hoặc các công cụ tương tự. Nhưng đó chỉ là giải pháp một phần - bytecode có thể được giải mã tương đối dễ dàng thành Java, và Proguard chỉ có thể thay thế * tên * của mọi thứ (biến, thành viên riêng và phương thức, v.v.), chứ không phải thực thi. –