Не все пользователи знают, как добавлять виджеты в Android

Именно к такому выводу я пришел.

Лично я столкнулся с этой проблемой сначала на виджетах «KM Пластилиновые виджеты«, когда начал получать письма и плохие рейтинги с общей для всех фразой: «Не могу их установить».

Недавно проблема проявилась в виджетах КМ Рождественские виджеты, которые сильно просели в рейтинге и причина была аналогичная — пользователи не знают как добавить виджеты.

Конечно, многие пользователи умеют пользоваться виджетами в Android,  но и достаточно небольшое количество юзеров могут изрядно подпортить рейтинг Вашему приложению.

Выход из ситуации

Для своих виджетов я стал добавлять специальную активность, в которой описано, что виджет корректно установлен, и если пользователь желает его добавить, то нужно изучить определенные инструкции.

Как добавить виджеты в Android

Сразу хочу заметить, что решения типа сделать скриншоты не позволят Вам из-за фрагментации лаунчеров абсолютно для всех объяснить  как добавлять виджеты.

В коде манифеста можно добавить активность следующим образом:
<activity <android:name="com.mikhaylov.kolesov.plasticinechristmaswidgets.KMLauncherActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity>

В этом случае пользователь после загрузки в Google Play видит не кнопку «Удалить», а кнопку «Открыть». По данной кнопке открывается созданная активность. Дополнительно создается ярлык на рабочем столе, что позволяет пользователю найти и его и не считать, что виджет не установлен, а по клику он поймет, что эта операция отличается от обычных приложений.

Лайфхак: Как бесплатно тестировать приложения для Android на 20+ девайсах

На прошедшей Уральской конференции веб-разработчиков UWDC 2014 во время моего доклада был вопрос о том, как мы тестируем приложения для Android на большом количестве девайсов. Этот лайфхак был придуман мной от того, что у меня не было средств, чтобы держать у себя «Зоопарк» Android-устройств. Была потребность тестировать приложения на 20+ девайсах и ставить рейтинг+обзор для продвижения в ТОП-новых приложений. Сразу оговорюсь, что я предварительно у себя тестирую приложения на 4х своих устройствах, после чего я публикую их в Google Play и приступаю к нижеописанному лайфхаку. Итак, рассказываю. В нашем (любом крупном) городе есть 20+ салонов сотовой связи, в которых можно найти как минимум 20+ различных Android-девайсов. Работники салонов сотовой связи обычно заняты своими «делами», поэтому делаем следующие шаги:

  1. Чтобы уже совсем не наглеть — лучше тестить в салоне на одном, двух девайсах;
  2. Берете с собой что-то, что может быть точкой доступа (у меня эту роль играет iPad). Это нужно, потому что не всегда вы сможете в салоне поймать Wi-Fi;
  3. Вы в салоне. Выбираем девайс. Открываем Google Play;
  4. Жмем «создать Аккаунт», выбираем логин и пароль. Особенность в том, что заходить в почтовый ящик затем нет никакой необходимости, и тем более вводить повторно пароль;
  5. Google Play попросит вас ввести CAPTCHA, секретный вопрос и ответ.
  6. В конце процесса спокойно качаем ваше приложение, тестим, ставим рейтинг. Как бонус — посетители этого салона при просмотре данного девайса будут видеть ваше приложение;
  7. Если есть баги, смотрим версию ОС, девайс и ищем у друзей, для отладки;
  8. Выбираем следующий девайс.

 

Фрагментация Android на примере фрагментного шейдера.

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

Я использую фрагментный шейдер, чтобы сделать ночь в обоях. Для этого я умножаю текстуру на вектор 0.5 0.5 0.5 , что позволяет затемнить всю сцену. Обычно, и это корректно, я использую такой фрагментный шейдер:

precision mediump float;
uniform sampler2D u_texture;
varying vec3 v_vertex;
varying vec2 v_texcoord;
varying vec2 v_texcoordAlpha;
void main() {
 vec4 one=texture2D(u_texture, v_texcoord);
 vec4 two=vec4(0.5, 0.5, 0.5, 1.0);
 one.a=texture2D(u_texture, v_texcoordAlpha).r;
 gl_FragColor = one * two;
}

В данном коде, по мимио обработки текстуры в атласе, отвечающей за альфа канал, я произвожу умножение на вектор

vec4 two=vec4(0.5, 0.5, 0.5, 1.0);

Данный код работает на всех устройствах корректно.

Если переписать шейдер :

precision mediump float;
uniform sampler2D u_texture;
varying vec3 v_vertex;
varying vec2 v_texcoord;
varying vec2 v_texcoordAlpha;
void main() {
 vec4 one=texture2D(u_texture, v_texcoord);
 one.a=texture2D(u_texture, v_texcoordAlpha).r;
 one.r=one.r * 0.5;
 one.g=one.g * 0.5;
 one.b=one.b * 0.5;
 gl_FragColor = one;
}

По сути, работая с каждой компонентой R, G  или B в отдельности

one.r=one.r * 0.5;
one.g=one.g * 0.5;
one.b=one.b * 0.5;

мы получаем рабочую сцену на Google Nexus 5 и абсолютно нерабочую сцену на других устройствах типа Samsung Galaxy S3 или Galaxy Tab.