Что я знаю
Я хорошо знаком с общими настройками, найденными в build.gradle
minSdkVersion 21
- означает, что устройство Android должно по крайней мере иметь уровень API Android 21или больше для установки моего приложения
(это должно быть как можно меньше, чтобы достичь максимального числа пользователей при сохранении всех критически важных функций приложения)
targetSdkVersion 26
- означает, что моеприложение было «разработано» для этой версии API Android, чтобы устройство знало, следует ли запускать его в режиме совместимости и т. д.
(это должно быть как можно выше, чтобы разработчики могли обновляться вместе с ним).с любыми устаревшими вызовами API)
Что меня смущает
Но что насчет sourceCompatibility
и targetCompatibility
, которые указывают версию JDK для использования?Кажется, я получаю противоречивые сообщения.
Например, когда я просматриваю настройки структуры моего проекта в Android Studio, мне кажется, что я получаю рекомендации по использованию JDK по умолчанию, который поставляется с Android Studio - version 1.8
.

Однако, когда я читаю другие источники в Интернете, такие как:
Похоже, я получаю сообщение о том, что Android в основном работает наversion 1.7
и поддерживает только небольшое подмножество version 1.8
, что предполагает логический выбор version 1.7
.
Резюме
Вопрос 1)
Какую версию следует использовать для максимальной совместимости с новыми и старыми устройствами Android?version 1.7
или version 1.8
?(Имеет ли это значение? См. Вопрос № 2)
Вопрос 2)
Является ли sourceCompatibility
и targetCompatibility
(и версия JDK) чем-то, что толькоиспользуется во время компиляции из файлов .java
в файлы .class
?Таким образом, после генерации Java-байтового кода любая версия (version 1.7
vs version 1.8
) больше не будет иметь значения - поскольку байт-код будет одинаковым и совместимым независимо.
Или это то, что будет сохраняться вплоть до конечного пользователя (например, если JVM их телефона Android не умеет читать version 1.8
байт-код, он просто взорвется)
Вопрос 3)
Что произойдет, если я установлю minSdkVersion
на очень низкое значение (например, 10
) при установке sourceCompatibility
и targetCompatibility
на очень высокое значение (например, version 1.8
)?
Могу ли я слепо полагаться на Android Studio для обнаружения всех возможных несовместимостей?Например, если он успешно создаст APK, я гарантирую, что он будет работать?
Или он все еще будет собираться и позволит пользователям с API >= 10
установить его, но просто взорвется во время выполнения, если JVM устройства пользователя будет работатьне могу запустить version 1.8
?