1. Новые покупки

    22.02.2017: Слив траффика из инстаграм на бурж партнерки

    22.02.2017: СИСТЕМА ЕСТЕСТВЕННОГО ВОССТАНОВЛЕНИЯ ЗРЕНИЯ ДО 100% БЕЗ ОПЕРАЦИЙ И ТАБЛЕТОК «ГЛАЗ-АЛМАЗ»

    22.02.2017: Целевая Аудитория в Инстаграм (2017)

    22.02.2017: Партнерский конвейер 2.0

    22.02.2017: Caйт для зарабoткa за один день

    22.02.2017: Практический тренинг по рекламе в Яндекс Директ и Google Adwords

    22.02.2017: [Константин Горбунов] Интенсивы по Яндекс.Директ и Google Adwords 2017

    22.02.2017: Методика слива трафика. Арбитраж (Бурж и Ру)

    22.02.2017: «Facebook 2.0» — с 0 до 100$ в сутки за 30 дней — второй набор на обучение к Дмитрию Сидашу

    22.02.2017: Новый хит! формула мгновенных продаж

    22.02.2017: Клиенты из ВКонтакте

    22.02.2017: Ковалев С.В. - Возвращение в молодость и здоровье (2016)

    22.02.2017: Создание сети датинг страниц в Facebook

    22.02.2017: Тёмный император (Панда)

    22.02.2017: Белая тема заработка 1000-3000 рублей в день

    22.02.2017: Курс по рекламе в Facebook Джона Лумера (начальный уровень) (Новинка, 2016)

    22.02.2017: [Зуши Плетнев]Реактивный трафик из Facebook 3.0

    22.02.2017: НОВАЯ БЕЛАЯ ТЕМА ЗАРАБОТКА ОТ AREONDO. 110K В МЕСЯЦ - РЕАЛЬНО!

    22.02.2017: Как запустить массовые продажи физических товаров в крупных городах

    22.02.2017: Уникальная методика слива трафика из Facebook

    22.02.2017: Складчина [Бизнес Молодость] - Начни свой бизнес 2017

    22.02.2017: Мастер Рекламных Сетей Яндекс (РСЯ) (2017)

    22.02.2017: [Александр Борисов] - Молниеносное создание трафикового сайта для заработка за 1 день

    22.02.2017: ZennoDeveloper. Продвинутый обучающий курс по разработке на ZennoPoster + C# + Мега Бонусы (2017)

    21.02.2017: Google AdWords - генератор продаж (2017)

  2. Сбор взносов

    22.02.2017: Партнерский конвейер 2.0

    22.02.2017: Caйт для зарабoткa за один день

    22.02.2017: Ковалев С.В. - Возвращение в молодость и здоровье (2016)

    21.02.2017: Льём трафик из ВК v.3 (Все фишки + Автоматизация ВК vs.. starters)

    21.02.2017: Простая и РАБОЧАЯ схема заработка от 1000 рублей в день!

    20.02.2017: Коучинг - Самое Полное И Эффективное Обучение По Созданию Сайтов С Высокой Конверсией

    19.02.2017: [profileschool]Настройка Фотоаппарата CANON

    19.02.2017: Идеальный landing page 3.0

    18.02.2017: Как зарабатывать на торгах по банкротству покупая авто, квартиры на 77% ниже рыночной стоимости

    18.02.2017: Профессиональный курс SEO-SEM (ТОПЭКСПЕРТ) 2016

    17.02.2017: Уличное каратэ. Как научиться драться за 100 дней

    14.02.2017: Профессиональное CPA продвижение в Instagram (CPA-поток)

    12.02.2017: Интенсив по раскрутке Инстаграм

    06.02.2017: Пошаговый курс-практикум прибыльного интернет-магазина

    21.01.2017: Facebook Маркетинг Безумие Версия 2.0 - Продвижения в Свой Бизнес (2016)

    09.01.2017: [Рид Хоффман, Бен Касноча] Жизнь как стартап. Строй карьеру по законам Кремниевой долины

    13.12.2016: Ретаргет Машина

    20.11.2016: Контекстная реклама – подготовка профессионалов (2016)

Скрыть объявление
САМАЯ БОЛЬШАЯ БАЗА ИНФОПРОДУКТОВ.
Постоянные обновления, новые складчины, только у нас!
Присоединяйся :)

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

Тема в разделе "Статьи/Новости IT", создана пользователем Toretto, 30 янв 2014.

  1. Toretto

    Администратор

    Регистрация:
    13 янв 2014
    Сообщения:
    6.392
    Симпатии:
    4.814
    Используя только блокнот, мы напишем совсем маленькое учебное Android-приложение. А затем скомпилируем его, соберём и запустим на устройстве — и всё через командную строку.

    [​IMG]

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


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

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

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

    skladchik, темы по заработку, инфопродукты, coga.biz.

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

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

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

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

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

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

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

    skladchik, темы по заработку, инфопродукты, coga.biz.

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

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

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

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

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

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

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

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


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

    Теперь в нашем проекте нет никакой магии и он полностью синтаксически корректен для обычного Java-компилятора. Давайте скомпилируем его.
    skladchik, темы по заработку, инфопродукты, coga.biz.
    Если вы ранее работали с java, то понять эту строчку для вас не составит труда. Однако я всё-таки объясню, что к чему:


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

    Код:
    call %DX_PATH% --dex --output=%DEV_HOME%/bin/classes.dex %DEV_HOME%/obj
    Опция --dex указывает на то, что нам нужно преобразовать из *.class в *.dex. Затем после опции --output мы задаём путь к итоговому файлу classes.dex. И последний аргумент в этой команде — путь непосредственно к пакетам, содержащим *.class файлы

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

    Код:
    call %AAPT_PATH% package -f -M %DEV_HOME%/AndroidManifest.xml -S %DEV_HOME%/res -I
    %ANDROID_JAR% -F %DEV_HOME%/bin/AndroidTest.unsigned.apk %DEV_HOME%/bin
    Здесь опции аналогичны тем, которые мы использовали при создании R.java:

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

    Код:
    call %JAVA_HOME%/bin/keytool -genkey -validity 10000 -dname "CN=AndroidDebug, O=And
    roid, C=US" -keystore %DEV_HOME%/AndroidTest.keystore -storepass android -keypass a
    ndroid -alias androiddebugkey -keyalg RSA -v -keysize 2048
    call %JAVA_HOME%/bin/jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore %DEV_H
    OME%/AndroidTest.keystore -storepass android -keypass android -signedjar %DEV_HOME%
    /bin/AndroidTest.signed.apk %DEV_HOME%/bin/AndroidTest.unsigned.apk androiddebugkey
    Собственно, эти строчки запускают 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 ваше устройство, или же запустите эмулятор. А затем выполните

    Код:
    call %ADB% uninstall %PACKAGE%
    call %ADB% install %DEV_HOME%/bin/AndroidTest.signed.apk
    call %ADB% shell am start %PACKAGE%/%PACKAGE%.%MAIN_CLASS%
    Собственно, первая строчка удаляет программку, если она уже там есть. Для повторных запусков пригодится. Вторая — устанавливает APK на ваш девайс или эмулятор. Третья же — запускает. Давайте более подробно разберём её аргументы:


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

    Заключение
    После сборки всех файлов дерево каталогов должно быть примерно таким.
    Код:
    │   AndroidManifest.xml
    │   AndroidTest.keystore
    │   comp.bat
    │
    ├───bin
    │       AndroidTest.signed.apk
    │       AndroidTest.unsigned.apk
    │       classes.dex
    │
    ├───obj
    │   └───com
    │       └───example
    │           └───testapp
    │                   MainActivity.class
    │                   R$attr.class
    │                   R$string.class
    │                   R.class
    │
    ├───res
    │   └───values
    │           strings.xml
    │
    └───src
        └───com
            └───example
                └───testapp
                        MainActivity.java
                        R.java
    Теперь вы можете наглядно увидеть и понять, как происходит сборка андроид-приложения на более низком уровне. Когда будете использовать IDE — если сборка вдруг пойдёт не так (а такое часто бывает) — сможете вырулить ситуацию как надо. Также обратите внимание на то, что итоговый apk-файл занимает всего около 4 килобайт.
     
    #1 Toretto, 30 янв 2014
    Последнее редактирование: 30 янв 2014
    Nikolson нравится это.
XenForo add-ons by Waindigo™ ©2014 Waindigo Foundation.