2016-05-25 8 views
8

के साथ "संदर्भित वर्ग नहीं मिल सकता" मुझे प्रोगुआर्ड और कोटलिन के साथ एक अजीब समस्या है। मैं धीरे-धीरे एक प्रोजेक्टेड परियोजना को कोटलिन में परिवर्तित कर रहा हूं - जो अभी तक बहुत बढ़िया हो गया है लेकिन कुछ वर्गों को परिवर्तित करते समय मुझे प्रगति त्रुटियां मिल रही हैं। मैं अभी तक अलग नहीं कर सका कि इन वर्गों की विशेष संपत्ति क्या है, इसलिए यह टूट जाती है - वे अन्य लोगों की तुलना में अलग नहीं हैं। एक उदाहरण के रूप InputStreamWithSource बस है:प्रोगुआर्ड और कोटलिन

package org.ligi.passandroid.model 

import java.io.InputStream 

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

और यह पूरी तरह आईडीई में काम करता है - मैं एक डिवाइस के लिए तैनात कर सकते हैं - यह भी सभी यूआई परीक्षण ठीक चल रहे हैं। बस जब परियोजना मैं ProGuard त्रुटियों हो रही है assembleRelease करने की कोशिश कर मुझे समझ में नहीं:

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 

जब मैं ProGuard विन्यास में इन वर्गों के लिए एक dontwarn जोड़ने की तुलना में यह रनटाइम पर दुर्घटनाओं - तो इन कक्षाओं में वास्तव में निकाल दिए जाते हैं - लेकिन उन्हें हटाए जाने के रूप में हटाया नहीं जाना चाहिए।

मैं इस समस्या को हल ProGuard-config में इन कक्षाओं के लिए वर्ग/enum रखने जोड़कर काम कर सकते हैं - लेकिन सवाल यह क्यों इन कक्षाओं के लिए आवश्यक है है - IMHO यह आवश्यक नहीं किया जाना चाहिए

किसी को भी कुछ नहीं है आइडिया क्या कारण हो सकता है या इस समस्या की जांच कैसे कर सकता है? पूर्ण स्रोत यहाँ है: https://github.com/ligi/PassAndroid

उत्तर

1

मुझे यकीन है कि मैं अपने ही पैकेज ProGuard में परिभाषित किया गया है कि होगा - कुछ इस तरह:

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

आपको लगता है कि, तो सब पर ProGuard चलाने में कोई मतलब नहीं है करते हैं –

+0

@GregEnnis आपके लिए अपने कोड के लिए ठीक है, क्योंकि किसी भी कोड का उपयोग नहीं किया जाना चाहिए परियोजना से हटा दिया जाना चाहिए। तृतीय पक्ष कोड एक अलग कहानी है। –