2012-03-26 39 views
16

tôi cần sử dụng thư viện mở rộng google-play (hoặc thị trường) mới và tôi có thời gian khó khăn với nó. tôi tự hỏi nếu có ai khác đang sử dụng nó và thông báo cùng một vấn đề tôi có thể thấy, vì vậy tôi sẽ rất vui nếu bạn có thể giúp khắc phục chúng:android - rất nhiều vấn đề với thư viện mở rộng

1. đôi khi tôi không nhận được sự kiện quan trọng (lỗi, ví dụ) quay lại hoạt động của trình tải xuống.

2.Tất cả không hoạt động trên một số thiết bị, như xoom. tôi nghĩ rằng tôi đã sửa chữa nó: Download expansion files on tablet

3.hoàn toàn cho các thiết bị giống nhau, người ta có thể tải xuống tệp và người kia luôn có thể gặp lỗi kết nối. đối với một số thiết bị, nó sẽ không bao giờ bao giờ có thể tải xuống (ngay cả các thiết bị không bắt nguồn từ có ứng dụng google-play).

4. sau khi tải xuống hoàn tất, tệp có thể bị hỏng, vì vậy tôi cần sử dụng CRC kiểm tra và tải xuống lại mọi thứ.

5.Thông báo đôi khi mở nhiều phiên bản của hoạt động của trình tải xuống khi nhấn. Ngoài ra, tôi không hiểu lý do tại sao họ cho phép thông báo ở lại trong trường hợp hoạt động vẫn được hiển thị.

6.Khi xảy ra lỗi và xử lý sau, nó sẽ không chờ người dùng yêu cầu nó tiếp tục. Tôi không chắc chắn trong trường hợp nó xảy ra, nhưng nó thực sự kỳ lạ và không thể đoán trước.

7.khi rời khỏi hoạt động của trình tải xuống, tôi nhận được ngoại lệ của dịch vụ bị rò rỉ.

8. làm rối loạn ứng dụng, nó đổ vỡ vì các thao tác SQL được thực hiện qua thư viện. tại sao lại thế? EDIT: điều này là do google quyết định thực hiện một số hoạt động phản chiếu trên phần SQL (trong tệp "DownloadsDB.java"). để sửa lỗi, tôi đã cố gắng đặt proguard để bỏ qua toàn bộ thư viện (dù đó là mã nguồn mở), nhưng nó không hoạt động, vì vậy những gì tôi đã làm là cung cấp cho các lớp mà mình muốn, vì vậy tôi đã thay thế "DownloadsDB.class.getDeclaredClasses()" bằng "Lớp mới [] {MetadataColumns.class, DownloadColumns.class};" .

tôi chỉ không hiểu tại sao Google không thể xuất bản một API đơn giản để gửi ý định tới thị trường để tải xuống tệp và kiểm tra xem nó có ổn không, hoặc cung cấp một thư viện ít phức tạp hơn nhiều. vì sự phức tạp, rất khó để tìm và sửa lỗi của chúng.

câu hỏi của tôi là: có ai khác đã thử thư viện này và có người khác thành công khi sử dụng thư viện mà không có bất kỳ sự cố nào không? nếu có, vui lòng xuất bản giải pháp ...


EDIT: có vẻ như google đã cập nhật thư viện của nó (lên phiên bản 2).

họ tuyên bố những thay đổi tiếp theo:

  • List item
  • tập tin vá hiện nay được tải về.
  • thiết bị Honeycomb hiện được hỗ trợ với các thông báo ICS-như
  • CRC kiểm tra (từ mẫu) bây giờ hỗ trợ các file Zip nén
  • Sử dụng phản xạ loại bỏ để cho phép dễ dàng obfuscation
  • Dịch vụ rò rỉ cố định
  • nhân vật chưa in ra khỏi ZipResourceFile
  • định dạng nhỏ thay đổi
  • ý kiến ​​bổ sung và chỉnh sửa tập tin này

Tôi đã thử nghiệm nó ngay bây giờ, và có vẻ như chúng gần như ở đó.

lỗi duy nhất tôi tìm thấy là nếu tôi cập nhật tệp mở rộng (và APK & kích hoạt & CRC), quá trình tải xuống bắt đầu nhưng không xóa tệp mở rộng cũ hơn.

đồng thời, thông báo hiển thị thời gian hiện tại thay vì, tốt, mọi thứ khác có thể liên quan đến tải xuống.

hiện tại, vì tôi chỉ có một bản mở rộng, tôi thực hiện kiểm tra tiếp theo mỗi lần tôi nhận trạng thái STATE_COMPLETED từ dịch vụ. tôi hy vọng nó không có bất kỳ vấn đề nào khác:

private void deleteOldExpansionFile() 
{ 
    int fileVersion = 0; 
    final int versionCode = App.getAppVersionCode(DownloaderActivity.this); 
    fileVersion = versionCode; 
    final String fileName = Helpers.getExpansionAPKFileName(this, true, fileVersion); //get the expansion file name based on the build version of the app. 
    final File newFile = new File(Helpers.generateSaveFileName(this, fileName)); 
    final File[] listFiles = newFile.getParentFile().listFiles(); 
    for (final File file:listFiles) 
    { 
    final String name = file.getName(); 
    if (name.startsWith(fileName)) 
     continue; 
    file.delete(); 
    } 
} 

Trả lời

3

. xin chào ! Đối với CRC Check Fail, tôi cũng đã gặp sự cố. Điều mà giải quyết nó cho tôi là làm cho kho lưu trữ của tập tin mở rộng của tôi với 7zip, ở định dạng zip mà không có nén ở tất cả (lưu trữ).

như sau: http://floy.fr/perso/floy/expfiles/crc.PNG

Bây giờ CRC đang hoạt động như một sự quyến rũ đối với tôi!

Tôi đồng ý với bạn .. thư viện này rất khó sử dụng ..

+0

bạn cũng có thể tạo định dạng của riêng mình, kết hợp tất cả tài nguyên cho bạn. lý do: có thể an toàn hơn một chút và tránh xa những người khác xem các tệp của bạn. –

0

Mã không hỗ trợ xác thực tệp Zip chứa tệp nén. Thay thế vòng lặp doInBackground từ hàm xác nhận để làm cho nó xác nhận hợp lệ các tệp Zip của CRC một cách chính xác. Lưu ý rằng bạn không thể phát lại video/âm thanh từ các tệp được lưu trữ được nén trong các tệp Zip.

 @Override 
     protected Boolean doInBackground(Object... params) { 
      for (XAPKFile xf : xAPKS) { 
       String fileName = Helpers.getExpansionAPKFileName(SampleDownloaderActivity.this, 
         xf.mIsMain, xf.mFileVersion); 
       if (!Helpers.doesFileExist(SampleDownloaderActivity.this, fileName, 
         xf.mFileSize, false)) 
        return false; 
       fileName = Helpers 
         .generateSaveFileName(SampleDownloaderActivity.this, fileName); 
       ZipResourceFile zrf; 
       byte[] buf = new byte[1024 * 256]; 
       try { 
        zrf = new ZipResourceFile(fileName); 
        ZipEntryRO[] entries = zrf.getAllEntries(); 
        /** 
        * First calculate the total compressed length 
        */ 
        long totalCompressedLength = 0; 
        for (ZipEntryRO entry : entries) { 
         totalCompressedLength += entry.mCompressedLength; 
        } 
        float averageVerifySpeed = 0; 
        long totalBytesRemaining = totalCompressedLength; 
        long timeRemaining; 
        /** 
        * Then calculate a CRC for every file in the 
        * Zip file, comparing it to what is stored in 
        * the Zip directory. Note that for compressed 
        * Zip files we must extract the contents to do 
        * this comparison. 
        */ 
        for (ZipEntryRO entry : entries) { 
         if (-1 != entry.mCRC32) { 
          long length = entry.mUncompressedLength; 
          CRC32 crc = new CRC32(); 
          DataInputStream dis = null; 
          try { 
           dis = new DataInputStream(
             zrf.getInputStream(entry.mFileName)); 

           long startTime = SystemClock.uptimeMillis(); 
           while (length > 0) { 
            int seek = (int) (length > buf.length ? buf.length 
              : length); 
            dis.readFully(buf, 0, seek); 
            crc.update(buf, 0, seek); 
            length -= seek; 
            long currentTime = SystemClock.uptimeMillis(); 
            long timePassed = currentTime - startTime; 
            if (timePassed > 0) { 
             float currentSpeedSample = (float) seek 
               /(float) timePassed; 
             if (0 != averageVerifySpeed) { 
              averageVerifySpeed = SMOOTHING_FACTOR 
                * currentSpeedSample 
                + (1 - SMOOTHING_FACTOR) 
                * averageVerifySpeed; 
             } else { 
              averageVerifySpeed = currentSpeedSample; 
             } 
             totalBytesRemaining -= seek; 
             timeRemaining = (long) (totalBytesRemaining/averageVerifySpeed); 
             this.publishProgress(
               new DownloadProgressInfo(
                 totalCompressedLength, 
                 totalCompressedLength 
                   - totalBytesRemaining, 
                 timeRemaining, 
                 averageVerifySpeed) 
               ); 
            } 
            startTime = currentTime; 
            if (mCancelValidation) 
             return true; 
           } 
           if (crc.getValue() != entry.mCRC32) { 
            Log.e(Constants.TAG, 
              "CRC does not match for entry: " 
                + entry.mFileName); 
            Log.e(Constants.TAG, 
              "In file: " + entry.getZipFileName()); 
            return false; 
           } 
          } finally { 
           if (null != dis) { 
            dis.close(); 
           } 
          } 
         } 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
        return false; 
       } 
      } 
      return true; 
     } 
+0

tôi nghĩ rằng CRC là sai (và có thể nó là), nhưng sau khi tải lên lại các tập tin, tôi nghĩ rằng đó là ok. có thể họ gặp vấn đề với máy chủ. –

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