2016-05-25 38 views
8

Ho uno strano problema con proguard e kotlin. Sto gradualmente convertendo un progetto progaggiante in kotlin - che è andato molto bene finora, ma sto ricevendo errori proguard durante la conversione di alcune classi. Non riuscivo ancora a isolare qual è la proprietà speciale di queste classi in modo che si rompa: non sembrano essere diverse dalle altre. A titolo di esempio InputStreamWithSource è solo:"Impossibile trovare la classe di riferimento" con Proguard e Kotlin

package org.ligi.passandroid.model 

import java.io.InputStream 

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

e funziona completamente nell'IDE - posso distribuire a un dispositivo - anche tutti i test dell'interfaccia utente sono in esecuzione bene. Proprio quando si cerca di assembleRelease progetto sto ottenendo gli errori Proguard non capisco:

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 

quando aggiungo un dontwarn per queste classi nella configurazione Proguard che si blocca in fase di esecuzione - in modo da queste classi sono davvero rimossi - ma non dovrebbero essere rimossi man mano che vengono utilizzati.

posso risolvere questo problema aggiungendo mantenere classe/enum per queste classi nel Proguard-config - ma la domanda è: perché questo è necessario per queste classi - IMHO non dovrebbe essere necessario

Chiunque ha qualche Idea cosa potrebbe causare questo o il modo migliore per indagare su questo problema? La sorgente completo è qui: https://github.com/ligi/PassAndroid

risposta

1

vorrei fare in modo che io ho la mia pacchetto definito in Proguard - qualcosa di simile:

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

Se lo fai, allora non v'è alcun punto nella corsa Proguard a tutti –

+0

@GregEnnis per il proprio codice che andrebbe bene, dal momento che qualsiasi codice non utilizzato dovrebbe essere cancellato dal progetto. Il codice di terze parti è una storia diversa. –