EXL's Developer Blog
Translate site on my language:

Каталог статей
Меню сайта

Категории раздела

Поиск

Друзья сайта
  • MotoFan.Ru
  • Dingoo A320.Русский Ресурс
  • Motorola Gaming site
  • Android Games Development
  • ROKR E2 Developments

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Приветствую Вас, Гость · RSS 27.06.2017, 23:13

    Главная » Статьи » Cтатьи

    Мануал по портированию игр и программ (с) EXL
    В соседних ветках много тем по портированию софта/игр. Я не знаток в этом деле, но кое-что могу рассказать) 
    Для портирования приложений на нашу платформу нужны:
    1. AndLinux или Cygwin (Запускаются под виндой). Или любой Linux
    2. SDK
    3. Прямые руки
    Я расcмотрю наиболее приемлемый способ с использованием Винды и AndLinux'a
    Под Cygwin говорят плохо собираются программы, ну а настоящий Linux я пока не освоил.
    Итак:
    1. Скачиваем сам AndLinux Я использовал версию (beta2 final KDE version, 537 MB), качал себе в городской сетке, пошарьтесь в своих тоже, может найдёте.
    2. Устанавливаем его.
    Мануал по установке AndLinux'a в картинках для начинающих) Подписи к скринам внизу
    Запускаем установку

    Кликаем next

    Соглашаемся, кликаем next

    Выбираем путь установки, next

    Выбираем версию. Лучше верхнюю, next

    Выбираем память. Я оставил 256 mb, next

    Настройки. Оставьте всё как есть, next

    Звук в AndLinux ставте да, next

    Настройки запуска AndLinux ставьте первое, next

    Введите имя, пароль, next

    Выберите третье, пользователи Windows XP лучше выбирайте COFS, next

    Создаем папку AndLinux в корне вашего жесткого диска, даём ей общий доступ!

    Нажимаем Refresh, выбираем расшаренную нами папку, вводим имя пользователя и пароль, next
    Дальше - установка ярлыков, групп меню, ассоциации к файлам, ставим что нужно, ждём пока установиться и перезагружаем компьютер!

    3. Скачиваем SDK, Зеркало. Копируем данный архив в расшаренную папку AndLinux.
    4. Установка окружения для портирования:
    Стартуем AndLinux, запускаем под ним Konsole


    Выполняем команды: (Новая строка - ENTER, вместо user естественно пишем своё имя, после первой команды потребуется ввести пароль)
    Code

    sudo mkdir /mmc
    sudo chown user -R /opt
    sudo chown user -R /home
    sudo chown user -R /mmc
    mkdir /opt/toolchains
    mkdir /home/z6
    mkdir /home/z6/build
    mkdir /mmc/mmca1
    tar -C /opt/toolchains -xzvf /mnt/win/motomagx-toolchains.tar.gz
    cp /opt/toolchains/motomagx/setenv-z6.sh /home/z6
    cp /opt/toolchains/motomagx/setenv-z6-2.sh /home/z6


    5. Теперь запускаем окружение
    Code

    cd /home/z6
    . setenv-z6.sh




    6. Качаем исходники и кидаем их в папку AndLinux, распаковываем и пробуем собрать
    Code

    cd /home/z6
    tar -xzvf /mnt/win/Ваши_исходники.tar.gz
    cd Ваши_исходники
    ./configure --host=arm-linux-gnueabi
    make (или make install)


    Если не конфигурируется, пробуем
    Code

    ./configure --host=arm-linux-gnueabi --enable-sdlui --without-x


    Если приложению нужны data файлы - нужен параметр --prefix=./ - например
    Code

    ./configure --host=arm-linux-gnueabi --enable-sdlui --without-x --prefix=/mmc/mmca1/..Ваш путь

    Или так
    Code

    ./configure --host=arm-linux-gnueabi --enable-sdlui --with-sdlsound --without-x --prefix=./

    Не забываем выполнять команду make distclean - она удаляет существующие неправильные бинарники


    7. Если в исходниках отсутствует файл configure
    вручную редактируем Makefile
    ищем и заменяем строчки
    Code

    CC:=gcc ---> CC:=arm-linux-gnueabi-gcc
    cc=gcc ---> CC=arm-linux-gnueabi-gcc
    cxx=g++ ---> CXX=arm-linux-gnueabi-g++
    ld=ld ---> LD=arm-linux-gnueabi-ld
    ar=ar ---> AR=arm-linux-gnueabi-ar
    as=as---> AS=arm-linux-gnueabi-as
    oc=oc ---> OC=arm-linux-gnueabi-objcopy
    ranlib=ranlib ---> RANLIB=arm-linux-gnueabi-ranlib
    strip=strip ---> STRIP=arm-linux-gnueabi-strip

    8. Если конфигурирование и компиляция прошла без ошибок, вытаскиваем полученный файл из AndLinux'a с помощью Dolphin,
    Не забываем кстати стрипать полученный экзешник, по такому коду (Где екзешник "x64" лежит в папке src, выполнять после make):
    Code

    arm-linux-gnueabi-strip src/x64



    Он лежит по пути (Вкладка Root) \home\Z6\Ваши_Исходники\Исполняемый файл, для этого его нужно вырезать, перейти на вкладку home и кинуть в папку windows, после этого он появиться в C:\\AndLinux


    9. Копируем данный файл в корень карты памяти
    и выполняем в телнете
    Code

    cd /mmc/mmca1
    export LD_LIBRARY_PATH=/mmc/mmca1/games/lib:$LD_LIBRARY_PATH
    chmod +x Имя исполняемого файла  
    ./Имя исполняемого файла  


    Если запустилось - отлично! Делайте пакет и выкладывайте!
    ------------------------------------------------------------------------------------
    1. Правка управления (Ищите в исходниках по SDLK или клавишам):
    Code

    layer[0].keys[0]=SDLK_LEFT;
      player[0].keys[1]=SDLK_RIGHT;
      player[0].keys[2]=SDLK_UP;
      player[0].keys[3]=SDLK_DOWN;
    #ifndef ALT_FIRE
      player[0].keys[4]=SDLK_RCTRL


    2. Правка разрешения (Ищите в исходниках по VIDEO или само разрешение)
    3. Решение для добавления сворачивания приложения при входящем вызове (sms, флипе, других телефонных событиях) с остановкой звука делаем через замену процедуры SDL_PollEvent на собственную mySDL_PollEvent
    Code

    -------------example.h-----------------------
    int mySDL_PollEvent(SDL_Event *event);

    // audio use sdl-lib
    SDL_AudioSpec obtained;
    boolean _audioSuspended;
    void suspendAudio();
    int resumeAudio();

    // audio use sdl-mixer lib
    void suspendAudio();
    int resumeAudio();
    void closeAudio(void);
    --------------example.cpp--------------------
    int mySDL_PollEvent(SDL_Event *event) {
      int _r= SDL_PollEvent(event);
      if (!_r)
      return 0;
      if (event->type == SDL_ACTIVEEVENT) {
      if (event->active.state == SDL_APPINPUTFOCUS && !event->active.gain) {
      suspendAudio();
      for (;;) {
      _r = SDL_WaitEvent(event);
      if (!_r)
      continue;
      if (event->type == SDL_QUIT)
      return 1;
      if (event->type != SDL_ACTIVEEVENT)
      continue;
      if (event->active.state == SDL_APPINPUTFOCUS && event->active.gain) {
      resumeAudio();
      return 1;
      }
      }
      }
      }
      return _r;  
    }

    // if audio use sdl-lib
    void suspendAudio() {
      SDL_CloseAudio();
      _audioSuspended = true;
    }

    int resumeAudio() {
      if (SDL_OpenAudio(&obtained, NULL) < 0){
      return -1;
      }
      SDL_PauseAudio(0);
      _audioSuspended = false;
      return 0;
    }  
       
    // if audio use sdl-mixer-lib
    void suspendAudio()
    {
      Mix_SuspendAudio();
    }

    int resumeAudio() {
      int r = Mix_ResumeAudio();
      if(r == -1){
      closeAudio();
      return -1;
      }
    }

    void closeAudio(void) {
      Mix_CloseAudio();
    }


    4. Мониторинг проблем "Segmentation fault"
    Качаем gdb и распаковываем в телефон /mmc/mmca1/games
    приложения должны быть собраны с префиксом '-g' и не должны быть пострипаные
    Code

    ulimit -c unlimited
    ./<app>
    Segmentation fault (core dumped)
    файл <core> будет создан
    ../bin/gdb ./<app> <core>

    5. утилита strace
    Code

    ../bin/strace ./app

    6. Скачивание исходников и их обновление
    Code

    svn co http://сайт - скачивание
    svn up - обновление


    7. Скрипт запуска утверждённый минздравом:
    Code

    #!/bin/sh

    mypath=${0%/*}
    LIBDIR1=/ezxlocal/download/mystuff/games/lib
    LIBDIR2=/mmc/mmca1/games/lib
    LIBDIR3=$mypath/lib
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3
    export HOME=$mypath
    cd $mypath
    exec $mypath/Ваш екзешник > $mypath/Ваш экзешник.log


    8. Для портирования игр, в которых разрешение экрана 640х480 или 800х600, требуется правка координат в исходниках. Для первого случая нужно делить координаты на 2, для второго на 2.5, графику можно обработать программой VSO Image Resizer
    -----------------------------------------------------------------------------------
    Мануал будет дополняться и разрабатываться, все что вы прочитали в мануале - это попытка систематизировать информацию.
    Источники с которых бралась информация:
    Motofan и Motorola Gaming Site
    Огромное спасибо таким людям как: Lubomyr, Neomoto, Abram, AstaRoth,

    Здесь можно скачать исходники:
    Сайт
    Сайт
    Сайт
    Ну и на многих других

    Полезные ссылки, обязательные к прочтению начинающим разработчикам:
    Porting Guide by Lubomyr
    Пробуем портировать игры и проги сами
    Разработка софта под MOTOMAGX, начну небольшой HOWTO
    Компиляция нативных приложений под E6/A1200, Создание окружения для компиляции
    SDL библиотека

    --------------------------------------------------------------------
    Категория: Cтатьи | Добавил: EXL (12.07.2010)
    Просмотров: 521 | Комментарии: 1 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright EXL © 2017
    Сделать бесплатный сайт с uCoz