Also others have given ways that map one to one to your case, I think a more generic view is better. Also using the || and && for such is a cryptic way of writing scripts (read: prone to ending up with bugs).
I think the following is much easier to work with long term:
function presubmit() {
  if ! gradle test android
  then
    return 1
  fi
  if ! gradle test ios
  then
    return 1
  fi
  if ! gradle test server
  then
    return 1
  fi
  git push origin master
}
The return from the last command is returned by the function so we do not need to have an if/then there.
In your specific case, to avoid the duplication, you could use a for loop like so:
function presubmit() {
  for name in android ios server
  do
    if ! gradle test ${name}
    then
      return 1
    fi
  done
  git push origin master
}
Now, you may instead want to look at a pre-push hook which would probably be much better since whether you run your script or not, the push won't happen unless the hook succeeds.