Импорт SMS-сообщений с Nokia на Android

Решил перенести свои старые смс-сообщения с Nokia 5800 на новенький Nexus 5.

Первым делом необходимо синхронизировать Nokia с программой Ovi Suite, выбрав  в качестве синхронизации смс-сообщения. Затем в программе Ovi нужно экспортировать смс-сообщения в файл формата *.csv. Теперь в этом файле хранится вся ваша эсэмэсная переписка 🙂

Далее перемещаем данный csv-файл на Android-устройство, а из Google Play устанавливаем программу Sms Tools — All in one, с помощью которой можно уже промпортировать sms-сообщения из csv-файла. После импорта все сообщения будут видны в программе Google Hangouts.

LG Nexus 5

Приобрел LG Nexus 5. Красный. 16 ГБ. За 14 тыс. рублей.

Также прикупил к нему черный чехол Ringke Ultra Slim (софт-тач покрытие).

Все это дело смотрится просто шикарно — сочетание черного и красного дает о себе знать.

Теперь чуть подробнее:

Как я уже писал, в последнее время мне приходилось ходить с рабочими Android-телефонами — сначала HTC EVO 3D, затем с LG Optimus 3D. На обоих моделях были постоянные тормоза. Я проклинал Android как только мог. Я вообще не переношу ни малейший намек на лаги, все должно работать быстро и без задержек, потому что часто это бывает весьма критически важно.

Возвращаться на свою Nokia 5800 уже желания никакого не было, поэтому я начал подбирать себе новый телефон. Сразу скажу — iPhone в качестве варианта даже не стоял. Мне не нужно еще одного устройство на базе iOS, т.к. iPad Air вполне хватает. Значит, выбираем из Android’ов. Наиболее привлекательным аппаратом в средней ценовой категории является как раз LG Nexus 5. По мимо того, что это действительно хорошее устройство, еще важным для меня был момент того, что это телефон от Google и что на него первым будут приходить самые последние версии Android.

Nexus 5 использую чуть больше двух недель и пока это устройство вполне отвечает ожиданиям — современный, удобный, быстрый, с хорошей камерой.

[Android] Наиболее популярные секретные коды

Наиболее популярные секретные коды, которые работают на Nexus 5:

*#06# — информация об IMEI
*#*#4636#*#* — информация б устройстве, сетевых подключениях, аккумуляторе, статистики использования
*#*#8255#*#* — информация о GTalk Service
*#*#7594#*#* — позволяет выключать устройство без отображения подтверждающего окна
*#*#7780#*#* / *2767*3855# — сброс устройства к заводским настройкам (hard reset)

ProGuard и Java 8

При попытке собрать релизное Android-приложение через ProGuard (утилита для сокращения, оптимизации и обфускации кода), появляется сообщение об ошибке:

Unsupported class version number [52.0] (maximum 51.0, Java 1.7) with sbt-proguard

Действительно, я использую Java 8, а ProGuard, идущий в составе Android Studio, имеет версию 4.x. Но четвертая версия, как оказалась, не умеет работать с Java 8.

Решением проблемы является установить последнюю бета-версию ProGuard 5.0. Пятая версия, кстати, на выходе выдает более компактный в размере apk-файл.

Про автоматическое включение Bluetooth после обновления iOS

Каждый раз, когда обновляю iOS, автоматически включается Bluetooth. Это баг такой или фича?

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

По-хорошему, если у меня был выключен Bluetooth, то ничего без моего разрешения не должно его просто так взять и включить снова. Это, кстати, относится и к другим настройкам.

Про HTC (Android 4.4.2) и setWebContentsDebuggingEnabled

Обнаружил весьма странное поведение у HTC-устройств с Android 4.4.2 — невозможно провести удаленную отладку Android WebView.

Я уж начал грешить, что проблема в моих руках, хотя выполнил все условия, описанные в официальном мануале (раздел «Debugging Android WebViews»). Как я не старался, но заставить Chrome увидеть запущенный WebView из под приложения, мне не удалось. Потом решил попробовать запустить все это дело на Google Nexus 4 (Android 4.4.2) и… все заработало.

Вот так-то… Там работает, тут не работает…

[Android] Подключение к ADB через Wi-Fi (через TCP)

ADB умеет подключаться к устройствам не только через USB, но и через TCP. Порой, это бывает весьма полезным.

1. Подключаем устройство через USB, а в консоль вводим команду adb tcpip 5555. В ответ будет выведена фраза «restarting in TCP mode port: 5555».
2. Отключаем устройство от USB, в консоль вводим команду adb connect <ip>:<port>, где <ip> — это адрес устройства, а <port>  в нашем случае — 5555. В ответ должна появится фраза «connected to 192.168.1.10:5555».

Во многих случаях достаточно выполнить лишь пункт 2 (т.е. бе предварительного подключения устройства по USB).

Проверяем, что устройство видно:

# adb devices
List of devices attached
192.168.1.10:5555 device

Соединение по TCP автоматически завершится в тот момент, когда вы подключите это устройство через USB. Также можно вручную указать ADB слушать только USB:

# adb usb

[iOS] Как программно обнаружить Jailbreak

Задумался вопросом — а каким образом некоторые iOS-приложения обнаруживают, что в системе произведен Jailbreak? Мало того, что некоторые приложения, вроде Skype просто показывают предупреждающее сообщение об этом, так некоторые вообще отказываются работать (к примеру, DirectTV). Почему отказываются? Думаю, тут все понятно — разработчики просто не хотят брать на себя бремя технической поддержки, ломая голову над тем, почему у пользователя глючно работает их вроде бы тщательно протестированная программа. Сам-то пользователь редко скажет, что у него сделан Jailbreak, а если и скажет, то разработчики вправе отказаться от предоставления в помощи, т.к. нет смысла поддерживать такие окружения, в которых любой сторонний мод может привести к нестабильному поведению не только отдельно взятого приложения, но и всей системы.

Вернемся же к вопросу — как обнаружить, что был Jailbreak? Обычно вместе с Jailbreak ставятся дополнительные утилиты и приложения, вроде таких как Cydia, MobileSubstrate и WinterBoard. Таким образом, с помощью несложного условия if — else можно в своем приложении написать участок кода, который будет детектить Jailbreak. Вот так и решается этот, на первый взгляд, сложный вопрос довольно примитивным методом.

[Android] Как узнать название пакета и activity из apk-приложения

Задача: узнать название пакета Android-приложения в формате apk и запускаемого активити.

Решение:

Способ 1

Можно взять и открыть AndroidManifest.xml, чтобы посмотреть нужные данные, к примеру, через команду cat:

cat <path_to_apk>

Пример вывода:

versionCode
minSdkVersiontargetSdkVersionnameprotectionLevel versionName
allowBackuphardwareAcceleratediconlabelthemescreenOrientation
launchMode
permissionvalueandroid*http://schemas.android.com/apk/res/
androidpackagmanifestcom.mobileshop2.uses-sdkuses-permissionandroid.
permission.INTERNETandroid.permission.WAKE_LOCK)android.permission.
ACCESS_COARSE_LOCATIONandroid.permission.VIBRATE)com.mobileshop.
permission.C2D_MESSAGE*com.google.android.c2dm.permission.RECEIVE
applicatioactivitycom.intent-filteractionandroid.intent.action.
MAIcategory android.intent.category.LAUNCHEreceiver'com.mobileshop.
GcmBroadcastReceiver'com.google.android.c2dm.permission.SEND&com.
google.android.c2dm.intent.RECEIVEservice#com.mobileshop.
GcmIntentService meta-dataserver_addresshttp://mobileshop.com/D

Большая часть содержимого файла AndroidManifest.xml является нечитабельной, т.к. сам файл является двоичным, а то, что поддается чтению, имеет не самый удобный формат для восприятия. Мы видим, что имя пакета имеет название com.mobileshop, но мы не видим название запускаемого активити.

Способ 2

Можно воспользоваться услугами утилиты AAPT (Android Asset Packaging Tool), которая представляет из себя  упаковщик для сборки приложения, библиотек и ресурсов в единый apk-файл. Утилита входит в состав Android SDK и располагается в моем случае в директории /Applications/AndroidSDK/build-tools/17.0.0/.

Чтобы узнать название пакета apk-приложения:

./aapt dump badging <path_to_apk> | grep "package"

Пример вывода:

package: name='com.mobileshop' versionCode='13' versionName='2.0'

Чтобы узнать название запускаемого активити apk-приложения:

./aapt dump badging /User/Desktop/HTC_Market_v2.0.apk | grep "launchable-activity"

Пример вывода:

launchable-activity: name='com.mobileshop.MainActivity' label='Mobile Shop' icon=''

Google Play — ошибка 923

Столкнулся с проблемой, что попытка установить/обновить приложения из Google Play заканчивалась ошибкой 923. Оказывается, причиной тому являлось, что в то время, когда приложение загружалось, устройство переходило в неактивный режим и связь с Wi-Fi обрывалась (т.к. у меня была задействована соответствующая опция). Хотя, на месте Google, я бы все выводил более информирующие сообщения об ошибках, а не тупо их коды.