2016-05-25 19 views
8

Tôi gặp sự cố lạ với proguard và kotlin. Tôi đang dần chuyển đổi một dự án proguarded thành kotlin - điều này rất tốt cho đến nay nhưng tôi nhận được các lỗi proguard khi chuyển đổi các lớp nhất định. Tôi vẫn chưa thể tách biệt được những gì thuộc tính đặc biệt của những lớp này nên nó phá vỡ - chúng dường như không khác gì so với những cái khác. Ví dụ InputStreamWithSource chỉ là:"không thể tìm thấy lớp được tham chiếu" với Proguard và Kotlin

package org.ligi.passandroid.model 

import java.io.InputStream 

class InputStreamWithSource(val source: String, val inputStream: InputStream) 

và nó hoàn toàn hoạt động trong IDE - Tôi có thể triển khai thiết bị - tất cả các kiểm tra giao diện người dùng đều chạy tốt. Chỉ khi cố gắng assembleRelease dự án Tôi nhận lỗi Proguard Tôi không hiểu:

Warning: org.ligi.passandroid.ui.FileUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.FileUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.InputStreamProvider: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassViewActivityBase$UpdateAsync: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassViewActivityBase$UpdateAsync: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.PassViewActivityBase$UpdateAsync: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.SearchPassesIntentService: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController$InputStreamUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController$InputStreamUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController$InputStreamUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassController$InputStreamUnzipControllerSpec: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassDialog: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassDialog: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassDialog$1AlertDialogUpdater: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 
Warning: org.ligi.passandroid.ui.UnzipPassDialog$1AlertDialogUpdater: can't find referenced class org.ligi.passandroid.model.InputStreamWithSource 

khi tôi thêm một dontwarn cho các lớp này trong cấu hình Proguard hơn nó bị treo khi chạy - vì vậy các lớp này đang thực sự loại bỏ - nhưng chúng không nên được loại bỏ khi chúng được sử dụng.

tôi có thể làm việc xung quanh vấn đề này bằng cách thêm giữ lớp/enum cho các lớp trong Proguard-config - nhưng câu hỏi là tại sao điều này là cần thiết cho các lớp - IMHO nó không nên cần

Bất cứ ai cũng có một số Ý tưởng điều gì có thể gây ra điều này hoặc cách tốt nhất để điều tra vấn đề này? Nguồn tin đầy đủ là ở đây: https://github.com/ligi/PassAndroid

Trả lời

1

tôi sẽ đảm bảo rằng tôi có gói riêng tôi quy định tại Proguard - một cái gì đó như thế này:

-dontwarn org.ligi.passandroid.** 
-keep class org.ligi.passandroid.** { *; } 
+0

Nếu bạn làm điều đó, sau đó không có điểm trong việc điều hành Proguard ở tất cả –

+0

@GregEnnis cho bạn sở hữu mã sẽ ổn, vì bất kỳ mã nào không được sử dụng sẽ bị xóa khỏi dự án. Mã của bên thứ 3 là một câu chuyện khác. –

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