Category: Android

Posts on Android development

  • SVN в Windows

    Я решил начать использовать SVN на локальной машине для управления версиями своих Windows-приложений. На эту тему написано уже немало статей, но я сделал не так, как в них написано. Прочитал 2-3 статьи на русском языке и пару статей на английском. Ничего не получалось, тогда я нашел ответ, в котором писалось про VisualSVN. Все у меня получилось с ним и хочу поделиться тем, как. Я не пишу здесь про основы SVN, о том, что это, что такое рабочая копия и т.д. Лучше со всем этим предварительно ознакомиться, чтобы не делать без понимания.

    Итак, опишу по шагам, что нужно сделать, чтобы настроить SVN на своем компьютере.

    1. Скачиваем и устанавливаем VisualSVN – это серверная часть
    2. Скачиваем и устанавливаем TortoiseSVN – клиентская часть
    3. Запускаем VisualSVN. Нажимаем правой кнопкой на Repositories и выбираем Create New Repository. Если рисунок не понятен, просто кликните на нем и он откроется в увеличенном виде.
    4. Даем название, ставим галочку и копируем куда-нибудь в блокнот URL. Он нам дальше пригодится. Можно и не копировать, есть специальная функция, которая затем нам этот URL будет возвращать. Если порт 443 занят, используем 8443. Это TCP порт HTTPS по умолчанию.
    5. Находим папку с нашим проектом, который мы хотим импортировать в репозиторий. Нажимаем правой кнопкой на нем, выбираем TortoiseSVN->Import и указываем для импорта URL репозитория, который мы сохранили при его создании. Если не сохранили, то идем в репозиторий, нажимаем правой кнопкой на нем в VisualSVN и выбираем Copy URL to ClipBoard. После вставки URL в TortoiseSVN нажимаем Ok. Произошел импорт проекта в репозиторий. При этом может потребоваться создание пользователя. Соглашаемся и создаем его с паролем.
    6. Теперь нужно скопировать рабочую копию из репозитория. Создаем папку для рабочей копии. Нажимаем на ней правой кнопкой и выбираем SVN Checkout. Указываем URL репозитория.
    7. Затем после разработки и доработки точно так же делаем Commit. Если какие-то файлы были удалены или добавлены – тут чуть сложнее. Просто нажимаем правой кнопкой на рабочую копию проекта, выбираем Tortoise SVN->Check for modifications. Далее нажимаем правой кнопкой на соответствующие файлы и выбираем либо Delete, либо Add. После чего делаем Commit.
    8. Если в браузере ввести URL репозитория, можно увидеть, что в нем есть.

    Решение о том, что можно использовать Visual SVN нашел здесь.

  • Использование переменных в Терминале Mac OS X (Bash)

    Иногда приходится иметь дело с определенными папками, которые лежат очень глубоко и было бы хорошо создавать для них псевдонимы, которые можно использовать в других командах, например SVN. Я сначала пытался это сделать через alias, а потом нашел решение через переменные окружения.

    Создать переменную окружения прямо в Терминале можно следующим образом:

    $MooreaFolder=http://xxx.xx.xxx.xx/svn/MooreaClient/MedInfo
    

    Главное – не оставить пробелы вокруг знака равно. Знак доллара дополнительный не нужен, тот, что здесь отображен – это приглашение Терминала. Теперь эту переменную можно использовать в командах, например, SVN:

    Отображаем значение переменной

    $echo $MooreaFolder
    

    Используем в svn checkout

    $svn checkout $MooreaFolder /Users/UserName/Desktop/Android_MEDinfo
    

    Таким образом, мы переносим из MooreaFolder на рабочий стол рабочую копию проекта. Обращаем внимание на то, что перед именем переменной должен стоять знак доллара ($).

    Это все конечно хорошо, а что если нам нужно, чтобы переменная сохранилась и при перезапуске Терминала можно было ей всегда пользоваться? Для этого ее нужно прописать в скрипте автозапуска bash_profile.

    Открываем скрипт:

    $vim ~/.bash_profile
    

    Добавляем в него строку

    MooreaFolder=http://xxx.xx.xxx.xx/svn/MooreaClient/MedInfo
    

    Подробнее о работе с Vim и об этом скрипте можно почитать здесь

    Перезапускаем скрипт вручную, чтобы изменения вошли в силу:

    $source ~/.bash_profile
    

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

  • Настройка темы WordPress TwentyTen

    Чтобы изменить текст “Continue reading”, надо:

    • Найти файл WordPress/wp-content/themes/twentyten/functions.php
    • Заменить в нем все строки “Continue reading” на нужные
  • О папке drawable в проекте Android приложения

    Есть два аспекта, которые нужно учитывать при работе с папкой drawable в проекте Android приложения: иерархия файлов и их названия.

    Иерархия файлов
    К сожалению, в папке drawable нельзя создавать папки, чтобы упорядочивать xml и png файлы. К примеру, следующая иерархия давала сбой:

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

    Это активно обсуждается здесь:
    http://stackoverflow.com/questions/1077357/can-the-android-drawable-directory-contain-subdirectories

    Разработчики надеются, что Google исправит это в следующей версии Android SDK.

    Названия файлов
    Названия всех файлов должны быть разными, даже если они разных типов – png и xml.
    Например, если у вас есть файл ic_tab_menu.xml, то не должно быть файла ic_tab_menu.png.

  • Препятствия на пути познания

    Препятствия на пути познания по Бэкону:

    Фрэнсис Бэкон разделил источники человеческих ошибок, стоящих на пути познания, на четыре группы, которые он назвал «идолами», (лат. idola). Это «идолы рода», «идолы пещеры», «идолы площади» и «идолы театра».

    «Идолы рода» проистекают из самой человеческой природы, они не зависят ни от культуры, ни от индивидуальности человека. «Ум человека уподобляется неровному зеркалу, которое, примешивая к природе вещей свою природу, отражает вещи в искривлённом и обезображенном виде».

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

    «Идолы площади (рынка)» — следствие общественной природы человека, — общения и использования в общении языка. «Люди объединяются речью. Слова же устанавливаются сообразно разумению толпы. Поэтому плохое и нелепое установление слов удивительным образом осаждает разум».

    «Идолы театра» — это усваиваемые человеком от других людей ложные представления об устройстве действительности. «При этом мы разумеем здесь не только общие философские учения, но и многочисленные начала и аксиомы наук, которые получили силу вследствие предания, веры и беззаботности».

  • Горячие клавиши Eclipse Helios

    Полезные, часто используемые и интересные горячие клавиши Eclipse:

    Cmd+O – открывает так называемый Outline, то есть список всех методов, постоянных и классов. Причем курсор размещается сразу в строке поиска – Вы можете начать вводить букву f и получите отфильтрованный список всего на эту букву. Затем нажав на элемент списка можете перейти куда Вам нужно. Если еще раз нажать это сочетание, то Вы получите список всех вложенных членов классов или методов.

    Cmd+T – аналогичным образом показывает иерархию типов. Что интересно, можно нажать на кнопку справа вверху в этом окне и переместить его используя функцию Move. Затем можно сохранить точно так же положение этого окна и оно будет всегда показываться там, где Вам удобно с тем размером, который Вам нравится.

    Cmd+Shift+O – добавляет все используемые недостающие библиотеки автоматически, то есть дописывает все необходимые import строки.

    Cmd+Shift+L – просмотр горячих клавиш. Повторное нажатие открывает настройки горячих клавиш.

    Debug and Run:

    fn+Cmd+F11 – Debug

    fn+Shift+Cmd+F11 – Run

    fn+F8 – Resume (продолжить дебаггинг)

    fn+F5 – Step Into

    fn+F6 – Stop Out

    fn+Cmd+F2 – Terminate

    Text Editing:

    Cmd+D – Удалить строку

    Cmd+I – Поправить Intendation

    Cmd+/ – Закомментировать строку (при этом можно закомментировать несколько строк так же)

    Cmd+Shift+/ – Убрать комментирование строки

    Cmd+\ – Закомментировать блок

    Cmd+Shift+\ – Убрать комментирование блока

    Shift+Cmd+S – Сохранить все

    Cmd+1 – Быстрое исправление (магическое заклинание – предлагает свои варианты для исправления)

    Cmd+F – Find&Replace

    Cmd+K – Find Next (диалоговое окно Find при этом должно быть закрыто)

  • Настройка Eclipse: изменение шрифтов и горячих клавиш

    Начал учиться разрабатывать под Android на Eclipse, который кстати поставил под Mac OS X. И кстати, для этого дела нужно ставить не первый попавшийся Eclipse, а именно Eclipse Helios, что я к сожалению узнал только по опыту. Eclipse меня мало радовал после привычного XCode.

    По умолчанию настройки Eclipse не такие крутые, как хотелось бы: код в Eclipse пишется шрифтом 11(!), а брейкпоинты ставятся через Cmd+Shift+B по умолчанию(попробуйте так пальцы разместить на клавиатуре – у Вас мизинец начнет болеть через 5 минут). К счастью, Eclipse гибкий и легко настраивается.

    Изменение шрифта

    Сначала я думал, что для изменения шрифтов нужно закачать где-то тему и импортировать ее. При этом темы других разработчиков, которые я нашел, мне не нравились. Я хотел просто увеличить размер шрифта с 11 на что-нибудь получше. Оказалось, что есть одна настройка, которая изменяет размер шрифта во всем коде.

    Итак, нажимаем Eclipse -> Настройки (или Cmd + ,). Далее раскрываем General и раскрываем Appearance. Нажимаем Colors and Fonts. Затем справа раскрываем список Basic и выделяем элемент Text Font:

    Редактируем через кнопку Edit…. Лично я увеличил размер до 20. И теперь у меня Java код выглядит так:

    Изменение горячих клавиш

    Это существенно сэкономит Вам время и сбережет Ваши пальцы от нажатия плохих сочетаний. Чтобы изменить горячую клавишу, нужно по аналогии выбрать Keys(отмечено красным на первом рисунке, который можно увеличить, просто щелкнув по нему) Далее поменять, скажем, Shift+Cmd+B на Alt+B для брейкпоинтов. И кстати, здесь же можно узнать, какие сочетания клавиш можно использовать для других функций.

    Просмотр горячих клавиш
    Горячие клавиши как заклинания. Нужно знать их сочетания, но не всегда помнишь их, поэтому в Eclipse есть маленькая фишечка. Нажмите в любом месте Cmd+Shift+L и вы получите список горячих клавиш. Чтобы закрыть этот список просто щелкните на любое место в среде разработки или нажмите Esc. Повторное нажатие этого сочетания при открытом списке приведет Вас сразу к настройкам горячих клавиш, что тоже удобно. Выглядит это так:

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

  • Изменение вводного приглашения Терминала в Mac OS X

    Уберем все лишнее в приглашении в Терминале (aka Bash), оставив только путь к текущей папке. Параметр PS1 отвечает за вводное приглашение Bash, PS2 – за приглашение во время ввода дополнительных параметров.

    Открываем Терминал и открываем скрипт bash_profile в редакторе Vim:

    $ vim ~/.bash_profile
    

    Нажимаем клавишу “i”, чтобы войти в режим Insert.

    Вводим

    PS1='\w $'
    

    Рассмотрим список допустимых параметров:

    Параметр – Значение
    \a an ASCII bell character (07)
    \d дата в формате »День_недели, Месяц, Число».
    \e an ASCII escape character (033)
    \h имя хоста до первой точки.
    \H имя хоста
    \j количество задач, работающих в шелле в настоящее время
    \l название терминала
    \n переход на новую строку
    \r возврат каретки на начало строки
    \s название шелла (будет выведено, например, «bash»
    \t время в 24-часовом формате (ЧЧ: MM: СС)
    \T время в 12-часовом формате (ЧЧ: ММ: СС)
    \@ время в 12-часовом формате (AM/PM)
    \u имя активного пользователя
    \v номер версии bash
    \V номер версии bash, номер релиза, номер патча
    \w текущая директория (будет выведено в формате /path/to/work_dir_name)
    \W имя текущей директории (будет выведено в формате «dir_name\»)
    \! номер команды в истории
    \# системный номер команды
    \$ if the effective UID is 0, a #, otherwise a $
    \\ обратный слэш
    \[ начало последовательности непечатаемых символов (см. примеры в разделе «Цвета и стилизация».
    \] конец последовательности символов
    $ ( ) внешняя комманда

    Нажимаем Esc и пишем :wq, чтобы сохранить и выйти.

    Перезапускаем скрипт bash_profile командой:

    source ~/.bash_profile
    

    Готово!

  • Работа с Subversion в Mac OS X

    Здесь я опишу основы работы с SubVersion в Mac OS X, начиная от создания репозитория и заканчивая редактированием и обновлением версий.

    Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.

    Модель работы
    Subversion — централизованная система (в отличие от распределённых систем, таких как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере.
    Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель копирование — изменение — слияние. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель блокирование — изменение — разблокирование.
    При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.

    Приемы работы
    Открываем Терминал. Перейдем в корневую папку для данного пользователя:

    $ cd ~/ 
    

    С помощью следующей команды можно узнать путь к этой и любой другой папке:

    $ pwd
    

    Создаем репозиторий в корневой папке:

    $ svnadmin create SVNrep
    

    Копируем начальную версию нашего проекта, предварительно узнав путь к нему, в созданный репозиторий:

    $ svn import /Users/UserName/Desktop/ProjectName
      file:///Users/UserName/SVNrep/ -m "Initial import"
    

    Здесь после -m идет комментарий. После import идет путь к папке проекта, затем путь к репозиторию. Обратите внимание, что нужно указать еще слово file в начале пути к репозиторию. В данном случае в репозитории SVNrep будет все, что есть внутри ProjectName. Проверить это можно, перейдя к папке SVNrep и используя команду ls с параметром a1, который ознчает, что будет показано все, включая скрытые папки и файлы:

    $ cd ~/SVNrep
    $ ls -a1
    

    Не удивляйтесь, что кроме Ваших файлов, есть еще куча других, в том числе папка .svn во всех вложенных папках – это служебные файлы svn, которые нужны для того, чтобы каждый раз не указывать путь к репозиторию в дальнейшем. Если Вы хотите изъять теперь из репозитория копию проекта без этих файлов и создать безопасную для Web копию, через которую нельзя воздействовать на репозиторий, введите следующую команду:

    $ svn export file:///Users/UserName/SVNrep/
     /Users/UserName/Desktop/ProjectNameWebSafe
    

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

    Для того, чтобы создать рабочую копию репозитория SVN, введите команду:

    $ svn checkout file:///Users/UserName/SVNrep/
     /Users/UserName/Desktop/ProjectNameCopy
    

    Рабочая копия в отличие от Web Safe копии позволяет сохранять изменения, созданные в рабочей копии, в репозитории.

    Предположим теперь, что наш репозиторий находится на сервере где-то.
    Копируем наш проект(первую версию) с локального компьютера в репозиторий на сервере:

    $ svn import /Users/UserName/Desktop/ProjectName  
    http://HostName/svn/ProjectRepositoryName/ -m "Initial import"
    

    Теперь создаем рабочую копию у себя с сервера:

    $ svn checkout http://HostName/svn/ProjectName/
     /Users/UserName/Desktop/WorkProjectFolder
    

    Предположим мы что-то изменили в рабочей копии. Создали что-то новое, дописали что-то и хотим посмотреть на разницу между рабочей копией и репозиторием на сервере. Для этого переходим в папку проекта в Терминале и используем команду status:

    $cd /Users/UserName/Desktop/WorkProjectFolder/
    $ svn status
    

    Если Вы увидите, например, такой текст:

    M test.txt
    

    это означает, что файл test.txt был модифицирован (“M” = Modified). Добавление, удаление и переименовывание объектов необходимо осуществлять специальными командами.

    Теперь нужно сделать Commit произведенных в рабочей копии изменений, чтобы они отразились на сервере в репозитории:

    $ svn commit -m "Added and removed some test files"
    

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

    Предположим, что пока вы работали с рабочей копией, кто-то успел добавить новые файлы в Ваш проект. Чтобы обновить рабочую копию, нужно использовать команду update. Здесь пример с результатом update, как пример – восстановлена фотография.

    $ svn update
    Restored 'Medicine/Снимок экрана 2011-12-02 в 17.42.18.png'
    At revision 11.
    

    Чтобы просмотреть все Revisions, используем команду log. При этом отображается число строк измененных и комментарии:

    $ svn log
    

    Чтобы просмотреть только измененные строки в сорс-файлах в определенном Revision (версии), используем следующий синтаксис:

    $ svn diff -r 1
    

    Если Вы захотите откатиться к предыдущей версии (любой), делаем update, но только указываем еще номер Revision (версии):

    $ svn update -r 1
    

    Этот update подействует на весь проект. Но если вы хотите проапдейтить определенный файл, нужно его указать:

    $ svn update test.txt -r 1
    

    Добавление файлов производится вручную. Недостаточно просто создать новый файл в рабочей копии и сделать commit. Нужно его еще добавить в репозиторий. Например, создаем сначала папку в нашем проекте под названием TestFolder. Затем нужно ее прописать в SVN и сделать commit, чтобы она появилась в репозитории на сервере:

    $ svn add TestFolder 
    A         TestFolder
    $ svn commit -m "added new folder TestFolder"
    Adding         TestFolder
    Committed revision 12.
    

    Аналогично производится удаление:

    $ svn delete test2.txt
    $ svn commit -m "deleted file"
    

    И переименовывание:

    $ svn move oldfilename newfilename
    $ svn commit -m "moved file"
    

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

    Если возникает конфликт при commit’е, нужно сначала сделать update, а затем commit. При этом SVN строчка за строчкой сам добавляет недостающие строки в Вашу копию.

    $ svn commit -m "Some change by Michael"
    Sending test.txt
    svn: Commit failed (details follow):
    svn: Out of date: '/test/test.txt' in transaction '3-1'
    

    Если SVN не справляется с этим, то он создает копии файлов в Вашей рабочей копии проекта:

    test.txt.mine
    test.txt.r2
    test.txt.r3
    

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

    Ссылки для изучения:

    http://www.rubyrobot.org/tutorial/subversion-with-mac-os-x – хорошая статья на эту же тему на английском языке

  • Размещение программного кода в WordPress

    Есть два инструмента для красивого размещения программного кода в текстах блогов WordPress. Когда речь идет о небольших кусках кода, то лучше использовать первый вариант, так как он проще и без примочек. Если нужно разместить большой код, то – второй, так как он цветной и более сложный.

    1. Используем плагин WP-Syntax.

    После его установки код в тексте блога можно выделять тегами

    <pre lang="LANGUAGE" line="1"> и </pre>
    

    2. Используем другой плагин, который все делает не только аккуратно и чисто, но и использует цвета, как в XCode, например – WP-SynHighlight.

    Пользуемся им так, только без единички:

    [codesyntax1 lang="LANGUAGE"] и [/codesyntax1]
    

    В обоих вариантах вместо “LANGUAGE” подставляется любой язык, который есть в списке GeSHi. Для добавления кода HTML, нужно заменять теги на “&lt” и “&gt” + ; в конце этих последовательностей.

    Данный пост написан с использованием WP-Syntax, к примеру.
    А вот этот с использованием WP-SynHighlight.