code: private StringPool readStrings(long[] offsets) {
          // read strings.
          // buffer some apk, the strings' offsets may not well ordered. we sort it first
  
          StringPoolEntry[] entries = new StringPoolEntry[offsets.length];
          for (int i = 0; i < offsets.length; i++) {
              entries[i] = new StringPoolEntry(i, offsets[i]);
          }
  
          String lastStr = null;
          long lastOffset = -1;
          StringPool stringpool = new StringPool(offsets.length);
          for (StringPoolEntry entry : entries) {
              if (entry.getOffset() == lastOffset) {
                  stringpool.set(entry.getIdx(), lastStr);
                  continue;
              }
              Buffers.position(buffer, entry.getOffset());
              lastOffset = entry.getOffset();
              String str = readString();
              lastStr = str;
              stringpool.set(entry.getIdx(), str);
          }
          return stringpool;
      }
docs: read string pool for dex file.
  dex file string pool diff a bit with binary xml file or resource table.
  
  @param offsets
  @return
  @throws IOException