Мой Nexus 5 недавно обновился до Android 6. Неожиданно обнаружил, что при подключении Nexus к компьютеру проводник перестал отображать список файлов на девайсе.. Проверил настройки. В настройках Developers Options -> Select USB Configuration выбран режим MTP (Media Transfer Protocol). Ну и что за дела?
Ответ нашелся на форуме Nexus. Оказывается, при подключении Nexus к компьютеру на девайсе отображалось уведомление USB for charging. Touch for more options. Открыл его, вывались меню Use USB for. Выбрал Transfer files (MTP) и все заработало.
Виновата, конечно, моя невнимательность. Ведь все на экране написано :) И все же: почему в настройках указан один режим, а по факту девайс подключился в другом? Баг это или "фича"?
Update Похоже, все же "фича". Опцию USB for charging. Touch for more options приходиться менять каждый раз при подключении девайса к компьютеру. И, кстати, появляется она на экране залоканного девайса ни сразу, а с небольшой задержкой.
Показаны сообщения с ярлыком android. Показать все сообщения
Показаны сообщения с ярлыком android. Показать все сообщения
суббота, 17 октября 2015 г.
среда, 2 апреля 2014 г.
Отключение junit.framework.Assert в релизе Android-приложения
Как я уже писал, стандартные директивы assert по умолчанию отключены на Android-девайсах. Их необходимо включать (например командой
adb shell setprop debug.assert 1, после чего assert будет работать до перезагрузки девайса).
Альтернатива - junit.framework.Assert. И по функционалу побогаче, и работает на девайсах сразу, без дополнительных включений. При Null-анализе компилятор eclipse учитывает junit.framework.Assert точно так же, как обычный assert. Вроде бы, одни плюсы. Но: в релизе ассерты следует отключить. И вот тут требуются дополнительные телодвижения.
воскресенье, 2 февраля 2014 г.
REST под Android. Часть 3: библиотеки Square
В процессе работы над первой и второй частью статьи, я неоднократно натыкался на упоминание разнообразных библиотек компании Square, которые народ активно использует при реализации REST-клиентов. Приглядимся к этим библиотекам поближе.
пятница, 24 января 2014 г.
REST под Android. Часть 2: разрабатываем API
Первая часть статьи была посвящена вопросу реализации клиентского REST-приложения под Android. Корректная реализация требует использования одного из паттернов, предложенных Virgil Dobjanschi. Существует ряд подходящих библиотек, способных облегчить эту задачу. Наиболее интересной из них мне показалась RoboSpice.
Прежде чем переходить к разработке тестового проекта на RoboSpice, необходимо определиться с API для тестового проекта. Разумеется, можно взять одно из готовых API - благо их сейчас сотни. Однако гораздо интереснее написать свое, тем более, что это нетривиальный процесс. Рассмотрим, как пишутся REST API, какие инструменты для этого существуют, и попробуем реализовать простейшее тестовое API.
пятница, 17 января 2014 г.
REST под Android. Часть 1: паттерны Virgil Dobjanschi
В одном из проектов появилась необходимость написать REST-приложение под Android. Каким путем пойти, какие Android-особенности учесть, на какие библиотеки опереться в работе? Пришлось провести исследование. Результатами хочу поделиться.
пятница, 3 января 2014 г.
Контрактное программирование под Android
О пользе и преимуществах методики контрактного программирования (Design by Contracts, DBC) написано много. Вот несколько хороших статей:
- Теляков С.В. Проектирование по контракту. RSDN Magazine #1-2010
- Computer Programming/Design by Contract
- Todd Plessel. Design By Contract: A Missing Link In The Quest For Quality Software
- Building bug-free O-O software: An Introduction to Design by Contract
- пред-условия, которым должен соответствовать вызывающий код;
- пост-условия, которые гарантируются методом.
- Повышение надежности программы за счет систематической и гарантированной проверки входных данных.
- Исключение лишних проверок в коде. Корректность данных проверяется в методе, а не в вызывающем коде.
- Автоматическое документирование кода, создание спецификации API программного модуля.
- Косвенно: повышение эффективности статического анализа кода.
пятница, 23 ноября 2012 г.
Получение доходов с Google Play на расчетный счет ИП
В октябре 2012 вступили в силу новые правила получения платежей от продаж на Google Play и, одновременно, новая инструкция ЦБ РФ О порядке предоставления документов, связанных с проведением валютных операций (Инструкция Банка России от 04.06.2012 № 138-И - PDF). В результате, платежи с Google Checkout теперь можно получать напрямую на расчетный счет индивидуального предпринимателя. Это позволяет избавиться от работы с AdSense и связанных с ней морем вопросов.
Многие разработчики уже опробовали новую схему. Попробовал и я - на днях пришел первый платеж. Хочу поделиться подробностями организации работы с банком.
вторник, 13 ноября 2012 г.
Вызов функций Android из Unity3d
Unity3D - мощная система разработки 3D приложений, - поддерживает Android. Документация, к сожалению, очень скудная, да и сам процесс разработки - не сахар... Тем не менее, возможность создать Android-приложение есть.
В целом процесс разработки выглядит так. Вы создаете Android-проект, экспортируете его в jar-файл. Далее, помещаете этот jar файл в директорию проекта Unity: Assets\Plugins\Android\xxx.jar. В эту же директорию кладете AndroidManifest.xml, jar-файлы сторонних библиотек, которые задействованы в вашем проекте и ресурсы (папка res с той же структурой, что в обычном Android-проекте).
Следующий шаг - вызов функций, реализованных на стороне Android, из Unity. Вот на этом вопросе я и хочу остановиться поподробнее, т.к. здесь не все тривиально и есть подводные камни.
В целом процесс разработки выглядит так. Вы создаете Android-проект, экспортируете его в jar-файл. Далее, помещаете этот jar файл в директорию проекта Unity: Assets\Plugins\Android\xxx.jar. В эту же директорию кладете AndroidManifest.xml, jar-файлы сторонних библиотек, которые задействованы в вашем проекте и ресурсы (папка res с той же структурой, что в обычном Android-проекте).
Следующий шаг - вызов функций, реализованных на стороне Android, из Unity. Вот на этом вопросе я и хочу остановиться поподробнее, т.к. здесь не все тривиально и есть подводные камни.
воскресенье, 12 августа 2012 г.
Квест: как под Android выдрать кадр из видеофайла средствами FFMpeg и передать его на сторону Java.
Программирование под Android очень часто напоминает настоящий квест. Шаг влево, шаг вправо - и ты попадаешь на минное поле, полное багов, особенностей реализации, девайсо-зависимых проблем и т.п. И так происходит каждый раз, как только начинаешь реализовывать что-нибудь более менее нетривиальное. Вот свежий пример. Потребовалось мне извлекать кадры из видеофайла и показывать их на экране. Казалось бы - что может быть проще?
среда, 14 марта 2012 г.
Идентификаторы Android-контакта: ContactID и LookupKey. Нюансы и баги.
Согласно документации, контакт в Android характеризуется двумя идентификаторами: contactId и lookupKey. Предположим, мы создаем приложение, работающее с определенным контактом. Пример - мое приложение Animated Widget Contact Launcher, которое позволяет создавать для контактов виджеты быстрого доступа. Какой идентификатор контакта нужно хранить в настройках такого виджета - contactId или lookupKey? Или оба? Как правильно создавать ссылку на контакт? Практика показала, что вопрос не тривиален.
среда, 1 февраля 2012 г.
Тестирование Android приложений
Тестирование - тема очень многообразная. Разновидностей тестов масса, методик тестирования тоже, количество разнообразных инструментов просто огромно. Начинающему разобраться не просто. Но за что бороться есть, поскольку грамотная стратегия тестирования существенно улучшает качество приложения.
Данная статья - это каталогизированный набор ссылок по теме тестирования Android приложений, с краткими аннотациями. Я создал его для того, чтобы самому было удобнее разбираться во всем этом материале и выбирать оптимальную стратегию тестирования собственных Android приложений. Надеюсь, этот набор ссылок пригодится и вам.
Данная статья - это каталогизированный набор ссылок по теме тестирования Android приложений, с краткими аннотациями. Я создал его для того, чтобы самому было удобнее разбираться во всем этом материале и выбирать оптимальную стратегию тестирования собственных Android приложений. Надеюсь, этот набор ссылок пригодится и вам.
воскресенье, 29 января 2012 г.
Список языков с переводом названий (ISO 639-1).
Занимаюсь локализацией своего Android приложения Animated Widget Contact. Потребовалось найти список языков, поддерживаемых Android, с переводом названий. Т.е. в виде Ru-Russian-Русский, da-Danish-Dansk и т.д. Как ни странно, готовый список найти не удалось. Поэтому составил такой список самостоятельно, взяв за основу следующие источники: 1, 2, 3, 4. В список включил только языки имеющие двухбуквенный код по стандарту ISO 639-1, т.к. именно они актуальны для Android приложений. Вот что в итоге получилось.
пятница, 6 января 2012 г.
Статические анализаторы кода для Android-приложения.
Одним из путей улучшения качества кода приложения является регулярное применение статических анализаторов кода. Статический анализ кода позволяет находить ошибки в коде, отслеживать несоблюдение стандарта кодирования, находить "плохой" код, который может привести к проблемам в будущем, а так же неэффективный код, негативно сказывающийся на производительности в настоящем, строить метрики кода, находить полностью или частично одинаковые фрагменты кода и так далее.
Для разработчиков, ведущих кодирование в одиночку, статические анализаторы вещь вообще неоценимая. Ведь им некому показать код своего приложения. Так что "электронный помощник", способный грамотно выполнить "code review", может им здорово пригодится.
Вопрос - какие статические анализаторы кода доступны разработчику Android приложений? Для Java статических анализаторов существует множество (см. список lint приложений для Java в википедии), но не все они умеют работать с Android-приложениями и, тем более, учитывать их специфику.
Мне удалось отыскать следующие статические анализаторы кода, которые умеют работать с Android-приложениями:
Чтобы было интереснее сравнивать, я "натравил" каждый из этих анализаторов на одно и то же тестовое приложение. В качестве такового я взял код одной из ранних версий моего приложения Animated Widget Contact Launcher. Версию я выбрал годичной давности, багов и проблем в ней было вагон (с FindBugs на тот момент я был не знаком). Так что "что поискать" в ней точно было.
Для разработчиков, ведущих кодирование в одиночку, статические анализаторы вещь вообще неоценимая. Ведь им некому показать код своего приложения. Так что "электронный помощник", способный грамотно выполнить "code review", может им здорово пригодится.
Вопрос - какие статические анализаторы кода доступны разработчику Android приложений? Для Java статических анализаторов существует множество (см. список lint приложений для Java в википедии), но не все они умеют работать с Android-приложениями и, тем более, учитывать их специфику.
Мне удалось отыскать следующие статические анализаторы кода, которые умеют работать с Android-приложениями:
- Lint. "Родной" анализатор кода для Android, входит в состав Android SDK начиная с r16.
- FindBugs (бесплатный).
- Checkstyle (бесплатный).
- CodePro Analytix (бесплатный).
- PMD (бесплатный)
- Motodev App Validator (бесплатный). Входит в состав среды разработки MOTODEV Studio for Android. Есть online вариант.
- Klocwork Solo (платный). Доступна триальная версия
- JTest от Parasoft (платный).
- Julia (платный).
Доступен бесплатный online вариант.
Чтобы было интереснее сравнивать, я "натравил" каждый из этих анализаторов на одно и то же тестовое приложение. В качестве такового я взял код одной из ранних версий моего приложения Animated Widget Contact Launcher. Версию я выбрал годичной давности, багов и проблем в ней было вагон (с FindBugs на тот момент я был не знаком). Так что "что поискать" в ней точно было.
суббота, 17 декабря 2011 г.
Диалог выбора на Android или контекстное меню с картинками.
Задача выбора элемента из списка возникает в Android-приложениях регулярно. В принципе, для выбора элемента можно воспользоваться стандартным контекстным меню. Но у контекстного меню есть ряд ограничений:
Лучше сделать диалог. А поскольку подобные диалоги нужны сплошь и рядом, нужно сделать более-менее универсальный диалог, который подойдет для выбора элементов в большинстве случаев. О реализации такого диалога и пойдет речь.
- В контекстном меню функции вызова (
onCreateContextMenu) и обработки результатов(onContextItemSelected) реализуются в Activity. - Нельзя выбрать несколько элементов.
- В контекстном меню показывается только название элемента. Картинки не отображаются.
onCreateContextMenu и onContextItemSelected? Так не пойдет. Лучше сделать диалог. А поскольку подобные диалоги нужны сплошь и рядом, нужно сделать более-менее универсальный диалог, который подойдет для выбора элементов в большинстве случаев. О реализации такого диалога и пойдет речь.
понедельник, 11 июля 2011 г.
Производительность Android приложения.
Очень часто приходится слышать о проблемах с производительностью Android приложений. Начинаешь разрабатывать собственное приложение - точно, скорости не хватает, какие-то непонятные тормоза лезут... По моему опыту, вопросом - "что можно сделать, чтобы поднять производительность приложения на Android", - задаешься очень быстро. Особенно после первого релиза своего первого приложения :)
Традиционно в низкой производительности Android приложений винят Java. Но только ли Java виноват? Не только. Во многих случаях виноват вовсе не он.
Производительность приложения зависит от многих аспектов. И в первую очередь, от грамотности использования имеющихся в вашем распоряжении инструментов - языка программирования, библиотек, утилит. Повышение производительности - это комплексный вопрос, и подходить к нему нужно разносторонне.
Цель этой статьи - перечислить основные моменты, влияющие на производительность. Моменты, на которые стоит обратить самое пристальное внимание как при кодировании, так и при проектировании приложения.
Традиционно в низкой производительности Android приложений винят Java. Но только ли Java виноват? Не только. Во многих случаях виноват вовсе не он.
Производительность приложения зависит от многих аспектов. И в первую очередь, от грамотности использования имеющихся в вашем распоряжении инструментов - языка программирования, библиотек, утилит. Повышение производительности - это комплексный вопрос, и подходить к нему нужно разносторонне.
Цель этой статьи - перечислить основные моменты, влияющие на производительность. Моменты, на которые стоит обратить самое пристальное внимание как при кодировании, так и при проектировании приложения.
понедельник, 4 июля 2011 г.
Сбор статистики в приложении на Android
Всегда интересно знать, как пользователи работают с вашим приложением: какие функции наиболее востребованы, какие кнопки нажимаются, какие настройки меняются, какие ошибки совершаются. Неплохо так же представлять себе, что это за пользователи - какая версия прошивки у их девайсов, где они географически расположены и т.д.
Такая информация неоценима для разработчика, ведь с ее помощью можно оптимизировать юзабилити, определиться с приоритеностью функционала, найти пути повышения продаж. Вопрос только как такую статистику собирать.
Такая информация неоценима для разработчика, ведь с ее помощью можно оптимизировать юзабилити, определиться с приоритеностью функционала, найти пути повышения продаж. Вопрос только как такую статистику собирать.
пятница, 29 апреля 2011 г.
Android. Реализация SendEmail
Отправить email из приложения. Это типичная задача, с которой сталкиваешься при разработке под Android. И делов то всего - скопипастить готовый код. Но есть несколько особенностей, которые легко пропустить... и потратить кучу времени в поисках ошибки.
воскресенье, 20 марта 2011 г.
Android - установка и настройка среды разработки.
Программирование на Android начинается с установки Eclipse. В данной статье я рассмотрю порядок установки и настройки Eclipse для работы с Android под Windows. Причем постараюсь рассмотреть его "от" и "до", включая генерацию цифровой подписи, автоматизацию сборки приложения, настройку ProGuard и подключение средств статистического анализа.
воскресенье, 20 февраля 2011 г.
Как разделить Android приложение на Pro и Free версии.
Если вы разрабатываете бесплатное приложение под Android, то это совсем не значит, что оно не принесет вам доход. Путей монетаризации достаточно: показ рекламы, пожертвования пользователей, продажа специальной "Pro" версии приложения, в которой нет рекламы и/или есть дополнительный функционал.
Типичный сценарий таков. Вы разрабатываете Free версию приложения, в которой реклама есть. И предлагаете приобрести Pro версию, в которой рекламы нет. Бесплатность приложения привлекает большое количество пользователей. Больше пользователей - больше кликов по рекламе, больше покупок Pro версии.
Возникает чисто технический вопрос: как сделать две версии приложения - Pro и Free, - на базе одних и тех же исходных кодов? Вот об этом и поговорим.
Типичный сценарий таков. Вы разрабатываете Free версию приложения, в которой реклама есть. И предлагаете приобрести Pro версию, в которой рекламы нет. Бесплатность приложения привлекает большое количество пользователей. Больше пользователей - больше кликов по рекламе, больше покупок Pro версии.
Возникает чисто технический вопрос: как сделать две версии приложения - Pro и Free, - на базе одних и тех же исходных кодов? Вот об этом и поговорим.
пятница, 14 января 2011 г.
Даблклик по виджету на Android
Как известно, даблклика (даблтапа - double tap) на андроиде нет. Но порой требуется, чтобы одинарный и двойной щелчок по виджету приводили к разным действиям. Приходится реализовывать даблклик обходным путем. Например, так, как описано ниже.
Подписаться на:
Сообщения (Atom)