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

среда, 24 января 2018 г.

Kotlin убивает Android Studio

Решил сегодня создать новый проект на основе "Basic Activity". С помощью мастера шаблона прохожу все шаги, нажимаю кнопку "Finish" и студия генерирует дефектный проект с кучей ошибок и отсутствующими некоторыми файлами.
Безобразие. Начинаю искать информацию в интернете. Оказалось, причина в очередном обновлении Kotlin под номером версии 1.2.20.
В качестве решения можно отключить Kotlin - Files | Settings | Plugins | снять флажок Kotlin.
Далее попробуйте перезапустить студию.
Если вам нужен Kotlin, то тогда удалите новую версию и установите предыдущую 1.20.10 - она вроде рабочая и не ломает студию.
Вообще, такие косяки в студии происходят постоянно. Недавно вышла очередная предварительная версия студии 3.1, но буквально через несколько часов попросили всех откатиться назад. Несколько лет назад такое было и с релизной версией.
Жизнь - это боль. Не обращаем внимания, работаем дальше.
Upd. Мне подсказали, что вышло обновление. Действительно, вручную обновил до версии 1.2.21 и проект запустился. Странно, что студия не предложила обновиться сама. Версия вышла вчера, может студия не успела узнать об этом. Будем ждать следующих багов.


суббота, 28 января 2017 г.

Прощай, Parse.com

Ровно год назад облако-сайт Parse.com заявил о своём закрытии, их купил Facebook. Послезавтра сервера должны окончательно выключить.
Я использовал сайт в своих проектах, но это не носило глубокий характер, поэтому я легко пережил эту новость. За год у меня не было потребностей использовать облачные возможности, поэтому я не спешил куда-то мигрировать и оставался на сайте до последнего.
Буквально недельку назад я решил попробовать другой сайт для пуш-уведомлений - это OneSignal, А пару дней назад я перенес данные с Parse.com на сайт Back4App.com.
Миграция прошла просто - регистрация, указание учетки с Parse, нажатие на волшебную кнопку "Мигрировать".
Так как продукт Parse.com сделали с открытыми исходниками, то на новом сайте практически всё тоже самое. Я даже открыл несколько своих учебных примеров из своих курсов и проверил. Все работает как прежде. Нужно только заменить пару строк кода.
Единственно, что у Back4App для пуш-уведомлений используется решение от Firebase, Поэтому не вижу смысла делать пуши с этого сайта, можно обойтись без посредника и самому настроить консоль в Firebase, Это дело предпочтений.
Прощай, Parse.com. Ты мне нравился.

вторник, 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 всё будет значительнее сложнее. 
Решайте сами.