Про iTunes Match

Приобрел годовую подписку на iTunes Match. Цена невелика и составляет 800 руб. Преимущества очевидны: доступность музыки на всех Apple-устройствах; скачивается лишь то, что слушаем (т.е. не придется держать локально десятки ГБ музыки, все хранится в облаке); высокая степень совпадений с уже имеющимися в iTunes музыкальными композициями (соответственно, треки заменяются на более качественную по звучанию музыку). Кто-то говорит, что iTunes Match — это неофициальная легализация пиратской музыки, но я этого мнения не придерживаюсь. Все таки покупая музыку в том же iTunes, вы получаете файл с DRM-защитой от копирования, которая также подтверждает факт ее покупки.

Чтобы избежать хаоса после импорта музыки в iTunes перед отправкой в iCloud (особенно тем, кто никогда еще не использовал iTunes как медиплеер), можно проделать следующее:

1. Создать в iTunes нужный плейлист, перетащить туда соответствующие музыкальные файлы
2. Выделить в плейлисте эти файлы, ПКМ ->; «Загрузить в iCloud». После этих действий начнет работать iTunes Match: музыка будет просканирована, и если она уже имеется в магазине iTunes, то напротив трека появится статус «Совпадение», в противном случае файлы, у которых отсутствуют совпадения, будут загружены в iCloud, а напротив трека появится статус «Выгруженные».
3. Повторять пункты 1-2 до тех пор, пока не перенесете все музыкальные треки

Хорошую инструкцию по работе iTunes Match можно также найти здесь.

P.S.: локализация хромает…

iTunes_match

Баг локализации в Foursquare

Баг локализации в приложении Foursquare (build 5.3.5):

ADB-драйвер для Samsung Galaxy Tab

Если Windows 7 не сможет автоматически установить ADB-драйвер для Samsung Galaxy Tab, то необходимо установить набор ПО Samsung Kies, в комплекте с которым идут необходимые драйвера.

[Android] Про баг с отсутствием месяца «декабрь»

Отсутствие месяца «декабрь» в календаре приложения «Peolple» в OC Andoid 4.2 взбудоражило интернет-общественность, ибо наконец-то нашелся весомый косяк, позволяющий от всей души потроллить разработчиков.

Факт того, что данный баг был пропущен в релизе, свидетельствует о том, что и в Google тоже работают обычные люди, которым свойственно ошибаться. Однако, остается непонятным, как такой очевидный дефект мог быть пропущен службой тестирования. Возможно, виной тому является слишком большое доверие автотестам и TDD, ведь, если не ошибаюсь, так таковых ручных тестировщиков в Google нет, и в большинстве своем продукты проходят бета-тестирование.

Android: добавление русской раскладки

У меня есть служебный телефон Sharp SH-12C, который предназначен для японского оператора NTT Docomo (хотя, он отлично работает и в сетях других операторов). Т.к. сей аппарат предназначен сугубо для японского потребителя, то в нем присутствуют только два языка — непосредственно японский и английский. Беда состоит в том, что в качестве ввода для клавиатуры нельзя выбрать какой-либо другой язык, а ведь так хочется иметь русскую раскладку!

Как всегда, выход из этой, казалось бы, сложной ситуации есть. Необходимо скачать бесплатную программу GO Keyboard, которая является сторонней клавиатурой для Android. Самое главная фишка этой клавиатуры заключается в том, что для нее можно добавлять огромное количество разных языков ввода, в том числе русского. Да и сама по себе клавиатура выглядит очень брутально, и имеет в своем арсенале множество замечательных плюшек.

Возврат денег в App Store, Google Play и WP Marketplace

Статья о том, как попытаться вернуть деньги за купленное приложение в магазинах App Store, Google Play и Windows Phone Marketplace.

Тестирование Android-приложения с помощью Eclipse + Testdroid Recorder

1. Создайте учетную запись на сайте «Testdroid«.
2. Установите плагин «Testdroid» в Eclipse: «Help» -> «Eclipse Marketplace», в поле «Find» вписываем «Testdroid Recorder». После того, как плагин будет найден, жмите «Install».
3. В качестве примера создайте Android-проект из sample: «File» -> «New» -> «Other» -> «Android Project». В окне «New Android Project» задать имя проекта и выбрать «Create project from existing samples», нажать кнопку «Next». В следующем окне выберите нужную версию Android, которая имеет примеры. В окне «Select Sample» выберите «NotePad» и нажмите кнопку «Finish».
4. Выделите созданный проект и вызовите контекстное меню. Затем «Android Tools» -> «New Test Project». Задайте имя проекта <AddNoteTest> и сохраните проект.
5. Выделите созданный проект и вызовите контекстное меню. Затем «Build Path» -> «Configure Build Path…». В открывшемся окне перейдите на вкладку «Libraries», нажмите кнопку «Add External JARs» и выберите файл robotium-solo-<version>.jar (последнюю версию можно скачать на оф.сайте). Перейдите на вкладку «Order and Export» и отметьте чек-бокс напротив robotium-solo-<version>.jar. Нажмите кнопку «ОК».
6. В пакете com.example.android.notepad.test создайте новый класс с именем <AddNoteTest> и со следующим содержанием:

package com.example.android.notepad.test;
 
import android.test.ActivityInstrumentationTestCase2;
import com.example.android.notepad.NotesList;
import com.jayway.android.robotium.solo.Solo;
 
public class AddNoteTest extends ActivityInstrumentationTestCase2{
 
	private static final String APP_PACKAGE_NAME = "com.example.android.notepad";
	protected Solo solo;
	protected Integer screenWidth = null;
	protected Integer screenHeight = null;
 
	public AddNoteTest() {
		super(APP_PACKAGE_NAME, NotesList.class);
	}
 
	public void setUp() throws Exception {
		solo = new Solo(getInstrumentation(), getActivity());
	}
 
	public void testAddNote() throws Exception {
		solo.waitForActivity("NotesList", 500);
		solo.sleep(2500);
		solo.clickOnMenuItem("Add note", true);
		solo.waitForActivity("NoteEditor", 500);
		solo.sleep(2500);
		solo.clearEditText(0);
		solo.enterText(0, "Hello world!");
		solo.sleep(2500);
		solo.goBack();
		solo.waitForActivity("NotesList", 500);
		solo.sleep(2500);
		solo.clickOnMenuItem("Add note", true);
		solo.waitForActivity("NoteEditor", 500);
		solo.sleep(2500);
		solo.clearEditText(0);
		solo.enterText(0, "New");
		solo.sleep(2500);
		solo.goBack();
		solo.waitForActivity("NotesList", 500);
		solo.sleep(2500);
		solo.clickInList(1);
	}
 
	@Override
	public void tearDown() throws Exception {
		//Robotium will finish all the activities that have been opened
		solo.finishOpenedActivities();
	}
}

7. Выделите созданный проект и вызовите контекстное меню. Затем «Run As…» -> «Android JUnit Test». В зависимости от того, где вы тестируете приложение (эмулятор или телефон), на экране устройства запуститься приложение, в котором начнут автоматически происходить действия, описанные в тесте.

В следующей заметке я расскажу, как с помощью Testdroid Recorder создавать Record/Play тесты.

Про RetinaPad

Давно мечтал о чем-то похожем для своего iPad’а и вот, наконец-то, нашел! RetinaPad позволяет отображать приложения, созданные для iPhone с поддержкой Retina-дисплеев, в высоком разрешении и на экране iPad, без всяких там замыленных графических составляющих и зубчатых шрифтов.

RetinaPad устанавливается из Cydia, репозиторий BigBoss и стоит $2,99, а если добавить репозиторий repo.insanelyi.com, то RetinaPad достанется совершенно бесплатно =)

Декомпиляция приложений *.apk

В последнее время стал часто получать на свой мобильный телефон мошеннические SMS и MMS, просящие перейти на сайт, чтобы «просмотреть открытку/сообщение», «скачать приложение» и т.п. Сегодня решил проверить, что конкретно мне хотят подсунуть. Перейдя по одной из таких ссылок через компьютер, было загружено Android-приложение (*.apk) с именем  «opera_6.5.1». В сети сейчас гуляет много вирусов, маскирующихся под якобы новую версию браузера (в прочем, не самого популярного за рубежом, но очень любимого в СНГ), которую срочно нужно обновить. Доверчивые пользователи, скачавшие такое «обновление», получают на свое мобильное устройство вирус, который отсылает с их телефона смс-сообщения на платные номера (естественно, без ведома хозяина), в результате чего пользовательский счет человека в короткий срок может достичь нулевой отметки.

Где-то на Хабре я уже читал статью, как один человек решил декомпилировать ту самую Оперу, только в формате *.jar, чтобы детально разобраться в коде вируса. Но мне попалось приложение в формате *.apk, поэтому я тоже решил его декомпилировать (исключительно технический интерес!).

Для декомпиляции *.apk-приложения мне понадобились только две составляющие: dex2jar (утилита для извлечения классов, которые уже можно декомпилировать) и Java Decompiler (то, чем будем декомпилировать). Для тех, кому необходимо получить ресурсы приложения, то нужно воспользоваться еще и ApkTool.

# C:\Decompile_apk_app\dex2jar-0.0.9.7\dex2jar C:\Decompile_apk_app\opera_6.5.1.apk — данная команда позволяет получить файл opera_6.5.1_dex2jar.jar, который с успехом открывается с помощью Java Decompiler.

# C:\Decompile_apk_app\apktool\apktool d -f C:\Decompile_apk_app\opera_6.5.1.apk C:\Decompile_apk_app\Opera – команда позволяет получить файлы манифестов, ресурсов приложения, и файлы байт-кода в формате *.smali. Здесь можно найти список команд, присутствующих в байт-коде.

Вот так не сложно можно получить доступ если не к 100% исходникам приложения, то хотя бы к той части, которую можно осмысленно понять.