code: protected byte[] getDepsBlock() throws IOException {
      // Parcel is fine: we never parse the parceled bytes, so it's okay if the byte representation
      // changes beneath us.
      Parcel parcel = Parcel.obtain();
      try (Unpacker u = makeUnpacker()) {
        Dso[] dsos = u.getDsoManifest().dsos;
        parcel.writeByte(MANIFEST_VERSION);
        parcel.writeInt(dsos.length);
        for (int i = 0; i < dsos.length; ++i) {
          parcel.writeString(dsos[i].name);
          parcel.writeString(dsos[i].hash);
        }
      }
      byte[] depsBlock = parcel.marshall();
      parcel.recycle();
      return depsBlock;
    }
docs: Return an opaque blob of bytes that represents all the dependencies of this SoSource; if this
  block differs from one we've previously saved, we go through the heavyweight refresh process
  that involves calling {@link #getDsoManifest} and {@link #openDsoIterator}.
  
  Subclasses should override this method if {@link #getDsoManifest} is expensive.
  
  @return dependency block