2016-05-25 18 views
8

Mam dziwny problem z proguardem i kotlinami. Stopniowo zamieniam projekt na progresywny na kotlin - który do tej pory był bardzo dobry, ale podczas konwersji niektórych klas pojawiają się błędy proguardowe. Nie mogłem jeszcze wyodrębnić, jaka jest szczególna właściwość tych klas, więc się psuje - wydaje się, że nie różnią się od pozostałych. Jako przykład InputStreamWithSource tylko:"nie można znaleźć klasy referencyjnej" z Proguardem i Kotlinem

package org.ligi.passandroid.model 

import java.io.InputStream 

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

i to całkowicie pracuje w IDE - mogę wdrożyć do urządzenia - także wszystkie testy UI są uruchomione grzywny. Po prostu, kiedy próbuje assembleRelease projektu otrzymuję błędy PROGUARD nie rozumiem:

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 

kiedy dodać dontwarn dla tych klas w konfiguracji PROGUARD niż to wywala przy starcie - więc te zajęcia są naprawdę usunięty - ale nie powinny być usuwane, ponieważ są używane.

mogę obejść ten problem dodając zachować klasę/enum dla tych klas w PROGUARD-config - ale pytanie brzmi, dlaczego jest to potrzebne dla tych klas - IMHO nie powinno być potrzebne

Ktoś ma jakiś Pomysł, co może spowodować to lub jak najlepiej zbadać ten problem? Pełne źródło jest tutaj: https://github.com/ligi/PassAndroid

Odpowiedz

1

chciałbym się upewnić, że mam swój własny pakiet zdefiniowane w PROGUARD - mniej więcej tak:

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

Jeśli to zrobisz, to nie ma sensu w prowadzeniu ProGuard w ogóle –

+0

@GregEnnis dla własnego kodu, który byłby w porządku, ponieważ każdy kod, który nie jest używany, powinien zostać usunięty z projektu. Kod strony trzeciej to inna historia. –