29 Июнь 2010

Совместная прошивка с mynook.ru


Сегодня день подарков и больших постов =)

Мы с Сашей, наконец, выпустили прошивку для нука!

И в связи с этим посты:

mynook.ru:
http://mynook.ru/rusificirovannaya-proshivka-dlya-nook/
Habrahabr:
http://habrahabr.ru/blogs/ebooks/97653/
http://habrahabr.ru/blogs/android/97666/
the-ebook.org:
http://www.the-ebook.org/forum/viewtopic.php?t=14522

16 Май 2010

Билды Library и FBReader’а + инструкция

0) подключаем через вайфай Nook к adb (все написано на nookdevs.com)

1) удаляем старую библиотеку от nookdevs:

adb uninstall com.nookdevs.library

2) скачиваем билды FBReader’а и My Books

3) кладем их к adb (Android Debug Bridge)

4) устанавливаем:

adb install fbreaderj-nook-065.apk

adb install nooklibrary-fb2.apk

Собственно, все!)
Наслаждайтесь альфа-версией)

Первый запуск FBReader’а на Nook

Сделал простенький порт FBReader’а на Nook.
Что в итоге? В итоге восхитительная скорость и возможность нормально гулять по ссылкам в документе!!
Видео:

21 Ноябрь 2009

Создание своей анимации загрузки

Протестировано на моем G1.

Особенности

  • Другая анимация - сделано на подобии того, как было в 1.0. Происходит постоянная диффузная смена двух картинок.
  • Возможность смены без перекомпиляции кода
  • Простота создания анимации
  • Сделан белый фон
  • Для нормальной работы картинки должны быть одинаковых размеров
  • Картинки центрируются

Видео

Что нам необходимо:

  • Две картинки boot-logo-1.png и boot-logo-2.png. Причем размер каждой стороны должен быть равен степени двойки. Например: 1 и 2
  • Измененный bootanimation
  • adb

Бэкап

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

adb pull /system/bin/bootanimation bootanimation_backup

Установка

  1. Загрузка bootanimation в устройство:
    adb push bootanimation /system/bin/bootanimation
    
  2. Установка прав bootanimation:
    adb shell
    cd /system/bin
    chmod 777 bootanimation
    
  3. Загрузка изображений в устройство:
    adb push boot-logo-1.png /system/media/boot-logo-1.png
    adb push boot-logo-2.png /system/media/boot-logo-2.png
    

28 Октябрь 2009

Android Starcraft - текущее положение дел

Перемещение юнитов

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

Атака юнитов

Необходимо доделать код для орудий, которые выпускают что-то в направлении противника, т.е. Ракеты, Лазеры и тпх, а не просто появляются в виде вспышек на противнике, а так же другие виды оружия, которые, правда, я еще не видел) И на этом все будет закончено с оружием для данного этапа.

Здания

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

Что дальше?

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

18 Сентябрь 2009

Новости о старкрафте

Изменения

  • Добавлен UI из оригинальной игры
  • Сделана подгрузка карты
  • Сделаны карты путей
  • Скроллинг более-менее плавный теперь
  • Реорганизация движка

Скриншоты

sc11

sc2

sc3

Дистрибутив

Скачать APK вы всегда можете на google-code

26 Август 2009

Создание/удаление разделов на флешке без linux’а- FAQ [перевод]

Оригинал

Зачем?

Что нам это дает:

  • Возможность установки прошивок Hero
  • Оптимизация работы некоторык кастомных прошивок (CyanogenMod, к примеру)
  • Возможность использования App2SD

Материалы

  • HTC G1 с рековери - CyanogenRecovery v1.4 (xda-developers thread, cm-recovery-1.4.img)
  • SDCard - рекомендуются карты шестого класса, т.к. они обеспечивают нужную производительность
  • Рутованная прошивка с поджержкой ext3/ext4 и swap’ом. Рекомендуется  CyanogenMod.
  • [Опционально]Android Debug Bridge tool (adb) можно взять из последнего SDK. Информация по работе с adb на xda-developers.
  • Прямые руки ;)

Подготовка SD-карты

  1. Загрузитесь в recovery(home + power)
  2. Откройте консоль. (По желанию подключитесь к консоли с компьютера через adb коммандой adb shell)
  3. Откройте гнушную утилиту parted для sd-карты: parted /dev/block/mmcblk0 (на конце - ноль)
  4. Напишите print для получения информации о разделах sd-карты
  5. Вы получите сообщения вида:
    Model: Unknown (unknown)
    Disk /dev/block/mmcblk0: 7969MB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      512B    7469MB  7469MB  primary  fat32        lba
     2      7469MB  7969MB  500MB   primary  ext2
    

    или если карточка новая:

    Model: Unknown (unknown)
    Disk /dev/block/mmcblk0: 7969MB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
    
  6. Теперь нам необходимо удалить все разделы командой вида rm <номер раздела>. В нашем случае:
    rm 1
    rm 2
    

Подсчет размеров разделов

  1. Для swap-раздела выделим 32MB. Остается: 7969MB - 32MB = 7937MB
  2. Для ext2/3/4 раздела выделим 500MB. Остается: 7937MB - 500MB = 7437MB
  3. Итого для FAT32 раздела осталось - 7437MB

Создание разделов

  1. Для нормального функционирования App2SD и swap’а необходимо создать разделы в следующем порядке: fat32, ext3, linux-swap. Для создания разделов используется комманда: mkpartfs <тип раздела> <тип файловой системы> <начало> <конец>, где начало и конец означают положения начала и конца раздела, если написано число, то по-умолчанию это мегабайты, для уточнения можно в конце приписать B или GB.
  2. В нашем случае необходимы следующие команды:
    mkpartfs primary fat32 0 7437
    mkpartfs primary ext2 7437 7937
    mkpartfs primary linux-swap 7937 7969
    
  3. Можете вызвать print для проверки конфигурации разделов. Все закончено - можете выйти из приложения командой quit. (не обращайте внимание на сообщение, появляющееся перед выходом)

Апгрейд ext2 до ext3 или ext4

  • Для апгрейда до ext3 выполните команду - upgrade_fs
  • После апгрейда до ext3 можно выполнить апгрейд до ext4 командой:
    tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p2
    e2fsck -fpDC0 /dev/block/mmcblk0p2

10 Май 2009

Использование стандартного UI для поиска.

Цель

В результате мы хотим получить нечто похожее на:
searchsample

Редактирование AndroidManifest.xml

Для активации этого окошка необходимо прописать следующий код для вашего активити.

  1. Настройка окна поиска
    <meta-data android:name="android.app.searchable"
     android:resource="@xml/searchable" />
    

    Где, xml/searchable - это XML примерно следующего содержания: 

    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
     android:label="Заголовок окна"
     android:hint="Текст на фоне поля ввода"
     android:searchMode="showSearchLabelAsBadge"
    />
    

    Подробнее про этот файл в разделе Searchability Metadata в доках

  2. Настройка активити для получения результатов необходимо добавить Intent-Filter:
    <intent-filter>
     <action android:name="android.intent.action.SEARCH" />
     <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

Получение введенного значения

Для получения результатов запроса достаточно написать следующий код в onCreate:

if (Intent.ACTION_SEARCH.equals(getIntent().getAction()))
{
	String query = getIntent().getStringExtra(SearchManager.QUERY);
}

6 Апрель 2009

Ручной Scroll в Андроиде

Наверное, каждый задавался себе вопросом - как же необходимо скроллить, что бы ощущения были такие же как в приложениях Maps и Browser. И вот я хочу вам представить готовый рецепт, основанный на коде WebView.

Для этого будем использовать два класса - Scroller и VelocityTracker.

Первое, что нам нужно сделать - начать считать скорость и сохранять её. Приведу сразу код:

//Экземпляр VelocityTracker
//для подсчета скоростей
VelocityTracker mVelocityTracker;

//Переменные для сохранения координат, полученных при предыдущих
//вызовах onTouchEvent
int oldX = -1, oldY = -1;

//Переменные для смещения посчитанного
int dx = 0, dy = 0;

@Override
public boolean onTouchEvent(MotionEvent ev) {
	int action = ev.getAction();
	switch (action) {
	case MotionEvent.ACTION_DOWN: {
		//Получаем новый экземпляр VelocityTracker.obtain()
		//Я не пробовал получать иначе, но в исходниках
		//было именно так. Скорее всего можно
		//просто вызывать VelocityTracker.clear();
		mVelocityTracker = VelocityTracker.obtain();

		oldX = (int) ev.getX();
		oldY = (int) ev.getY();
		return true;
	}
	case MotionEvent.ACTION_MOVE: {
		//Необходимо вызывать этот код в ACTION_MOVE, ACTION_UP и
		//возможно еще в ACTION_DOWN
		mVelocityTracker.addMovement(ev);

		int deltaX = (int) (oldX - ev.getX());
		int deltaY = (int) (oldY - ev.getY());

		oldX = (int) ev.getX();
		oldY = (int) ev.getY();

		//Делаем скролл на нужное смещение.
		//Этот метод только для ACTION_MOVE.
		mScroller.startScroll(dx, dy, -deltaX, -deltaY);
		return true;
	}
	case MotionEvent.ACTION_UP: {
		mVelocityTracker.addMovement(ev);

		//Считаем скорость. 1000 пикселей в секунду -
		//средняя ожидаемая скорость.
		//В сырцах было именно 1000 и я
		//не стал менять это значение
		mVelocityTracker.computeCurrentVelocity(1000);

		//Получаем скорость текущую
		int vx = (int) mVelocityTracker.getXVelocity();
		int vy = (int) mVelocityTracker.getYVelocity();

		//Перед этим кодом был следующий коммент:
		//Сделаем это более похожим на карты.
		//Там скорость обрезается в два раза.
		vx = vx * 3 / 4;
		vy = vy * 3 / 4;

		//Специальный метод для скролла, когда мы отпустили палец
		mScroller.fling(dx, dy, vx, vy, 0, 1500, 0, 1500);

		//Уничтожаем наш VelocityTracker
		mVelocityTracker.recycle();

		return true;
	}

	}
	return true;
}

Думаю, что из исходника все ясно)
Теперь нам необходимо посчитать скролл и выводить что-то на экран. в моем случае - это просто картинка:

@Override
protected void onDraw(Canvas canvas) {
	//Считаем скролл
	mScroller.computeScrollOffset();

	//Получаем координаты
	dx = mScroller.getCurrX();
	dy = mScroller.getCurrY();

	//Выводим картинку
	canvas.drawBitmap(bmp, dx, dy, new Paint());

	//Повторяем цикл
	invalidate();
}

В результате получили почти полноценный скролл: