2015-07-14 6 views
5

सब कुछ डीबग मोड में ठीक काम करता है लेकिन जब हम रिलीज में इसे चलाते हैं तो ExtractToDirectory कॉल विफल हो जाता है।एक्समरिन एंड्रॉइड: System.IO.Compression.ZipFile.ExtractToDirectory रिलीज मोड में विफल रहता है

यहां संदर्भ के लिए कार्य है। बस यह सुनिश्चित करने के लिए कि हम कुछ भी अजीब नहीं कर रहे हैं।

private bool UnzipFiles() 
    { 
     bool toReturn = true; 
     try 
     { 
      UpdateStatus("Almost done..."); 
      string file = Path.Combine (DownloadFolder, "ZipFile.zip"); 
      if(System.IO.Directory.Exists(UnzippingDestinationFolder)) 
      { 
       System.IO.Directory.Delete(UnzippingDestinationFolder, recursive:true); 
      } 

      System.IO.Compression.ZipFile.ExtractToDirectory(file, UnzippingDestinationFolder); 
      UpdateStatus("Finished!"); 
      var files = System.IO.Directory.GetFiles(UnzippingDestinationFolder); 

      int m = 3; 

     } 
     catch (Exception e) 
     { 
      toReturn = false; 
     } 

अंत में, यहां हमें अपवाद है।

System.NullReferenceException: Object reference not set to an instance of an object 
    at SharpCompress.Common.Zip.Headers.ZipFileEntry.DecodeString (System.Byte[] str) [0x00000] in <filename unknown>:0 
    at SharpCompress.Common.Zip.Headers.DirectoryEntryHeader.Read (System.IO.BinaryReader reader) [0x00000] in <filename unknown>:0 
    at SharpCompress.Common.Zip.ZipHeaderFactory.ReadHeader (UInt32 headerBytes, System.IO.BinaryReader reader) [0x00000] in <filename unknown>:0 
    at SharpCompress.Common.Zip.SeekableZipHeaderFactory+<ReadSeekableHeader>c__Iterator0.MoveNext() [0x00000] in <filename unknown>:0 
    at SharpCompress.Archive.Zip.ZipArchive+<LoadEntries>c__Iterator0.MoveNext() [0x00000] in <filename unknown>:0 
    at SharpCompress.LazyReadOnlyCollection`1+LazyLoader[SharpCompress.Archive.Zip.ZipArchiveEntry].MoveNext() [0x00000] in <filename unknown>:0 
    at System.IO.Compression.ZipArchive.CreateZip (System.IO.Stream stream, ZipArchiveMode mode) [0x00000] in <filename unknown>:0 
    at System.IO.Compression.ZipArchive..ctor (System.IO.Stream stream, ZipArchiveMode mode, Boolean leaveOpen, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
    at System.IO.Compression.ZipFile.Open (System.String archiveFileName, ZipArchiveMode mode, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
    at System.IO.Compression.ZipFile.ExtractToDirectory (System.String sourceArchiveFileName, System.String destinationDirectoryName, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
    at System.IO.Compression.ZipFile.ExtractToDirectory (System.String sourceArchiveFileName, System.String destinationDirectoryName) [0x00000] in <filename unknown>:0 
    at NewBaron.Screens.DownloadContentScreen.UnzipFiles() [0x00000] in <filename unknown>:0 
+1

कुछ बातें की कोशिश करने के लिए: - यही कारण है कि पुस्तकालय है खुला स्रोत, अपनी परियोजना और यह डिबग में स्रोत कोड डाल दिया। जब ऐसा होता है तो शून्य संदर्भ बहुत स्पष्ट होगा। - एपीके में सभी चरित्र सेट शामिल करें। [परियोजना विकल्प] -> एंड्रॉइड बिल्ड -> लिंकर -> अंतर्राष्ट्रीयकरण। – matthewrdev

+2

इसके अलावा, रिलीज़ मोड में लिंकर को अक्षम करें। – matthewrdev

उत्तर

1

@ mattewrobbinsdev का सुझाव बिल्कुल ठीक था।

Dialog

+0

यह निर्धारित करने के लिए उपयोगी होगा * क्यों * यह इसे ठीक करता है ... मेरा सबसे अच्छा अनुमान यह है कि लिंकर एक एपीआई को अलग कर रहा है जो SharpCompress प्रतिबिंब के माध्यम से उपयोग करता है। यदि आप लिंकर को अक्षम किए बिना इसे ठीक करना चाहते हैं, तो हटाए जा रहे वर्ग की पहचान करें और इसका एक स्टब उपयोग करें। मानक 'LinkerPleaseInclude.cs' फ़ाइल बनाना है: https://github.com/MvvmCross/MvvmCross/blob/v3/nuspec/DroidContent/LinkerPleaseInclude.cs.pp – matthewrdev

+0

विकल्प लिंक व्यवहार: लिंक न करें, वर्कसेट मेरे लिए। रिलीज मोड में फ़ाइल को अनजिप करते समय System.IO.Compression क्रैश हो रहा था। समस्या यह है कि .एपीके फ़ाइल इसे आकार डुप्लिकेट करती है। मेरे मामले में .एपीके 25 एमबी था और लिंक के बाद यह 50 बीएम था। – jzeferino

+0

क्या किसी ने कभी भी एक्समारिन के बगजिला में एक बग लॉग किया है? – dotMorten

4

विक्टर समाधान के लिए एक मामूली परिवर्तन: भविष्य पाठकों के लिए, यहाँ Xamarin स्टूडियो में संवाद है। एसडीके को जोड़ने से एपीके उत्पन्न हुआ जो 53 एमबी था। नाटक स्टोर की एपीके आकार सीमा के लिए बहुत बड़ा है।

मैं केवल एसडीके विधानसभाओं लिंक को जोड़ने व्यवहार की स्थापना की और यह apk आकार 29MBs

तक लाया यहाँ अद्यतन खिड़की है।

enter image description here

+1

बहुत बेहतर जवाब। इसके अलावा इस समाधान ने Xamarin.Mac ऐप पर एक ही समस्या को ठीक करने में मदद की। –

+0

इसने मेरी समस्या हल की, केवल एसडीके असेंबली के कारण .apk फ़ाइल को छोटा बनाए रखा। – jzeferino

संबंधित मुद्दे