Меню Рубрики

Как написать hello world на android

Пишем, собираем и запускаем HelloWorld для Android в блокноте

Когда я начал изучать Android, захотелось полностью написать и скомпилировать Android-приложение вручную — без использования IDE. Однако эта задача оказалась непростой и заняла у меня довольно много времени. Но как оказалось — такой подход принёс большую пользу и прояснил многие тонкости, которые скрывают IDE.

По-сути эта статья является переводом и переработкой статьи Building Android programs on the command line под современные на данный момент JDK (7) и Android SDK (API level 19). Кроме того, я многое упростил и добавил кое-что от себя.

Используя только блокнот, мы напишем совсем маленькое учебное Android-приложение. А затем скомпилируем его, соберём и запустим на устройстве — и всё через командную строку. Заинтересовало? Тогда прошу.

Вступление

Я был поражён, насколько сложным и запутанным является шаблонное приложение в android studio. Оно просто нагромождено ресурсами. И в меньшей степени — кодом и скриптами. Хотя всё что оно должно делать — это выводить на экран HelloWorld! Кроме того, в книгах и руководствах, которые я просмотрел, объясняется, как с помощью диалоговых окон создать IDEA-шный или эклипсовый HelloWorld — и от него уже идёт дальнейшее повествование. А что происходит «под капотом» — остаётся только гадать.

Долгие поиски были почти безрезультатны — на русском языке статей по данной теме я не нашёл, а на английском — была устаревшая информация и кое-что пришлось дорабатывать напильником, гуляя по stackowerflow и документации. Когда я разобрался, то решил восполнить пробел — вдруг кому-то пригодится? Собственно, так и появилась эта статья.

Мы создадим свой шаблонный проект, который идеально использовать для обучения. Там не будет ничего лишнего, только всё самое необходимое. А потом детально разберём, как его собрать и запустить на вашем Android-устройстве. В конце статьи будет ссылка на скачивание архива с итоговым проектом — если возникнут какие-то вопросы — можете свериться с ним.

Таким образом, вы будете на 100% знать и понимать состав вашего проекта и процесс его сборки. Хотя этот тестовый проект предназначен для обучения, при небольшой доработке его можно будет использовать как прочный фундамент для ваших реальных проектов.

Подготовка

Для начала у вас должен быть установлен JDK 7 и android SDK. Последний кстати нужно чуточку настроить после установки.

Главное требование перед прочтением этой статьи — кроме установленного софта вы должны уже уметь запускать на вашем девайсе тот Helloworld, который поставляется вместе с Eclipse или Android Studio. Т.е. у вас должен быть настроен драйвер usb, включена отладка по usb на вашем девайсе и т.д… Или же создан и настроен эмулятор. Это совсем элементарные вещи, и их рассмотрение выходит за рамки данной статьи — в сети достаточно информации. Кстати прочитать пару глав из книг тоже будет не лишним — хотя бы понимать, как устроен манифест, ресурсы, да и вообще основы языка Java. А в этой статье я опишу то, о чём книги молчат.

Написание проекта

Для начала, создайте некоторую папку, где будет ваш проект. Назовём её mytestapp. В ней создайте ещё 4 папки — bin,obj,res и src.

Создайте пустой текстовый файл и измените его имя на AndroidManifest.xml. Если вы начинающий пользователь Windows, вам нужно включить показ расширений, иначе файл будет по-прежнему текстовым.

Добавьте в него следующее:

Тут всё просто. Мы намерены сделать приложение с именем TestApp, которое при старте запускает класс MainActivity. Осталось только написать этот небольшой класс — и приложение готово. Если нужно — отредактируйте в теге uses-sdk свойство android:targetSdkVersion — поставьте ту версию, которая у вас.

Далее — создадим простейший ресурс — строку Hello test app. Вообще-то мы могли обойтись и без ресурса, вставив эту строку прямо в Java код. Но некоторые шаги сборки работают с ресурсами, и чтобы увидеть интересные моменты — мы всё-таки поработаем с ними.

Давайте создадим в папке res папку values. Все ресурсы следует разбивать по папкам. Далее — в ней создадим пустой файл strings.xml. а в нём напишем

Вот и все ресурсы, нам необходимые. Просто, не так ли? Далее создадим внутри src папку com, в ней папку example, потом ещё ниже по иерархии папку testapp — а там уже наш класс MainActivity.java. Добавим туда код

Структура каталогов должна получится такая

И это собственно всё, что нам было нужно для простейшего проекта. Для сравнения —

Сборка

Теперь же подходим к самому важному и сложному этапу. Мы будем много работать с командной строкой, поэтому рекомендую вам все команды, данные здесь, записывать в один файл и назвать его comp.bat. В конце файла после команд можете добавить pause, чтобы был виден результат и ошибки — если таковые возникнут.

Подготовка путей

Первое, что мы сделаем для удобства и краткости — создадим специальные переменные, в которых будем хранить пути. Для начала — определим наши основные директории. Вам нужно заменить пути к JDK и Android SDK на те, которые у вас.

Далее — пути непосредственно к программам. Я рекомендую вам просмотреть каталоги ваших SDK и убедится в том, что всё на месте. Также подкорректировать версии, которые присутствуют в путях.

Между прочим, в более старых версиях утилита aapt находилась в platform-tools — и я не исключаю что она и\или другие могут слинять куда-нибудь ещё. Так что будьте внимательны. Если вы всё правильно сверите сейчас — то остальная часть статьи должна пройти гладко.

И ещё — в пару переменных забьём наши пакеты и классы. Если заходите их сменить — вам не придётся бегать по коду — все настройки вначале.

Подготовка к компиляции

А теперь самое интересное. Помните, как классические Java-программы компилируются и запускаются в 2 строчки? Здесь мы используем тот же самый javac, однако кроме него нам предстоит использовать ещё много утилит.

Для начала спрошу — а вы никогда не задумывались, как работает загадочный класс R? Собственно меня он сперва смутил из-за его сверхъестественных возможностей. Как на этапе компиляции можно через поля класса обращаться к XML-файлам в других каталогах? Я предположил, что тут орудует прекомпилятор — так оно и оказалось.

Собственно, есть специальная утилита AAPT — она проходится по каталогам ваших ресурсов и создаёт тот самый R.java. Оказывается, всё очень даже просто — это просто класс, в составе которого другие статические вложенные классы с целочисленными константами. И всё! Он выглядит примерно так

Теперь давайте создадим его у вас. Для этого используем следующие команды:

Давайте разберёмся, что к чему. AAPT — Android Asset Packaging Tool — буквально «упаковщик андроид-имущества». Его опции:

  • package — говорит, что нам нужно именно упаковать ресурсы (а не добавить или удалить)
  • -f — перезапись существующего R.java, если таковой имеется
  • -m — разместить R.java в надлежащих пакетах, а не в корне указанного в -J пути
  • -S — после этой опции мы указываем каталог с ресурсами
  • -J — после этой опции мы указываем куда сохранить получившийся R.java
  • -I — после этой опции мы указываем путь к подключаемой библиотеке — включаем android.jar

После его выполнения в каталоге src должен появится тот самый файл R.java. Проверьте.

Теперь в нашем проекте нет никакой магии и он полностью синтаксически корректен для обычного Java-компилятора. Давайте скомпилируем его.

Если вы ранее работали с java, то понять эту строчку для вас не составит труда. Однако я всё-таки объясню, что к чему:

  • -d — куда поместить итоговые пакеты и *.class-файлы
  • -cp — classpatch — укажем путь к библиотеке android.jar
  • -sourcepath — пути, где находятся (или могут находится) наши *.java файлы

После выполнения в папке obj должны находится пакеты с нашими классами в виде байт-кода (*.class). Но вот ведь незадача — виртуальная машина андроида с ним не совместима! Но так было задумано и на это есть причины. А мы используем конвертер, который делает из class-файлов dex-файл, понятный для нашего зелёного R2D2.

Опция —dex указывает на то, что нам нужно преобразовать из *.class в *.dex. Затем после опции —output мы задаём путь к итоговому файлу classes.dex. И последний аргумент в этой команде — путь непосредственно к пакетам, содержащим *.class файлы

Убедитесь в том, что в папке bin находится наш classes.dex. Теперь осталось только упаковать его вместе с ресурсами в APK-файл. Сделаем это:

Здесь опции аналогичны тем, которые мы использовали при создании R.java:

  • package — говорит, что нам нужно именно упаковать ресурсы (а не добавить или удалить)
  • -f — перезапись существующего AndroidTest.unsigned.apk, если таковой имеется
  • -M — после этой опции мы указываем путь к файлу манифеста
  • -S — после этой опции мы указываем каталог с ресурсами
  • -I — после этой опции мы указываем путь к подключаемой библиотеке — включаем android.jar
  • -F — после этой опции мы указываем куда сохранить получившийся AndroidTest.unsigned.apk
  • последний аргумент — путь к папке с dex — файлами

В папке bin теперь должен появится AndroidTest.unsigned.apk. И мы назвали его не просто так! У него нет цифровой подписи. Андроид запрещает устанавливать и запускать приложения без подписи. Но создать её не так-то трудно, как может показаться на первый взгляд

Собственно, эти строчки запускают 2 Java-утилиты, которые не имеют никакого отношения к Android SDK — но они необходимы. Первая создаёт файл AndroidTest.keystore (проверьте его наличие), а вторая — этот файл соединяет с AndroidTest.unsigned.apk. Получается файл AndroidTest.signed.apk. Вот такой дикий крафт файлов. Но однажды создав bat-скрипт запускайте его — и он будет делать всё это в автоматическом режиме.

Я думаю, не стоит тратить время на детальный разбор опций этих утилит в пределах данной статьи. Просто нужно уловить суть — они берут AndroidTest.unsigned.apk, подписывают его файлом AndroidTest.keystore и сохраняют в AndroidTest.signed.apk. Если есть желание, можете почитать в документации.

У вас, скорее всего, будет предупреждение «Warning: No -tsa or -tsacert is provided and this jar. «, но не обращайте внимание.

Запуск

Теперь, когда мы наконец собрали наш apk-файл — можем его запустить. Подключите по usb ваше устройство, или же запустите эмулятор. А затем выполните

Собственно, первая строчка удаляет программку, если она уже там есть. Для повторных запусков пригодится. Вторая — устанавливает APK на ваш девайс или эмулятор. Третья же — запускает. Давайте более подробно разберём её аргументы:

  • shell — мы хотим выполнить некоторые команды на нашем девайсе
  • am — используем для выполнения команд activity manager
  • start — мы хотим запустить некоторое Activity
  • имя пакета и полное имя класса (включая пакет), которые мы стартуем

Если всё прошло удачно, вы увидите что-то вроде этого:

Заключение

После сборки всех файлов дерево каталогов должно быть примерно таким.

Теперь вы можете наглядно увидеть и понять, как происходит сборка андроид-приложения на более низком уровне. Когда будете использовать IDE — если сборка вдруг пойдёт не так (а такое часто бывает) — сможете вырулить ситуацию как надо. Также обратите внимание на то, что итоговый apk-файл занимает всего около 4 килобайт.

Выкладываю архив проекта (Нажимайте Файл-Скачать). Обратите внимание, что я добавил туда ещё один маленький скрипт — clear.bat. Он удаляет все созданные при сборке файлы. И поставил его запуск на начало comp.bat. Также добавил комментарии после Rem — по шагам.

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

Источник статьи: http://habr.com/ru/post/210584/

Разрабатываем приложения для Android: Hello World!

Продолжаем знакомиться с миром разработки приложений для Android. Если вы внимательно проделали все шаги, описанные в первой статье нашего цикла, значит на вашем компьютере установлены все необходимые для разработки инструменты и они готовы к работе. В этой части мы с вами напишем «Hello World!». С этого должен начать каждый молодой разработчик.

Начало нового проекта

Нам потребуется запустить Android Studio. Прежде чем начать новые проект, мы убедимся, что все шаги в первой части были выполнены верно и все необходимые компоненты установлены. Для этого на стартовой странице Android Studio мы перейдем во вкладку Configure.

Далее откроем SDK Manager.

И в открывшемся окне убедимся, что у нас установлен Android SDK.

Теперь можем закрыть окно и вернуться на стартовую страницу Android Studio. На ней нас интересует первая вкладка Start a new Android Studio project. Введите название будущего приложения и доменное имя, после чего можно перейти к следующему шагу.

В следующем открывшемся окне нам нужно решить, для какого типа устройств мы будем разрабатывать приложение. Для первого раза предлагаю ограничиться разработкой для смартфонов и планшетов, а значит, нам нужна галочка в самой первой вкладке. Однако стоит обратить внимание на то, что с Android Studio вы также сможете разрабатывать для Android Wear, Android TV, Android Auto и даже для Google Glass.

В этом же окне нам нужно будет выбрать Minimum SDK. В этом поле мы выбираем самую старую поддерживаемую версию Android. Почему разработчики не могут выбрать все версии Android, начиная с 1.1? Потому что возможности у приложений для старых версий достаточно ограниченные. Поэтому предлагаю оставить в этом поле предложенную вам версию и перейти к следующей странице.

На этой странице мы выбираем внешний вид главного экрана нашего будущего приложения. Вам уже предложено несколько шаблонов. Возможно, вы хотите, чтобы на каждом экране вашего приложения красовался собственный уникальный интерфейс, но если вас устраивает то, как видит интерфейс Android-приложения компания Google, работу для вас немного упростили. Стоит отметить, что вы можете выбирать разные шаблоны для разных экранов приложения, но для начала мы выберем Blank Activity.

На следующей странице нам предложено выбрать имя для экрана и слоя. Стоит выбирать логичные названия, это упорядочит и упростит для разработчика процесс написания приложения. Сегодня нас устраивает все как есть. Мы можем нажать кнопку Finish и наблюдать за тем, как открывается окно нашего приложения.

Приступаем к делу

Новоиспеченные разработчики часто хотят написать по центру экрана приложения «Hello World!». Для этого нам потребуется отредактировать content_main.xml, который содержит выбранный нами слой. Найти этот слой вы можете в окне, расположенном слева. Оно находится в директории app > res > content_main.xml.

Android Studio покажет вам код XML, а также то, как редактируемый вами слой будет выглядеть на устройстве. В папке Widgets вы можете видеть элементы, которые можно добавить на редактируемый экран приложения. Если нам нужно добавить что-то из этих элементов, можно просто перетянуть их на экран устройства.

Давайте таким образом добавим кнопку «ОК» прямо под надписью «Hello World!».

В правом нижнем углу вы сможете отредактировать текст, отображаемый на кнопке, и ее ID. Давайте в поле text напишем «Hello World!», а уже существующую надпись на экране устройства удалим, выделив ее в визуальном редакторе. Можете также поиграться с настройками созданной вами кнопки.

Теперь давайте откроем вкладку MainActivity.java и добавим немного кода. Сделаем мы это сразу после закрытой фигурной скобки «>» и текстом “@Override, Public Boolean”. Давайте напишем этот текст:

public void buttonOnClick (View v) <
Button button = (Button) v;
((Button) v).setText(«Hello!»);
>

Он позволит нам менять текст при нажатии на кнопку.

В начале страницы вы найдете слово import…. Убедитесь, что в списке есть строка import android.widget.Button;, и добавьте ее, если вы не нашли таковую.

Теперь мы можем вернуться на вкладку content_main.xml и нажать на кнопку. В правом нижнем углу мы выберем поле onClick, для которого проставим значение buttonOnClick. Так мы привяжем написанный нами код к интересующей нас кнопке.

Запуск приложения

Пришло время насладиться результатом, но для этого нам нужно запустить приложение. Для этого во вкладке Run нажимаем на Run ‘app’. У нас уже должно быть установлено виртуальное устройство Android, его установку мы разбирали в первой статье, так что просто нажимаем OK и ждем запуска Android Virtual Device. Приготовьтесь, запуск может быть не быстрым.

Можете также протестировать приложение на своем собственном устройстве. Для этого активируйте настройки разработчика и отладку по USB. При подключении вашего смартфона к компьютеру он отобразится в окне доступных для тестирования устройств в Android Studio.

Поздравляем, вы создали свое первое приложение для Android, и надеюсь — оно запускается и работает. Конечно, вы еще не стали разработчиком продукта, который можно продавать с помощью Google Play, но все еще впереди. Если вас увлек процесс, попробуйте начать учиться программировать на Java. Не забывайте, что наш цикл на этом не заканчивается и совсем скоро вместе с вами мы напишем нашу первую игру для Android.

Новости, статьи и анонсы публикаций

Свободное общение и обсуждение материалов

Все вы так или иначе сталкивались с Netflix. Даже если ни разу не покупали подписку, наверняка вам знакомы такие сериалы, как «Карточный домик», «Лемони Сникет: 33 несчастья», «Академия “Амбрелла”», «Чёрное зеркало». Всё это проекты Netflix, которые вы видели или по крайней мере слышали об их существовании от знакомых. Но, несмотря на высокую популярность этой платформы и фильмов и сериалов, которые на ней выходят, до настоящего времени в России она была представлена довольно узко. То есть оформить подписку на Netflix можно было только в евро, а смотреть контент в большинстве своём – только без перевода. Но вскоре всё изменится.

Операционная система Android открывает пользователям поистине большие возможности. Благодаря её открытости с ней можно делать всё что угодно – от кастомизации отдельных элементов интерфейса до установки каких угодно приложений, которые можно скачивать откуда угодно. Но если в осторожной кастомизации операционной системы, как я уже выяснил, нет ничего плохого, то вот о загрузке софта из ненадёжных источников – читай из интернета – я бы настоятельно рекомендовал вам забыть. У меня на это есть несколько объективных причин.

Xiaomi – одна из немногих компаний, которые начали свой путь с откровенного воровства идей и смогли на этом подняться, сыскав невероятную популярность. В какой-то момент её даже стали называть китайской Apple – настолько фирменный стиль бренда был похож на американский аналог. Но, что особенно удивительно, прозвище, которое прилипло к Xiaomi, не имело отрицательной окраски, а звучало как похвала. Видимо, поэтому китайцы до сих пор не гнушаются копировать идеи Apple.

18 комментариев Оставить свой

Зачем писать приложение на Маке, уже давно можно писать на самом смартфоне Андроид приложения любой сложности. Для смартов куча сред разработок, например AIDE, устанавливай и пиши приложения.

Странная идея. А зачем играть в игры на Xbox, ведь уже куча игр для телефонов?

Сам работал недолгое время мобильным разработчиком, но стиль программирования здесь (пусть даже в таком крохотном приложении) оставляет желать лучшего. Надеюсь автор статьи не обидится.

Пожалуйста, поделитесь опытом, предложите свой вариант.

Лучше определять кнопку в методе onCreate, и там же определить для него событие нажатия (setOnClickListener), в который уже вписать строку, отвечающую за смену текста. В Вашем коде лишняя строка кода выполняется каждый раз при нажатии на кнопку. Тут ничего критичного нет, само собой, но в программах с десятками тысяч кода это сказывается на производительности. Но в целом, я поддерживаю статьи такого рода, поэтому с большим интересом буду наблюдать дальше. А за труд спасибо, конечно!

Думаю еще было бы к месту добавлять дополнительную информацию о том что для чего делается в коде и не только. Если сейчас пользователь сделает одну синтаксическую ошибку — то шансы что он не закинет затею учиться программировать ничтожно малы.

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

Еще думаю стоит написать парочку теоретических статей что такое программирование вообще и для чего. Основы алгоритма и синтаксиса тоже лишними не будут. Таким образом можно будет привлечь значительно большую часть аудитории.

Вынесите пожалуйста эти статьи в отдельный раздел на сайте, потому что их захочется пречитать рано или поздно, а искать отдельно — долго

как не бился, не получается запустить пример
«DEVICE SHELL COMMAND: pm install -r «/data/local/tmp/com.example.master.step1″
Error: Could not access the Package Manager. Is the system running?»
виртуальный нексус с надптсью android индеферентно висит отдельным окном
в чем подвох?

Видимо, у вас не запустилось виртуальное устройство, поэтому Android Studio не может завершить установку. Попробуйте дождаться запуска AVD, либо залейте приложение на свое устройство.

есть подозрения, что не все начальные настройки описаны. при установке на чистую систему (win 10 x64) что-то было упущено

Как избавиться от скола на лобовом стекле?
Glass Profi

Набор для устранения сколов и трещин с лобового стекла
Набор предназначен для самостоятельного устранения сколов и трещин на стекле.
Устраняет повреждения и останавливает развитие трещин.
Время схватывания и затвердевания не заставит долго ждать.
Восстанавливает прозрачность и оптические свойства стекла.

[url=http://wbt.link/8kluF]скол на лобовом стекле тюмень
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле нижний новгород
[/url]
[url=http://wbt.link/8kluF]сколько стоит лобовое стекло шевроле нива
[/url]
[url=http://wbt.link/8kluF]где заделать скол на лобовом стекле
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле воронеж
[/url]
[url=http://wbt.link/8kluF]ремонт сколов на лобовом стекле донецк
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле по каско согласие
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле и каско
[/url]

Как избавиться от скола на лобовом стекле?
Glass Profi

Набор для устранения сколов и трещин с лобового стекла
Набор предназначен для самостоятельного устранения сколов и трещин на стекле.
Устраняет повреждения и останавливает развитие трещин.
Время схватывания и затвердевания не заставит долго ждать.
Восстанавливает прозрачность и оптические свойства стекла.

[url=http://wbt.link/8kluF]убрать скол на лобовом стекле
[/url]
[url=http://wbt.link/8kluF]сколько стоит лобовое стекло honda cr v
[/url]
[url=http://wbt.link/8kluF]сколы на лобовом стекле жуки на ветровом солнцево
[/url]
[url=http://wbt.link/8kluF]ремонт сколов на лобовом стекле щелково
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле каско согласие
[/url]
[url=http://wbt.link/8kluF]как убрать мелкие сколы на лобовом стекле
[/url]
[url=http://wbt.link/8kluF]скол на лобовом стекле липецк
[/url]
[url=http://wbt.link/8kluF]сколько стоит лобовое стекло лада гранта
[/url]

Добрый день!
Как вы думаете, положительные отзывы о вашей компании
в интернете увеличивают ваши продажи?
Мы уверены, что ваши клиенты интересуются тем, что пишут о вас в интернете.
У нас есть отличное решение для вас — написание и размещение положительных
отзывов о вас в интернете.
По ссылке вы можете сделать заказ отзывов с хорошей скидкой
Что скажете?

Привет!
Как вы думаете, положительные упоминания о вашей компании
в сети увеличивают ваши продажи?
Мы уверены, что ваши клиенты интересуются тем, что пишут о вас в интернете.
У нас есть отличное решение для вас — написание и размещение положительных
упоминаний о вас в интернете.
По ссылке вы можете сделать заказ отзывов с хорошей скидкой
Что скажете?

Оформите себе кредитную карту
с лимитом до 300 000 ?.
Без процентов по кредиту до 55 дней.
Либо Дебетовую карту до 30%
кешбек по карте и 6%
годовых на остаток.

— до 3 баллов за каждые 10 рублей
— 5 000 баллов в подарок
— 60 дней без % по кредиту на покупки и снятие наличных
— кредитный лимит — до 500 000 руб.
— стоимость обслуживания — 490 руб. в год
— можно подключить к Apple Pay или Samsung Pay

++++++++++++++++++++++++++++++++++++++++++++++++++++++++
заказать кредитную карту
заказать кредитную карту онлайн
заказать кредитную карту банках
банки кредитные карты заказать
заказать кредитную карту через интернет
заказать кредитную карту тинькофф
сбербанк заказать кредитную карту онлайн
заказать карту через онлайн кредитную
заказать кредитную карту онлайн через интернет
заказать кредитную карту +по почте
заказать кредитную карту +с доставкой
заказать кредитную карту без
заказать кредитную карту альфа
альфа банк заказать кредитную карту
заказать кредитную карту банка онлайн
заказать карту тинькофф онлайн кредитную карту
заказать кредитную карту онлайн +с доставкой
заказать кредитную карту +в сбербанке
почта банк заказать кредитную карту
заказать кредитную карту +на дом
заказать кредитную карту сбербанк онлайн через интернет
+как заказать кредитную карту сбербанка через сбербанк
заказать кредитную карту втб
альфа банк заказать кредитную карту онлайн
заказать кредитную карту доставкой почте
кредитная карта заказать онлайн +по почте
заказать кредитную карту
заказать кредитную карту втб
заказать кредитную карту без процентов

Источник статьи: http://androidinsider.ru/polezno-znat/razrabatyivaem-prilozheniya-dlya-android-hello-world.html


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии