Вынесение порицания андроиду

Понегодую-ка на андроид с явой. Нубство, наверное, но чего уж, я в первый раз столкнулся.
В двух словах, как пишется приложение? Один экран это одна так называемая активность. Состоит из xml файла с описанием внешнего вида (кнопок, картинок, текстовых полейи всего такого) и файла с собственно кодом на яве. Без явы всё просто выглядит, но ничего не понажимаешь, а без xml что-то там наверное работает, но результатов не видно. Как-то так.
И в двух словах, как работает кнопка? Кнопке надо назначить обработчик. Функция, которая будет вызываться по нажатию на кнопку. Назначить обработчик можно в коде — сначала создать объект типа кнопка, потом найти по идентификатору из разметки нарисованную кнопку и дать понять, что это одно и то же. Потом собственно присовить обработчик. А можно в xml к кнопке добавить всего одну строчку:
android:onClick=»Ololo»
Ololo это и будет именем функции, которая вызовется по клику. Очевидно, что второй способ гораздо удобнее. Так я и подумал, по-быстрому описал все свои сорок кнопок и давай думать о более сложных вещах. Пишу потихоньку, изредка запускаю всё то на эмуляторе, то на своём телефоне, всё работает, всё классно. Решаю, что пора бы и бета-тестирование провести.
А запускаю как? В среде разработки есть кнопка «запустить», по которой автоматом создаётся apk, закидывается на подключенное устройство (виртуальное или реальное, без разницы), устанавливается там и запускается. Нажал одну кнопку, подождал, тестируешь. Удобно!
А бета-тестирование провести как? Каждого ж за руку к себе домой не отведёшь, телефон по проводу к компу не подключишь. Надо создать apk и раздавать его как хочешь, а устанавят и запустят сами, вручную, чай не маленькие. Создаётся такой apk тоже одной кнопкой, тоже очень удобно. Создал, кинул самому себе в телеграм, пошёл в кафе Одесса к Хорсу с Сойером и давай хвастаться, пробуйте мол, пересылаю. Запускает его Хорс, нажимает на что-то — приложение падает. Вот стыдоба же! У меня всё работает, а у него нет. И у Сойера нет. Поначалу списал всё на самсунг гэлакси эс 7 эдж, настолько хороший телефон, что на нём всё работает, а у вас нет, отсосите. А сам думаю — ну почему кнопки с буквами нажимаются нормально, а кнопки «сдаться» и «хэлп» нет? Непонятно. Дальше больше, на следующий день, в гостях у родителей ставлю игру на мамин гэлакси эс 4 — то же самое, не работает. Подумываю уже изъять её телефон для дебага, но тут оказывается, что и у жены ничего не работает! Ладно, её телефон всегда под рукой, вот на нём дома и гляну в чём косяк.
И что вы думаете? Падает всё из-за того, что нет, оказывается, такого обработчика, который назначен кнопке. Но он есть, вот он, собственными глазами вижу! Вот же, абсолютно так же описан, как и те, что запускаются нормально. Все назначены одинаково, из разметки. Одни работают, другие нет. И вишенка на торте — не работают именно в той версии apk, что создаётся для распространения, а не сразу для запуска. То есть самсунг гэлакси эс 7 эдж тут не при чём, на нём всё точно так же падает. Н — ненависть. Методом научного тыка назначил обработчики этим кнопкам в коде, убрав их из разметки — всё заработало.
Но как так-то?! Как может один и тот же подход к одним и тем же вещам в одном случае работать, а в другом нет? И зачем делать разные версии приложения (рабочую и нет) по кнопкам Run и Build?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *