2017-09-15 14 views
6

Bằng cách sử dụng Android Studio 3.0 Beta 5, sử dụng Dự án mặc định (Hoạt động trống) với Ứng dụng tức thì bật.Ứng dụng tức thì đa tính năng không thể được bảo vệ?

Để bật Proguard, tôi chỉ cần đặt tất cả các Build.Gradle (ứng dụng, cơ sở và tính năng) với

debug { 
    minifyEnabled true 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
} 

Khi biên dịch App hoạt động tốt. Tuy nhiên khi biên dịch các ứng dụng tức thì, nó lỗi.

java.lang.RuntimeException: Không thể để nhanh chóng hoạt động ComponentInfo {com.elyeproj.myapplication/com.elyeproj.myapplication.feature.MainActivity}: java.lang.ClassNotFoundException: không thể tìm thấy com.elyeproj .myapplication.feature.MainActivity trong bất kỳ nguyên tử lớp nạp hoặc tầng lớp phụ huynh loader

Nó có vẻ như các Proguard chỉ không kiểm tra sự phụ thuộc giữa các tính năng. Làm thế nào điều này có thể được giải quyết?

+0

vấn đề Báo cáo Google theo https://issuetracker.google.com/issues/65710224 – Elye

+0

@Bedant, lẽ upvote câu hỏi này sẽ giúp tăng thêm sự chú ý đến nó? Cảm ơn. – Elye

+0

Có bất kỳ cập nhật nào về điều này không?Có vẻ như giới hạn khá nghiêm trọng do yêu cầu về kích thước của Ứng dụng tức thì. –

Trả lời

0

Nhóm AIA của Google đang nỗ lực khắc phục, cảm ơn sự kiên nhẫn của bạn!

Giải pháp tạm thời cho sự cố này là định cấu hình trình bảo vệ "bảo trì" lớn cho từng mô-đun tính năng.

Để tìm hiểu những gì các lớp học để giữ khi bạn cấu hình Proguard của bạn, xin vui lòng thực hiện như sau:

  1. add “-whyareyoukeeping lớp **” để ứng dụng/proguard-rules.pro (mô-đun cài đặt ứng dụng của bạn)
  2. thiết minifyEnabled các cài đặt ứng dụng của true
  3. xây dựng cài đặt ứng dụng, sau đó các Gradle Console sẽ chứa một danh sách các thông tin trên đó lớp nó nhận giữ hộ, không
  4. copy phần đó vào một số biên tập viên để bạn có thể chỉnh sửa nó
  5. cho mỗi lớp học được ghi chú bằng "được giữ" hoặc "là thư viện", đó sẽ là một lớp học để giữ, ví dụ: -keep class some.package.class {*;} a. bạn cũng có thể thực hiện việc này ở cấp thành viên để tối ưu hóa thêm
  6. sau khi bạn đã biên soạn danh sách các lưu giữ này, thêm chúng vào mỗi proguard-rules.pro
  7. bạn có thể hoặc không thể cần phải xác minh rằng cơ sở/proguard-rules.pro sử dụng "-dontobfuscate" (hoặc tuyên truyền obfuscation bản đồ hạ lưu đến các tính năng bằng cách nào đó)

Bây giờ bạn có thể xây dựng ngay lập tức ứng dụng của bạn với minifyEnabled đúng.

Xin lưu ý bước 5, có thể là một thách thức để biên dịch, tùy thuộc vào trình biên tập của bạn tốt đến mức nào. Một cách các kỹ sư đã chứng minh được bằng cách sử dụng lệnh AWK để thay thế văn bản:

awk '/^[^ ]/ { cls=$1 } /is (kept|a library)/ { print "-keep class " cls " {*;}" }' 
Các vấn đề liên quan