Сайт для программистов

вторник, 4 октября 2016 г.

Работает на эмуляторе, не работает на устройстве

На прошлой неделе пришло сразу два письма с просьбой помочь с проблемой - любая программа запускалась на эмуляторе, но отказывалась запускаться на реальном устройстве.
Вообще я стараюсь не отвечать на такие письма. Причины неработоспособности приложения могут быть самыми разными, универсального ответа не существует, а я не экстрасенс.
Но тут был очень странный случай. Строго говоря, причину ошибки можно узнать, если запустить приложение из студии и почитать сообщения об ошибках в Android Monitor.
Но у одного из пользователя была и другая проблема - студия не видела его телефон, поэтому он не мог прочитать логи ошибок.
Здесь надо сделать отступление. На мой взгляд, любой разработчик должен добиться того, чтобы студия умела замечать реальное устройство. Искать драйвера, спрашивать на форумах и т.д. Никакой эмулятор не заменит устройство. Можно даже купить самое дешевый китайский телефон и проверять программы на нем. Заодно решите и другую проблему - проверите работоспособность программы на слабом устройстве с ограниченной памятью, маленьким экраном, слабым процессором.
Вернемся к проблеме. Прошу прислать APK мне на почту, устанавливаю на своё устройство и запускаю. Действительно, приложение валится с ошибкой. Тогда запускаю студию, подключаю устройство к компьютеру. Студия выводит различные сообщения. Копирую их и начинаю искать в интернете. Натыкаюсь на любопытную информацию - телефоны с версией Android 4.x некорректно работают с InstantRun. Для решения проблемы советуют отключить его.
Для начала устанавливаю программу на другом устройстве под Android 5.0. Действительно, на этом устройстве приложение нормально запускается. Отписываюсь и жду ответа. Через некоторое время получаю ответ, что все получилось. При отключенном InstantRun программа стала запускаться на его телефоне.
Никогда бы не поверил, что такое возможно. Но чудеса происходят. Как отключить InstantRun ищите самостоятельно.

вторник, 20 сентября 2016 г.

Android Studio 2.2

Вчера 19 сентября наконец-то вышла новая стабильная версия 2.2. До этого её долго мурыжили в бете-версиях, постоянно что-то допиливая. Казалось бы, после такой кропотливой работы должен выйти идеальный продукт. Да нет-то было.
Обновившись из предыдущей версии, запускаю новый проект. Вылезает ошибка

Error:CreateProcess error=216, This version of %1 is not compatible with the version of Windows that you're running. Check your computer's system information and then contact the software publisher

Время близится к ночи. Но хочется хоть немного поработать с новой версией. Начинаю искать решение проблемы. Нажимаю на кнопки, меняю настройки. Ничего не помогает. И тут я решаюсь на радикальные меры. Удаляю вообще эту студию и SDK. За несколько лет в компьютере скопилось мусора на несколько гигабайт(!) от предыдущих версий студий ветки 1.хх, 1.5х, 2.х, которые были несовместимы с новыми выходящими версиями, но почему-то не удалялись автоматически. Видимо, разработчики Гугла не привыкли убираться за собой. Я на всякий случай старые файлы не трогал. Но всякому терпению приходит конец.
Устанавливаю студию с чистого листа. Впрочем, это не помогло. Та же ошибка. Сочувствую новичкам, которые начинают первое знакомство с программированием под Android. Если у них вылезет такая же ошибка, то такое неприветливое знакомство может и отбить охоту изучать написание программ.
А я продолжаю искать решение проблемы. Время перевалило за полночь. Наконец-то какое-то действие сдвинуло проблему с мёртвой точки. Ошибка исчезла. Правда появилась другая. А потом и третья. Но эти ошибки были уже знакомы по предыдущим версиям и меня уже не пугали. В конце концов я победил проблему и студия стала запускаться.
Так как мои действия были спонтанными, описать решение проблемы не смогу. Честно говоря, ошибки при запуске новых версий студии (а раньше и в Eclipse) не являлись единичными случаями. На моей памяти такое происходило не раз на моём компьютере. А также я получал письма от других пользователей с проблемами с установкой, когда у меня таких проблем не было. Это как лотерея - кому-то повезёт и всё заработает с первого раза, а кто-то постоянно будет мучиться, меняя различные настройки. Рекомендую купить бубен шамана. Говорят, танцы с бубнами очень помогают.
Сама студия сильно изменилась. Я бы даже сказал, революционно изменилась, странно что ей дали версию 2.2, а не 3.0
Новый редактор разметки экрана, новые значки, новые диалоги добавления классов, новые пункты меню и многое другое. А значит, скоро снова придётся переписывать уроки на сайте. 

понедельник, 4 июля 2016 г.

Пробелы в строковых ресурсах

На моём форуме читатель поделился проблемой, с которой я сам не сталкивался. Оказывается, если в строковых ресурсах строка начинается или заканчивается символом пробела, то пробел обрезается. Чем это чревато? Допустим, мы хотим соединить две строки.


<string name="cat">Моему коту </string>
<string name="catAge">5 лет</string>

String firstMessage = getResources().getString(R.string.cat);
String secondMessage = getResources().getString(R.string.catAge);

mTextView.setText(firstMessage + secondMessage);
Несмотря на пробел после слова коту, на экране мы увидим предложение без пробела. Старайтесь избегать таких вариантов с пробелами, как правило такой надобности нет. Пробел всегда можно вставить в коде программно.

// вставляем пробел между двумя словами
mTextView.setText(firstMessage + " " + secondMessage);
Но если по каким-то причинам, вам нужны именно такие строковые ресурсы с пробелами в начале или в конце слов, то самый простой способ - использовать кавычки.

<string name="cat">"Моему коту "</string>
Можно использовать также управляющие символы или код Unicode для символа пробела. Но вряд ли вы их будете держать в голове. Поэтому просто используйте кавычки и будет вам счастье.

пятница, 15 апреля 2016 г.

Error launching Android Studio

После установки Android Studio 2.0 столкнулся с неприятной проблемой. Иногда, запуская студию, получаю диалоговое окно с ошибкой. К сожалению, скриншот не сделал. Но я сделал текстовую копию (Кстати, если вы не знали - в диалоговом окне вы можете нажать клавиши Ctrl+C и получить текст из окна)

---------------------------
Error launching Android Studio
---------------------------
Failed to create JVM: error code -4.
JVM Path: C:\Program Files\Java\jdk1.7.0_45\jre
If you already have a 32-bit JDK installed, define a JAVA_HOME variable in 
Computer > System Properties > System Settings > Environment Variables.
---------------------------
OK   
---------------------------

Если в следующий раз появится такая ошибка, то постараюсь не забыть о скриншоте.
Upd. Сделал скриншот сегодня. Студия запустилась со второго раза.



Проблема появилась на ровном месте. Вчера запускалось, сегодня нет. Если попробовать поискать решение в ваших интернетах, то можно встретить ответы аж за 2010 год для Эклипса. Эти ошибки связаны с тем, что не прописаны пути к файлам Java и даются советы, как это сделать.
Но у меня все давно прописано, вчера работало и я ничего не менял. Перезагрузка студии и самой системы тоже не помогало. 
А потом вдруг на пятый или шестой раз загрузка пошла. Магия!
Впервые такая история произошла вчера. Сегодня тоже самое. На пятый-шестой раз студия загрузилась. Фигня какая-то. Может, это Обама? Кто-то должен ведь ответить за это безобразие.

среда, 2 марта 2016 г.

Нужно ли изучать Kotlin

Те, кто интересуется разработкой под Android, наверняка, в курсе, что вышла версия Kotlin 1.0. Сразу встал вопрос - нужно ли его изучать?
Я почитал несколько статей от разработчиков языка, послушал их выступления на конференциях и решил поделиться своим мнением.
Во-первых, мне нравится название - первые три буквы нового языка намекают на кота. Это плюс. Больше никаких преимуществ не вижу. Это была шутка.
Взлетит или не взлетит новый язык зависит от многих факторов. Но мне представляется следующее. Kotlin разрабатывался не компанией Google, а компанией JetBrains, которая имеет непосредственное отношение к Android Studio. Но одно дело - инструмент разработки, и совсем другое дело - язык программирования. Google и так имеет проблемы с Oracle по поводу Java и постоянно бодается с ним в судах. Поддерживать чужой для них язык им тоже не с руки. Насколько я понял, Google просто наблюдает за развитием ситуации, но никак не комментирует события. Она никак не мешает использовать новый язык, если кому-то нравится.
JetBrains заявила, что переписала часть своих проектов на Kotlin. Мне кажется, это и есть ответ на вопрос. Язык Kotlin вполне может использоваться в корпоративной среде у компаний, которые пишут серьёзные и сложные приложения. Если вы мечтаете работать в JetBrains, то изучение Kotlin вам пригодится.
Если вы экспериментатор, любитель всего нового, а также планируете работать в серьёзных компаниях, то знание Kotlin лишним не будет.
Для обычных разработчиков изучать новый язык смысла не вижу. Не забывайте, что хотя Kotlin является эволюционным ответвлением от Java, его синтаксис и другие вещи очень сильно разнятся. Кода на Java и для Android написано очень много. Если вы только изучаете Android, то всегда есть вероятность, что найдёте ответ на свою проблему на форумах. С Kotlin всё будет значительнее сложнее. 
Решайте сами.

четверг, 11 февраля 2016 г.

Head First. Программирование для Android

После небольшого затишья в книжных магазинах появилась новинка - "Head First. Программирование для Android"


Это первая книга в 2016 о разработке под Android. Хотя на самом деле американское издание вышло в прошлом году. Тем не менее, эта хорошая новость. Вроде это первая книга, где уже полноценно описывается процесс создания приложений в Android Studio, а также рассказываются о новинках - Material Design, RecyclerView, CardView и других полезных вещах.
Отдельно порадовало, что термин Activity перевели как активность. Помните мой пост на эту тему?
На этот раз я не стал покупать себе бумажное издание, а купил электронную версию на сайте издательства "Питер". На самом деле там нет ничего принципиально нового для меня, но хочется поддержать издательство, которое продолжает переводить зарубежных авторов.
Книга содержит хорошие и полезные примеры, которые будут интересны разработчикам, которые хотят повысить свой уровень.
Если вы предпочитаете бумажную версию, то можете заказать на сайте издательства или на Озоне - Head First. Программирование для Android

пятница, 22 января 2016 г.

Как не нужно задавать вопросы

Мне на почту приходят вопросы. Ещё на мой форум приходят вопросы. Иногда я читаю вопросы на других русскоязычных форумах о разработке под Android. И часто наблюдаю ситуацию, когда вопрошающий не может толком сформировать свою мысль. Ему кажется, что он всё обстоятельно объяснил, но на самом деле это не так. Вопрос понятен только ему одному, а для других это выглядит как поток незамутненного сознания. Читаешь такой вопрос и думаешь, а что сказать-то хотел? Вывод - учитесь формировать свои мысли. Иначе ответа не дождётесь. Порой даже не хочется переспрашивать и задавать наводящие вопросы, понимая, что переписка затянется надолго.

Вторая часть читателей не стесняясь задаёт вопросы, даже не потрудившись самостоятельно поискать ответ. Можно вставить задаваемый вопрос в строку поиска любого поисковика и получить ответ в первых ссылках. Но странные люди предпочитают, чтобы это сделали за них. Я этого делать точно не буду.

Третья часть считает меня экстрасенсом. Приходит такое письмо: "Я всё делал по описанию на вашем сайте, а у меня ничего не работает. Почему?" К сожалению, после окончания Хогвартса с отличием, я дал обязательство не использовать полученные знания на территории России и не могу использовать свои волшебные способности для ответа на ваш вопрос. Теперь я буду удалять подобные вопросы с форума, а письма удалять с почтового сервера.

В общем, моё состояние после получения подобных вопросов похоже на одного кота-мема. Обычно, этот мем сопровождается текстом, который начинается со слов: "Честно сказать я ...". Продолжать не буду, гугл вам в помощь.