2017-06-04 12 views
7

TLDR: Cách chuyển bản đồ proguard sang javac để biên dịch với thư viện bị che khuất?Chạy Proguard trên dự án đa mô-đun là "một phần"

Đó là dài, nhưng tôi không thấy làm thế nào để làm cho nó ngắn hơn:

Bối cảnh: Tôi có cài đặt sản phẩm sau:

Android Studio dự án - Thư viện mô-đun - (sub) module Core - (phụ) mô-đun A - (phụ) mô-đun B - (phụ) mô-đun C - Mô-đun ứng dụng mẫu - ... Các mô-đun khác

Mỗi lớp con của thư viện A, B, C tham chiếu lớp trong lõi, nhưng A, B, C độc lập với nhau. Tương tự về mặt khái niệm với Dịch vụ Play nơi người dùng chỉ có thể có mã và mô-đun phụ bắt buộc. Mỗi submodules thư viện có API bên ngoài nhưng cũng có nhiều lớp bên trong Mục đích là để có thể phân phối Core, A, B, C dưới dạng aar-s độc lập.

Mục tiêu: làm xáo trộn tất cả các mô-đun cùng nhau chỉ để lại các API công khai được phơi bày nhưng đóng gói và phân phối chúng một cách riêng biệt ở dạng bị tối ưu hóa/tối ưu hóa.

Vấn đề: Tôi không thấy cách sử dụng nó với cấu hình đơn giản. Tùy chỉnh xây dựng hệ thống là cần thiết ở đây, Trừ khi có một giải pháp được biết đến?

Điều cần thiết ở đây là:

  • Java Biên dịch tất cả các tiểu mô đun cùng
  • Proguard-xáo trộn chúng lại với nhau
  • Chạy tất cả các phần còn lại của quá trình xây dựng riêng

Quy trình xây dựng thông thường ở đâu cho mỗi mô-đun là: - Biên dịch -> làm mọi thứ bao gồm. obfuscation -> gói

Thiết lập chuyển tiếp thẳng không thành công khi biên dịch mô-đun con đầu tiên sau Lõi. Nếu nó chỉ có thể vượt qua Proguard mapping.txt như là một đầu vào cho trình biên dịch Java ... Nhưng tôi không thể tìm thấy một tùy chọn như vậy. Ý tưởng nào?

Xin cảm ơn !!!

Trả lời

1

Tôi đã gặp sự cố tương tự và tôi đã viết this post on my personal website.

Thực chất, những gì bạn đang tìm kiếm là plugin maven-publish Gradle, cho phép bạn đóng gói các mô-đun thư viện của mình thành AAR và quản lý và phân phối chúng một cách thuận tiện, đồng thời giữ lại thông tin về phụ thuộc của chúng.

Bạn có thể định cấu hình plugin này để đóng gói một số cụ thể buildType mà bạn sẽ bật tính năng che giấu proguard.

+0

sẽ không obfuscation áp dụng cho mỗi mô-đun tại thời gian biên dịch do đó làm cho mọi tầng lớp obfuscated cho module con? – Inverce

+3

Nếu bạn muốn mô-đun của bạn bị xáo trộn, bạn phải thêm chỉ thị bảo vệ cho mỗi mô-đun để giữ tất cả các lớp công khai: -giữ lớp công khai * {public protected *; } – Venator85

1

Sự cố: Tôi không thấy cách sử dụng nó với cấu hình đơn giản .Cần có hệ thống xây dựng tùy chỉnh ở đây, trừ khi có bất kỳ giải pháp nào được biết là ?

Vì vậy, bạn đang tìm kiếm "hệ thống xây dựng tùy chỉnh" vì bạn không biết cách làm điều đó một cách tốt đẹp. Nhưng nếu điều này có thể được giải quyết trong gradle, bạn muốn sử dụng nó, phải không?

Để proguarding thư viện với gradle, bạn có 2 lựa chọn:

  • Run Proguard cho mỗi thư viện độc lập: Trong mỗi mô-đun, thiết minifyEnabled true, và sử dụng proguardFiles chức năng để thiết lập tập tin proguard.txt của bạn .
  • Run Proguard chỉ trong mô-đun ứng dụng của bạn: Trong mỗi mô-đun, thiết minifyEnabled false, và sử dụng consumerProguardFiles chức năng để vượt qua proguard.txt tập tin từ mỗi thư viện để các module chính.

Dưới đây là giải thích chi tiết với các ví dụ mã, vì vậy tôi sẽ không lặp lại câu trả lời: https://stackoverflow.com/a/42758629/1516973

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