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

    28.06.2017: Начни работать на себя - рабочий и рентабельный план

    28.06.2017: Правильное SEO для адалт сайтов (мануал) 18+

    27.06.2017: Монстры маркетинга 7 в 1 - [Константин Горбунов]

    27.06.2017: Александр Корнилов (kote) - Тизерная кухня 2016

    27.06.2017: Зарабатывайте от 200$ на чужих видео. Уникальный метод о котором вы не узнаете нигде!

    27.06.2017: [ЧК FREE] [Konoden] - Ролик на миллион - 2017

    26.06.2017: Евгений Дорохин (Jonn22): Быстрые деньги с Avito и социальных сетей 7 поток

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

    26.06.2017: Все социальные сети в одном: ВК, ФБ, ОК, Инстаграмм, Ютуб от известного автора

    26.06.2017: Автоматизированный бот Telegram

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

    26.06.2017: Сексуальный камертон - Шереметьев К.

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

    25.06.2017: [Наталья Закхайм] - Анти Тайм Менеджмент (2017)

    25.06.2017: Курc по контекстной рекламе Google Adwords + Яндекс Директ

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

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

    25.06.2017: Программа для накрутки поведенческих факторов 10 000 трафика в сутки

    25.06.2017: Практическое руководство по инвестициям для простого человека

    25.06.2017: Классические ошибки и проблемы участия в электронных аукционах - Евгений Бобышев

    24.06.2017: [Алексей Брянский] - Как продвинуть видео в TOP на YouTube

    24.06.2017: SalesHub - Бизнес на Amazon: Перезагрузка 25.05.2017

    24.06.2017: Бизнес Молодость. Эффективность по-американски 2016

    24.06.2017: [КриптоСамурай] - обучение заработку на криптовалюте

    24.06.2017: Яндекс.директ за 2 месяца - Пошаговый практикум Ильи Исерсона

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

    28.06.2017: Начни работать на себя - рабочий и рентабельный план

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

    22.06.2017: [Алексей Коновалов] - Обучение продажам через Яндекс Директ 2017

    22.06.2017: Мафия Контекстной Рекламы 3.0 - Александр Корнилов (kote)

    20.06.2017: (Повтор)INSTASOFT 4.0.9.5

    20.06.2017: Antidetect 7.1.1

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

    31.05.2017: Быстрая анимация в After Effects

    19.05.2017: [Instagram] Азбука Flatlay - Фотография глазами стилиста

    17.05.2017: Обработка фотографий под пленку.

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

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

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

    07.04.2017: [Оптарь] Заработок на AliExpress и Пабликах ВК

    05.04.2017: Онлайн-Марафон по дизайну во Вконтакте

    30.03.2017: Cinematic LUTs - цветокоррекция по известным фильмам и сериалам

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

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

    18.03.2017: [Convert Monster] Таргетированная реклама в Facebook и ВКонтакте для новичков (2016)

Скрыть объявление
Схемы заработка, Складчины, Инфопродукты
Постоянные обновления только у нас!
Присоединяйся :)

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

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

  1. Toretto

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

    Регистрация:
    13 янв 2014
    Сообщения:
    7.150
    Симпатии:
    4.987
    Используя только блокнот, мы напишем совсем маленькое учебное 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.