Разработка софта на Nexus 7

    В недавнем посте Планшет — не роскошь зашла речь про использование планшетов под управлением Android не только для развлечений, но и в рабочих целях. Хочу продолжить эту тему и рассказать о том, как я использую свой Nexus 7 во время долгих поездок и программирую на нём приложения под этот самый Android.

    Вот список задач, которые должен решать планшет для меня во время данного времяпрепровождения:

    • редактирование исходного кода с подсветкой синтаксиса для языков Java, XML и C;
    • компиляция простейшего C кода в нативные для Android бинарики (то есть использовать Bionic вместо libc и т.д.);
    • сборка Java проекта в APK приложение;
    • git, ssh, привычные консольные GNU тулзы во всём их многообразии.


    И вот что у меня получилось.



    Редактирование кода



    Пожалуй, это самый важный момент. Без возможности комфортно (на сколько это возможно на таблетке с 7" экраном и без железной клавиатуры) писать код, все остальные пункты не имеют никакого смысла. Пробовать различные текстовые редакторы я начал ещё во времена Android 1.6 на телефоне с 3.5" экраном. В итоге свой выбор остановил на платной версии DroidEdit, чем она отличается от бесплатной я уже и не помню. Внутри есть действительно удобный UI, подсветка кучи языков, поддержка шорткатов, миллион всяких плюшек, и даже частичная поддержка ZenCoding/Emmet для любителей HTML. Вобщем, я даже и не знаю, как можно сделать мобильный текстовый редактор лучше.

    Следующее важное приложение для редактирования кода — это клавиатура. Опять же после многочисленных тестов я свой выбор остановил на Thumb Keyboard (кстати, сейчас у них скидка 50%). Плюсы данной клавиатуры: большое количество настроек, раскладки под разные устройства, наличие вспомогательных клавиш типа стрелочек, таба и прочих, плюс пользовательский ряд клавиш, куда можно добавить дополнительные клавиши и такие функции как Copy и Paste. Также есть клавиша вызова пользовательского словаря, куда лично я запихал часто используемые в Java выражения. Например, public void () {}. В итоге двумя тапами я вставляю обьявление нового метода. Вобщем, получилось весьма комфортно. Учитывая то, что DroidEdit принимает клавишу увеличения громкости за Ctrl (настраивается в приложении), то у меня теперь также работают привычные шорткаты: ctrl+s, ctrl+o и т.д.

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



    Компиляция и сборка



    Мне потребовалось компилировать код на C и Java. Для первого я сначала думал использовать GCC в chroot, но разбираться с тулчейном под Android было лень. В итоге поставил CCTools-free. Внутри есть какой-то примитивный редактор кода, а также уже настроенный под Android окружение компилятор. Для небольших утилит подошёл как нельзя кстати. Собирать большие проекты не советую — в виду медленной скорости работы памяти, компиляция чего-то крупного займёт много времени. Если есть необходимость такой сборки, то лучше поднять удалённый билд-сервер, заливать на него код и собирать там.



    Для сборки Android-приложений использую AIDE. Бесплатная версия имеет кучу ограничений, поэтому сразу был куплен «активатор всех фишек». В комплекте идёт весьма убогий редактор кода и даже рабочее авто-дополнение кода с поддержкой git его не спасает. Поэтому использую исключительно как компилятор. Он умеет собирать практически любые Android приложения, подписывать их дебаг-ключом и запускать на устройстве. Кроме того есть экспорт приложений в режиме релиза с нормальный ключом. Вобщем, с помощью AIDE можно приложение не только написать и оттестировать, но и выложить в маркет. Ах да, понимает Eclipse-проекты. Это полезно.

    Вывод: на планшете можно не только написать прототип, но и сделать полностью рабочее приложение и даже выложить в маркет.



    Утилиты GNU



    Лучший способ использовать утилиты GNU — это поставить полноценный дистрибутив Linux. Так как мне нужны были только консольные утилиты, то я ставил минимальную инсталляцию Ubuntu. В этом мне сильно помогло приложение Linux Deploy (автор, кстати, русский). На форуме 4pda есть тема, где можно узнать всю информацию о том, как пользоваться Linux Deploy и пообщаться с автором. Поэтому вдаваться в подробности не буду. Я ставил себе Ubuntu Quantal под архитектуру armhf, никакие сервера и GUI не ставил. Кроме того указал в настройках монтировать папку SD карты, чтобы можно было получить доступ к файлам с которыми работаю в Android.

    Пару слов об архитектурах. Есть два вида: armel и armhf. Первая — это ARM без поддержки операций с плавающей точкой на железном уровне. Обычно, это старые устройства с чипами ARMv6, однако Tegra2 так же не поддерживает числа с плавающей точкой, хотя чип не такой уж и старый. Я ставил себе armhf — Tegra3 такие операции поддерживает и благодаря этому весь Linux софт работает в разы быстрее.

    После установки вход в chroot выполняет консольной командой /data/local/linux/chroot и в нашей консоли высвечивается приветствие Ubuntu, а у нас сразу права root (в пределах Ubuntu, конечно же). Теперь можно доставить недостающие утилиты через apt-get и спокойно пользоваться ими в консоли.

    Стоит отметить, что установка Linux в chroot требует прав root в Android.

    Вывод: утилиты GNU доступны и готовы к работе.



    Заключение



    На данный момент я написал всего одно приложение используя планшет Nexus 7. Однако его продажи в Play Market уже окупили цену планшета. В процессе написания также использовался ноутбук дома для доводки приложения до ума. Однако первая версия была целиком и полностью написана на планшете. Единственная серьёзная проблема на данный момент заключается в том, что AIDE не умеет собирать проекты с референсными зависимостями (фишка ADT в Eclipse). Поэтому собрать приложение, использующее библиотеки типа ActionBarSherlock весьма проблематично. Решение проблемы я могу себе представить, но пока не углублялся. Если вы не используете референсы, то проблем не будет никаких.

    Вывод: современные планшеты под Android полностью готовы для использования в роли рабочих инструментов для программистов и админов в условиях максимальной мобильности.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 75

      0
      Что такое референсные зависимости?
        +2
        Библиотеки и исходники вне проекта. Как-то так.
          +1
          Это когда внешняя либа содержит ресурсы (xml-ки всякие). Подключать её как JAR не получится — ресурсы в JAR не попадут в нужном виде. Поэтому приходится открывать либу как отдельный проект (конечно же нужны полные исходники ресурсов) и топать в настройки проекта для приложения. Там в разделе Android снизу есть окошко для подключения референсов.

          Таким образом оба проекта с точки зрения компилятора становятся одним целым. Можно всё это сделать руками и слить в один проект, но есть нюансы.
            0
            Т.е. это как plugin fragments в Eclipse RCP?
              0
              Я не знаю, что это за плагин такой.
                0
                Наверняка же Sherlock использовали. Вот как он. У него там целая куча стилей, которые не кладутся в jar.
            +6
            А что мешает пользоваться при разработке в дороге нетбуком / ультабуком?
              0
              Как один из вариантов — отсутствие такового.
                +23
                Ответ из разряда «Нет автомобиля, но хочется быть водителем? Нет проблем!» :)
                image
                  0
                  Круто, но так правильнее — «Нет бензина, но хочется ездить на авто? No problem!»
                0
                тяжелый слишком…
                  0
                  Места много занимает. В карман я свой ультрабук сунуть не могу, а нексус — как для пальца об асфальт (: Плюс вес — 300-400 грамм против кило с плюсом.
                    +3
                    Хорошие у вас карманы, раз туда планшет влазит :)
                      0
                      У меня во внтуренний карман куртки идеально влазит.
                        +1
                        Аккуратнее с этим, я себе у 7* планшета ремнем безопасности экран об ребра раздавил нося его во внутреннем кармане куртки. Чехол жесткий не спас.
                          +4
                          Не возили бы Вы такие вещи под ремнём безопасности!

                          Я слышал про человека, погибшего в ДТП от того, что у него в кармане куртки под ремнём безопасности лежала всего-то шариковая ручка. При ударе ручка прорезала лёгкое…

                          А тут планшет: метал, стекло.
                          Желаю Вам никогда не попадать в ДТП, но всё-таки поберегите себя.
                            0
                            Это как же там так ручка-то лежала?
                            Может просто убийство ручкой расследовать было неохота, вот и списали на ремень?
                              0
                              Я думаю что в мягкой одежде под ремнём при лобовом ударе — достаточно чтобы ручка лежала вертикально, чтобы при изгибе туловища «вокруг ремня» это привело к вышеописанным последствиям.
                                0
                                Представил себе такое.
                                По-моему, товарищу просто дико неповезло, там столько совпадений множества факторов требуется, чтобы такое случилось…
                                Многие ездят за рулем в костюмах, у многих в кармане пиджака ручка лежит. И немалое количество их в дтп попадает.

                                Но в новостях нет же:
                                «Сегодня произошло дтп в г.***. В результате столкновения из-за ручек в кармане опять погибли люди.»
                                «ГД разработала законопроект по запрету провоза в карманах ручек и приравненых к ним продолговатых предметов, которые уносят жизни граждан.»
                                «Производители ручек, приведших к смерти, были оштрафованы, а ручки данной марки объявлены оружием и изымаются из продажи.»
                                  0
                                  Исходный мой месседж был «не возите планшеты в кармане куртки в машине: стекло, осколки, опасность». Каждому решать за себя, какие делать выводы…
                                  Удачи на дорогах!
                                    0
                                    Ну это-то понятно!
                                    Мне, например, самому некомфортно, когда что-то вжимается в меня ремнем. Телефон и прочее всегда вынимаю из нагрудных карманов.
                        0
                        Обычные джинсы не в обтяжку. Рабоче-крестьянские такие. 7" — мелкий планшет. Вот iPad полноразмерный в них не сунешь, это да.
                          0
                          7' планшеты почти в любые карманы помещаются
                      0
                      спасибо, непременно воспользуюсь Вашими рекомендациями.
                      Особо порадовало за Ubuntu
                        +1
                        однако Tegra2 так же не поддерживает числа с плавающей точкой

                        VFP3 инструкции поддерживает. К сожалению, это не полноценный SIMD, как NEON.
                        Кстати говоря, на XDA для моего планшета (Iconia Tab A501 на Tegra 2) собрали Ubuntu armhf, так что…
                          0
                          Собрать можно что угодно, другой вопрос что будет, если вы будете качать софт из официальных реп бубунты с такого дистра-мутанта (:
                          0
                          А зачем заморачиваться с локальной сборкой? git и текстовый редактор вполне достаточно. Собирать проекты maven'ом, использовать continious integration посредство jenkins'а с отчетами о сборке и тестировании на email, можно аттачем же присылать полученный и подписанный apk для ручного тестирования.
                          Написал код — закоммитил, на сервере jenkins собрал, прогнал unit-тесты, выслал отчет о сборке и тестировании, вполне удобно.
                            +6
                            С ужасом думаю, что скоро наступит момент, когда процент русских слов в нашей речи станет меньше процента английских.
                              +4
                              А как вы думаете, каков процент исконно-русских слов в современном русском языке сейчас?
                                0
                                Не заимствованных, а в чистом виде.
                                0
                                Вы предлагаете переводить специальные термины? Вряд ли комментарий Wolong'а можно назвать обычной разговорной речью.
                                  +1
                                  Используйте слово доля вместо слова процент, и это ужасное время не наступит.
                                    0
                                    А зачем беспокоиться о сборке на месте? Программного средства контроля версий и текстового редактора вполне достаточно. Собирать проекты maven'ом, использовать continious integration посредством jenkins'а (не осилил перевод на русский) с отчетами о сборке и проверках на электронную почту, можно приложением к письму же присылать полученный и подписанный электронной подписью установочный пакет для ручной проверки.

                                    Написал исходные текстыс помощью программного средства контроля версий отправил в централизованное место хранения исходных текстов набранное, на аппаратном обеспечении, обеспечивающем централизованное место хранения исходных текстов, (сервере) программное средство jenkins собрало, провёло проверки всех модулей частей, выслало отчет о сборке и о результатах проведенных проверок, вполне удобно.


                                    Так лучше? Я в этом неуверен.

                                    По-моему, использование сленга в ограниченных социальных группах вполне оправдано.
                                    Это повышает эффективность и оперативность во взаимодествии внутри группы за счёт введения сленговых сокращений. Это своеобразный способ компрессии сжатия передаваемых данных, что снижает транзакционные задержки. Мой «перевод» на русский вышеуказанного коммента это подтверждает. Вам для понимания смысла моего перевода протребуется больше времени, чем на коммент со сленгом.
                                    С другой стороны мой перевод будет более понятен не владеющему данным сленгом человеку, т.е. не члену данной социальной группы (читай «неайтишнику»).
                                    +1
                                    Не люблю мавен, а с андроидом там вообще всё туго. Ну а локально собирать для того, чтобы софт сразу тестить на устройстве. Иначе связь пропала и сиди, горюй (: Вот когда у нас будет покрытие 3G на 100% площади государства, тогда и буду «массово» использовать удалённые билды во всём великолепии. А сейчас намного удобнее юзать локальный билд всегда, когда есть возможность.
                                      0
                                      А что не так с мавеном и андроидом? Использую везде со своими проектами и все ок вроде. Встречаются пробелы типа BugSense(ну никак не хотят в maven central положить либу), но это скорее исключения.
                                      С ужасом вспоминаю времена когда антом все собиралось.
                                        0
                                        Нормальной интеграции с адт нет, авторы либ почти никогда не используют мавен (я видел только одну и даже название уже не помню), да и вообще геммороя куча вылазит.
                                          0
                                          Хм, ну видимо я везучий такой, практически все либы которые я использовал и использую поддерживают мавен.
                                          А насчет adt… ну не знаю, Idea указываешь pom.xml и проект открывается на раз и сразу подтягиваются все зависимости и проект сразу компилится, красота! Но это уже видимо вкусовщина, да.
                                            0
                                            Я пользуюсь клипсой и полезными плюшками из адт. С мавеном они не дружат.
                                              0
                                              Не понимаю, как связан мавен с adt? Какими полезными плюшками можно пользоваться из эклипса, которые не доступны в Идее?
                                              Из Idea всеми тулзами из adt вполне себе удобно пользоваться, за исключением пожалуй визуального редактора в эклипсе, но у идеи уже свой есть, вполне себе ничего.
                                                0
                                                Ну, например, запуск приложения. В клипсе там и выбор девайса и всё на свете в одной кнопке. А с мавеном приходится запускать окольными путями, не?
                                                  0
                                                  Не совсем. Мавеном, конечно, можно запускать каждый раз прогу на эмулятор из терминала, но я запускаю все равно из IDE, а мавен нужен чтобы все зависимости в проекте легко подтягивались и обновлялись.
                                                  Ну и для jenkins'а конечно, с мавеном на нем тоже гораздо проще, чем с антом…
                                                    0
                                                    Акей, надо попробовать. Я мавен тыкал давно в этом направлении и всё было через пень колоду. Может теперь и вправду юзабельно стало.
                                              0
                                              Не могли бы вы написать статью на Хабре по особенностям работы с maven над проектами под Android?
                                    0
                                    Аух, одним словом.
                                      0
                                      ДА АЩЩЕ!!!1
                                      +4
                                      Пару слов об архитектурах. Есть два вида: armel и armhf. Первая — это ARM без поддержки операций с плавающей точкой на железном уровне. Обычно, это старые устройства с чипами ARMv6, однако Tegra2 так же не поддерживает числа с плавающей точкой, хотя чип не такой уж и старый. Я ставил себе armhf — Tegra3 такие операции поддерживает и благодаря этому весь Linux софт работает в разы быстрее.


                                      Вы все перепутали: armel и armhf — это не рахитектуры ARM. Первое это эмулятор и порт дебиана на арм, второе — это порт дебиана под арм с поддержкой плавающей точки. К железу и темболее архитектуре эти две штуки отношения не имеют

                                      ARMv6 поддерживает операции с плавающей точкой, точнее VFPv2 (не все, это опционально). Iphone Original и iPhone 3G тому прямые доказательства.

                                      Tegra2 вы вообще очень обидели. Конечно её обделили технологией NEON, которая для этого семейства опциональна (а могли бы добавить), но во всем семействе Cortex-A процессоров реализована VFPv3.

                                      Так что ерунду пишите.

                                        +2
                                        armel и armhf — это архитектуры в понятии Debian, так что проблемы не вижу.
                                          +1
                                          Это как так «архитектуры в понятии Debian»? С каких пор мой любимый формальный мир IT превратился в мир субъективных понятий?
                                          Скиньте ссылку пожалкуйста где это хоть кто-то архитектурой называет?
                                            +1
                                            Порт = архитектура. Что тут непонятно?
                                              +1
                                              вы подменили одно общепринятое понятие другим?
                                              Тем более в своем тексте вы явно даете понять, что это не порт, а как раз семейство процессоров:
                                              armel и armhf. Первая — это ARM без поддержки операций с плавающей точкой на железном уровне
                                                –2
                                                Я изначально говорил вообще про убунту. Порт в убунте = порт в freebsd. Поэтому армел и армхф для меня — это архитектуры. Вобщем, вы кагбе и правы, но кагбе дела не меняет. На нормальное железо надо ставить armhf.
                                                  +5
                                                  Порт в убунте = порт в freebsd. Поэтому армел и армхф для меня — это архитектуры.

                                                  Вообще два несвязанных утверждения. Стол на кухне = стол в прихожей. Поэтому телевизор для меня — это фрукт.

                                                  Я не понимаю, почему так сложно признать свою ошибку? В любом случае мне не интересно вам что-то доказывать. Просто решил поправить, может кто-то, кого вы ввели в заблуждение прочитает и «выйдет» из заблуждения.
                                                    –3
                                                    Я уже сказал, что вы — правы. Ещё раз написать?
                                                      +2
                                                      Скользкий вы человек, вы не так написали, дословно было так:
                                                      Вобщем, вы кагбе и правы, но кагбе дела не меняет.

                                                      То-есть вы признали мою правоту и не признали собственную ошибку, а я как раз говорил об обратном.
                                                        0
                                                        Ничего скользкого не вижу. Суть написанного — выбрать armhf дистр когда возможно, а не детальный разбор железа, софта и принципов их взаимодействия. Я считаю, что мой текст соответсвует этому. Если у вас есть идеи, как переписать абзац не погружая читателя в низкоуровневые детали, но сделать более грамотным с технической точки зрения, то с удовольствием приму правку.
                                          +3
                                          Вы все перепутали: armel и armhf — это не рахитектуры ARM. Первое это эмулятор и порт дебиана на арм, второе — это порт дебиана под арм с поддержкой плавающей точки.


                                          armel и armhf это разные версии ABI.
                                          В первом FP параметры передаются в функцию через целочисленные регистры (процессор при этом может как поддерживать FP аппаратно так и не поддерживать), во втором (hard float) значения передаются через FP регистры.
                                          0
                                          кто расскажет про подобный опыт, но уже с Ipad :)?
                                            +2
                                            на iPad нету джавы. А вообще про разработку на iOS писали неоднократно.
                                              0
                                              У меня iPad есть только у девушки моей. С него лучше всякие картинки красивые смотреть (: Так что лично для меня эти два девайса решают разные задачи и не пересекаются.
                                                +17
                                                зато, у тебя есть девушка.
                                                  +2
                                                  И ДВА ПЛАНШЕТА!11
                                              0
                                              Есть еще что добавить. Я сам пробовал настроить себе все для разработки на JS. То на чем я остановился — Hackers Keyboard, Vim Touch (удобнее Droid Edita на мой взгляд), AIDE для работы с гит, умеет все что надо, но как редактор так себе. Еще мне привезли с dx.com блютус клавиатуру, удобно, но есть у нее одна проблема, в ней магнит возле магнитного сенсора нексуса, от чего при вставке планшета в клаву он гаснет и нормально не включается. Может знает кто как вообще вырубить сенсор?
                                                0
                                                Гит таки лучше в консоли использовать. Ну то есть мне так привычнее (:
                                                0
                                                На сколько хватает батареи? У меня на Galaxy Nexus AIDE съедает батарею на глазах…
                                                  0
                                                  На три дня (: Я в AIDE только собираю проект. А это всего два-три раза за часовую поездку.
                                                  +1
                                                  Я думаю с тачем все же не вариант. Или как миниум 10". Для 7" надо брать хотя бы небольшую bluetooth клаву или типа того.
                                                    0
                                                    Скиньте пожалуйста ссылку на приложение, о котором вы говорите в конце поста.
                                                      0
                                                      XDA для понимая что это, Market чтобы посмотреть. А про софтину я наверное ещё напишу отдельный пост, там много интересного рассказать можно.
                                                      0
                                                      Интересной была бы возможность подключать к планшету внешние монитор и клаву/мышь.
                                                      Тогда даже дома можно было бы использовать как основную систему для разработки.
                                                      Ну, конечно при условии что тормозит не слишком зверски :)

                                                      Насколько я понимаю, N7 вывод экрана не поддерживает, а вот Huawei Mediapad вроде вполне может такое позволить делать. Впрочем, у него хватает других недостатков…
                                                        0
                                                        Да вы знаете толк в извращениях, сэр!
                                                          0
                                                          Это ль извращения… Будет времечко и желание, напишу как патчить Android в рантайме (:
                                                          0
                                                          Имею сей девайс, но даже в вебе тяжело. Только приложениями пользуюсь. А за вас рад. Продолжайте нас радовать!
                                                            0
                                                            Что тяжелого-то?

                                                          Only users with full accounts can post comments. Log in, please.