docs: def _RealGetContents(self):
          """Read in the table of contents for the ZIP file."""
          fp = self.fp
          try:
              endrec = _EndRecData(fp)
          except OSError:
              raise BadZipFile("File is not a zip file")
          if not endrec:
              raise BadZipFile("File is not a zip file")
          if self.debug > 1:
              print(endrec)
          size_cd = endrec[_ECD_SIZE]             # bytes in central directory
          offset_cd = endrec[_ECD_OFFSET]         # offset of central directory
          self._comment = endrec[_ECD_COMMENT]    # archive comment
  
          # ---> APK文件只有一个，不可能存在额外数据。
          # "concat" is zero, unless zip was concatenated to another file
          # concat = endrec[_ECD_LOCATION] - size_cd - offset_cd
          # if endrec[_ECD_SIGNATURE] == stringEndArchive64:
          #     # If Zip64 extension structures are present, account for them
          #     concat -= (sizeEndCentDir64 + sizeEndCentDir64Locator)
          concat = 0
  
          if self.debug > 2:
              inferred = concat + offset_cd
              print("given, inferred, offset", offset_cd, inferred, concat)
          # self.start_dir:  Position of start of central directory
          self.start_dir = offset_cd + concat
          fp.seek(self.start_dir, 0)
          data = fp.read(size_cd)
          fp = io.BytesIO(data)
          total = 0
          while total < size_cd:
              centdir = fp.read(sizeCentralDir)
              if len(centdir) != sizeCentralDir:
                  raise BadZipFile("Truncated central directory")
              centdir = struct.unpack(structCentralDir, centdir)
              if centdir[_CD_SIGNATURE] != stringCentralDir:
                  raise BadZipFile("Bad magic number for central directory")
              if self.debug > 2:
                  print(centdir)
              filename = fp.read(centdir[_CD_FILENAME_LENGTH])
              flags = centdir[5]
              if flags & 0x800:
                  # UTF-8 file names extension
                  filename = filename.decode('utf-8')
              else:
                  # Historical ZIP filename encoding
                  filename = filename.decode('cp437')
              # Create ZipInfo instance to store file information
              x = ZipInfo(filename)
              x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])
              x.comment = fp.read(centdir[_CD_COMMENT_LENGTH])
              x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET]
              (x.create_version, x.create_system, x.extract_version, x.reserved,
               x.flag_bits, x.compress_type, t, d,
               x.CRC, x.compress_size, x.file_size) = centdir[1:12]
              if x.extract_version > MAX_EXTRACT_VERSION:
                  raise NotImplementedError("zip file version %.1f" %
                                            (x.extract_version / 10))
              x.volume, x.internal_attr, x.external_attr = centdir[15:18]
              # Convert date/time code to (year, month, day, hour, min, sec)
              x._raw_time = t
              x.date_time = ((d >> 9) + 1980, (d >> 5) & 0xF, d & 0x1F,
                             t >> 11, (t >> 5) & 0x3F, (t & 0x1F) * 2)
  
              x._decodeExtra()
              # x.header_offset = x.header_offset + concat
              self.filelist.append(x)
              self.NameToInfo[x.filename] = x
  
              # update total bytes read from central directory
              total = total + sizeCentralDir + \
                  centdir[_CD_FILENAME_LENGTH] + \
                  centdir[_CD_EXTRA_FIELD_LENGTH] + centdir[_CD_COMMENT_LENGTH]