Ошибка «ClassNotFoundException» при первом запуске Android-проекта на Java почти всегда означает, что в файле AndroidManifest.xml не объявлена главная Activity или указан неверный пакет — проверьте атрибут android:name внутри тега <activity> до того, как искать проблему в коде. Это типичная точка входа в тему: Java остаётся одним из двух официальных языков разработки под Android наряду с Kotlin, и понимание его работы на этой платформе открывает путь к созданию собственных приложений.
В этой статье разберём, как устроена связка Java и Android, какие инструменты понадобятся, чем мобильная Java отличается от «десктопной» и какие подводные камни ждут начинающего разработчика. Материал рассчитан на тех, кто либо уже знаком с основами Java, либо только выбирает язык для старта в мобильной разработке.
Почему Java стала языком Android
Когда компания Google представила платформу Android, в качестве основного языка разработки был выбран Java. Причины практичные: огромное сообщество программистов, зрелая экосистема библиотек и кроссплатформенность самого языка. Приложения компилируются не в машинный код процессора, а в байт-код, который выполняется виртуальной машиной.
На современных версиях Android используется среда выполнения ART (Android Runtime), пришедшая на смену более ранней Dalvik. ART применяет опережающую компиляцию (AOT): при установке приложения байт-код частично преобразуется в нативный, что ускоряет запуск и работу программы. Для разработчика это происходит прозрачно — вы по-прежнему пишете обычный Java-код.
⚠️ Внимание: Java на Android — это не полноценная Java SE. Некоторые пакеты стандартной библиотеки отсутствуют или работают иначе, а графический интерфейс строится не на Swing/AWT, а на собственном фреймворке Android. Код «десктопного» приложения перенести без переработки не получится.
Что нужно для старта: инструменты разработчика
Официальная среда разработки — Android Studio, основанная на IntelliJ IDEA. Она включает редактор кода, эмулятор, инструменты профилирования и систему сборки Gradle. Для работы потребуется компьютер с достаточным объёмом оперативной памяти: среда вместе с эмулятором заметно нагружает систему, поэтому 8 ГБ RAM считаются комфортным минимумом.
Порядок подготовки рабочего места выглядит так:
- 📥 Скачайте и установите Android Studio с официального сайта разработчиков — установщик сам подтянет нужную версию JDK.
- 🧩 Через встроенный SDK Manager установите платформу Android SDK нужной версии и инструменты сборки.
- 📱 Создайте виртуальное устройство (эмулятор) или включите отладку по USB на реальном смартфоне в разделе «Для разработчиков».
- 🚀 Создайте новый проект через мастер
File → New → New Project, выбрав шаблон с пустой Activity и языком Java.
☑️ Проверка готовности к первому запуску
Структура Android-проекта на Java
Типовой проект состоит из нескольких обязательных частей. Исходный код лежит в каталоге app/src/main/java, ресурсы (разметка, строки, изображения) — в app/src/main/res, а манифест приложения — в файле AndroidManifest.xml. Именно манифест сообщает системе, какие компоненты есть в приложении и какая Activity является стартовой.
Центральный элемент приложения — Activity, экран с пользовательским интерфейсом. Простейшая Activity на Java выглядит так:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Метод onCreate() вызывается при создании экрана, а setContentView() связывает код с XML-разметкой интерфейса. Разметка описывается декларативно: кнопки, текстовые поля и контейнеры задаются в файле res/layout/activity_main.xml.
Жизненный цикл Activity: что нужно понимать
Ключевое отличие мобильной разработки от десктопной — система может в любой момент приостановить или уничтожить ваше приложение, например при входящем звонке или нехватке памяти. Поэтому каждая Activity проходит через предсказуемую цепочку состояний, и разработчик обязан корректно обрабатывать переходы между ними.
| Метод | Когда вызывается | Что обычно делают |
|---|---|---|
onCreate() | Создание экрана | Инициализация интерфейса и данных |
onStart() | Экран становится видимым | Регистрация слушателей |
onResume() | Экран получил фокус | Запуск анимаций, камеры |
onPause() | Экран теряет фокус | Сохранение несохранённых данных |
onDestroy() | Уничтожение Activity | Освобождение ресурсов |
Практическое следствие: данные, введённые пользователем, нужно сохранять до того, как Activity будет уничтожена, а не в момент закрытия приложения. Игнорирование жизненного цикла — самая частая причина «потери данных» и падений у начинающих разработчиков.
Java против Kotlin: что выбрать
С 2019 года Google официально называет Kotlin приоритетным языком для Android, однако Java полностью поддерживается и никуда не исчезает. Оба языка компилируются в один и тот же байт-код и могут свободно смешиваться в одном проекте.
Различия скорее в удобстве. Kotlin лаконичнее, имеет встроенную защиту от NullPointerException и корутины для асинхронности. Java — многословнее, но проще для понимания новичками, по ней больше учебных материалов и она остаётся стандартом в корпоративной разработке и вузах. Если вы уже знаете Java, переходить на Kotlin немедленно не обязательно: навыки работы с Android SDK переносятся между языками почти один в один.
- ☕ Java — больше учебников, классическая строгая типизация, проще найти legacy-код для изучения.
- 🎯 Kotlin — меньше шаблонного кода, null-safety, рекомендован Google для новых проектов.
- 🔀 Оба языка используют одинаковые API Android и одинаково собираются через Gradle.
Типичные ошибки новичков и их решения
Первая и самая известная проблема — NullPointerException. На Android она часто возникает при обращении к элементу интерфейса до вызова setContentView() или при поиске View с несуществующим идентификатором через findViewById(). Проверяйте, что ID в разметке и в коде совпадают, включая регистр символов.
Вторая группа ошибок связана с потоками. Сетевые запросы и тяжёлые вычисления нельзя выполнять в главном (UI) потоке — система завершит приложение с ошибкой NetworkOnMainThreadException или покажет диалог «Приложение не отвечает». Для фоновой работы используются Thread, ExecutorService или библиотеки вроде Retrofit с асинхронными вызовами.
⚠️ Внимание: не храните ссылки на Activity или Context в статических полях. Это классическая причина утечек памяти: уничтоженная системой Activity не сможет быть освобождена сборщиком мусора, пока на неё существует статическая ссылка.
Как читать стектрейс в Logcat
Откройте вкладку Logcat в Android Studio и найдите строки, начинающиеся с «Caused by». Первая такая строка указывает тип исключения и файл с номером строки вашего кода, где произошёл сбой. Клик по синей ссылке в логе переносит курсор прямо к проблемному месту.
Отладка и тестирование на реальном устройстве
Эмулятор удобен для быстрой проверки, но финальное тестирование стоит проводить на физическом смартфоне: производительность, работа сенсоров и поведение батареи на эмуляторе воспроизводятся неточно. Для подключения активируйте на телефоне режим разработчика (обычно — несколько нажатий на пункт «Номер сборки» в разделе «О телефоне»; точный путь зависит от оболочки производителя), затем включите Отладка по USB и подтвердите разрешение при первом подключении к компьютеру.
Если устройство не определяется, проверьте кабель (некоторые поддерживают только зарядку), переключите режим USB-подключения на «Передача файлов» и убедитесь, что на компьютере установлены драйверы устройства — для Windows они часто ставятся отдельно с сайта производителя смартфона.
⚠️ Внимание: не публикуйте приложение с включённым флагом отладки в манифесте. Перед сборкой релизной версии убедитесь, что вbuild.gradleдля релизной конфигурации отключён параметрdebuggable, а приложение подписано релизным ключом.
FAQ: частые вопросы о Java на Android
Можно ли писать Android-приложения на Java без Android Studio?
Технически сборка возможна через Gradle из командной строки, но на практике Android Studio — стандарт индустрии: она автоматически управляет SDK, эмуляторами и подписью APK. Альтернативные редакторы существенно усложнят настройку без выигрыша в результате.
Какую версию Java поддерживает Android?
Поддерживаемая версия языка зависит от версии Android Gradle Plugin и настроек проекта. Современные версии плагина позволяют использовать значительную часть возможностей новых выпусков Java, но точный перечень стоит уточнять в официальной документации Android Developers для вашей версии инструментов сборки.
Стоит ли учить Java, если все говорят про Kotlin?
Да, если вам так удобнее начинать. Огромная часть существующего кода и документации написана на Java, а концепции платформы — Activity, фрагменты, ресурсы, жизненный цикл — полностью переносятся на Kotlin. Знание Java также полезно за пределами Android: в серверной и enterprise-разработке.
Почему приложение падает при повороте экрана?
При смене ориентации система по умолчанию уничтожает и пересоздаёт Activity. Если состояние не сохранено через onSaveInstanceState() или ViewModel, данные теряются, а обращение к устаревшим ссылкам вызывает падение. Проверьте обработку жизненного цикла — это самая вероятная причина.
Можно ли запустить обычную Java-программу (JAR) на Android?
Напрямую — нет. Android не включает стандартную JVM и не исполняет JAR-файлы: приложения должны быть собраны в формат APK/AAB и использовать Android API. Существуют сторонние приложения для запуска Java-программ, но их возможности и совместимость ограничены, и для разработки под Android они не подходят.