This was almost certainly my fault, but as I look at the implementation of Sets.cartesianProduct, I think its `contains` method made the assumption that `ImmutableSet.asList().indexOf` was O(1), which is no longer the case for Android.  It should probably get a specific `contains` implementation that actually is O(sets), not O(sets*setSize).
@Override
  public ImmutableList<E> get(final int index) {
    checkElementIndex(index, size());
    return new ImmutableList<E>() {
      @Override
      public int size() {
        return axes.size();
      }
      @Override
      public E get(int axis) {
        checkElementIndex(axis, size());
        int axisIndex = getAxisIndexForProductIndex(index, axis);
        return axes.get(axis).get(axisIndex);
      }
      @Override
      boolean isPartialView() {
        return true;
      }
    };
  }
  @Override
  public int size() {
    return axesSizeProduct[0];
  }
  @Override
  public boolean contains(@Nullable Object o) {
    return indexOf(o) != -1;
  }
}