motofan logo
       
> 

Компиляция под Android - руководство

XVilka
сообщение 7.2.2010, 23:24 Закрепленное сообщение!


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Наиболее последняя версия - WIKI
Постепенно все изменения будут переноситься оттуда.

----------------------------------------------------------------

Компиляция linux-утилит под Android

Пусть все мы делаем в домашней директории (/home/xvilka), создадим там каталог build
Код
mkdir $HOME/build


Подготовка

Скачиваем ядро, которое установлено в вашем устройстве, распаковываем, собираем заголовки
Код
make headers_install ARCH=arm INSTALL_HDR_PATH=$HOME/build/kern_h/


Узнаем какой у нас процессор в устройстве и используем конфиги в соотвествии с этим. Также определим переменную оптимизации для вашего оборудования (указываем в опциях .configure и make для всех программ кроме crosstool и toolchain)

Изображение

При составлении таблицы использовались данные:
gcc.gnu.org
en.wikipedia.org (ARM)

К примеру у меня выполняется следующая команда:
Код
export _XXFLAGS=" -march=armv7-a -mtune=cortex-a8 -mfpu=neon -Os"


Скачиваем crosstool-ng
распаковываем, собираем (нужны установленные make,install,bash,cut,sed,grep,gcc,awk,bison,flex,automake,libtool,stat, wget,cvs,patch,tar,gzip,bzip2,lzma,readlink,ncurses, mpfr-dev, gmp-dev)
Код
.configure
make
make install


Сборка тулчейна

Скачиваем необходимые нам конфигурационные файлы. Создаем каталог toolchain-android, переходим в него и копируем файл
Код
XVilka-crosstool-<суффикс>.config в .config
XVilka-uClibc-<суффикс>.config в uClibc.config


потом запускаем
Код
ct-ng menuconfig


изменяем, если необходимо - помним что это зависит лишь от того оборудования, под которое собираете! сохраняем в .config запускаем
Код
ct-ng build


Итак все собралось. Теперь имеем каталог в своей директории build/x-tools. В нем появились компиляторы для сборки вида
Код
arm-android-linux-uclibsgnueabi-*


для того чтобы было проще запускать их добавим этот каталог в переменную окружения PATH
Код
export PATH=$HOME/build/x-tools/arm-android-linux-uclibcgnueabi/bin:$PATH


теперь мы имеем возможность запускать компилятор командой
Код
arm-android-linux-uclibcgnueabi-gcc


Корневая директория целевой системы находится по адресу
Код
$HOME/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/sys-root


Туда мы не будем все устанавливать. Скопируем его в папку $HOME/build/cross/sys-root
Код
cp $HOME/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/sys-root $HOME/build/cross
cd $HOME/build/cross
chmod +w sys-root
chmod +w sys-root/usr
chmod +w sys-root/usr/lib
chmod +w sys-root/usr/include


Скопируем файлы для успешной компиляции некоторых программ - libgcc и libstdc++:
Код
cp ~/build/x-tools/arm-android-linux-uclibcgnueabi/lib/gcc/arm-android-linux-gnueabi/4.4.3/{libgcc.a,libgcc_eh.a} \
~/build/cross/sys-root/usr/lib
cp ~/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/lib/libstd++{.a,.la,_pic.a} \
~/build/cross/sys-root/usr/lib
chmod -w ~/build/cross/sys-root/usr/lib


Сборка основного дерева Android

Сначала скачаем все дерево Android. Здесь пример как это сделать для mainstream ветки:
Код
mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync


Все! Теперь у нас в каталоге mydroid лежит все что нужно для сборки Android.

Сборка пакетного менеджера

В качестве пакетного менеджера мы будем использовать opkg:
Код
svn co http://opkg.googlecode.com/svn/trunk/ opkg
cd opkg


Применяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками opkg
Код
patch -p0 < {opkg-cl.c.patch,opkg_conf.c.patch,opkg_conf.h.patch,opkg.c.patch,opkg_static.patch}
./autogen.sh --host=arm-unknown-linux --target=arm-unknown-linux CC="arm-android-linux-uclibcgnueabi-gcc" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" CFLAGS=" -static -fPIC $_XXFLAGS" \
CXXFLAGS=" -static -fPIC $_XXFLAGS" \
LDFLAGS=" -static -fPIC -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc -lgcc" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-g++" RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" STRIP="arm-android-linux-uclibcgnueabi-strip" \
NM="arm-android-linux-uclibcgnueabi-nm" CXX="arm-android-linux-uclibcgnueabi-g++" --disable-dependency-tracking \
--with-pic cross_compiling=yes --disable-curl --disable-gpg --prefix=$HOME/build/cross/sys-root/usr \
--enable-static --disable-shared --with-gnu-ld
make
make install

На устройстве копируем opkg-cl в /system/xbin/opkg Все теперь мы можем пользоваться пакетным менеджером opkg. Подробнее...

Сборка библиотек

Здесь описан метод сборки разделяемых библиотек, при котором не создается зависимости их от других билиотек, например от libc, для упрощения портирования приложений. То есть все что необходимо для работы такой библиотеки вкомпилено в нее статически, хотя она сама является разделяемой. Приведу примеры:

libFLAC

Скачиваем последнюю версию libFLAC с их официального сайта, распаковываем и заходим в каталог
Код
./autogen.sh --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" LD="arm-android-linux-uclibcgnueabi-ld" \
RANLIB="arm-android-linux-uclibcgnueabi-ranlib" OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" \
NM="arm-android-linux-uclibcgnueabi-nm" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \
CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \
LDFLAGS=" -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc" --prefix="$HOME/build/cross/sys-root/usr" \
--disable-ogg --disable-oggtest --disable-rpath --disable-xmms-plugin --disable-cpplibs --disable-altivec \
--disable-3dnow --disable-thorough-tests --disable-doxygen-docs
cd src/libFLAC
make
cd .libs
arm-android-linux-uclibcgnueabi-ld -shared -s -o libFLAC.so -whole-archive libFLAC.a


На выходе получаем динамическую разделяемую библиотеку libFLAC.so, которую можно смело устанавливать в систему, и при этом она не зависит ни от одной (!) другой библиотеки. Каталогом выше - заголовочные файлы для включения в свои программы при использовании libFLAC.so Но больше она рассчитана на dlopen()

libxvidcore

Код
cd src/build/generic
./configure --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-ld" RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" NM="arm-android-linux-uclibcgnueabi-nm" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \
CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \
LDFLAGS=" -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc" --prefix="$HOME/build/cross/sys-root/usr"
cd =build
arm-android-linux-uclibcgnueabi-ld -shared -s -o libxvidcore.so -whole-archive libxvidcore.a


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

libncurses

Скачиваем последнюю версию, распаковываем, заходим в каталог:
Код
./configure --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" LD="arm-android-linux-uclibcgnueabi-ld" \
RANLIB="arm-android-linux-uclibcgnueabi-ranlib" OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" \
NM="arm-android-linux-uclibcgnueabi-nm" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -nodefaultlibs -nostdlib -fPIC -DCBAUD=0010017 $_XXFLAGS" CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC -DCBAUD=0010017 $_XXFLAGS" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty -lgcc_eh -lstdc++" --prefix="$HOME/build/cross/sys-root/usr" \
--disable-big-core --disable-database --enable-termcap --with-fallbacks=linux,vt100 --without-debug --without-ada \
--without-xterm-new --without-terminfo --without-develop --disable-ext-funcs --disable-GPM --disable-shared --enable-static --without-shared --with-static
make
(тут посыпятся ошибки линковки, но нам она не нужна)
cd lib
arm-android-linux-uclibcgnueabi-ld -shared -s -o libncurses.so -whole-archive libncurses.a
arm-android-linux-uclibcgnueabi-sstrip libncurses.so
cp libncurses.so $HOME/build/cross/sys-root/lib
cp libncurses.a $HOME/build/cross/sys-root/usr/lib
cd include
make install


также libcurses.so мы можем смело копировать на устройство в системный каталог для библиотек.

Все! Теперь мы можем компилировать программы на основе ncurses как статически, так и динамически. Зависимости от других библиотек также отстутсвуют.

Сборка различных утилит

busybox

Пока только статика, но вообще именно busybox советую собирать статически всегда, чтобы в независимости от наших манипуляций с библиотеками он всегда мог запуститься и выручить вас Применяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками busybox командой
Код
patch -p0 < {busybox-Makefile.patch,busybox-trylink.patch}


копируем файл XVilka-busybox-<суффикс>.config в .config
Код
make menuconfig (только если хотите что-то поменять в настройках, иначе не надо)
make (если будут какие-то вопросы, соглашаемся)
make install CONFIG_PREFIX=~/build/cross/sys-root
arm-android-linux-uclibcgnueabi-sstrip busybox


Копируем файл ~/build/cross/sys-root/bin/busybox в /system/bin на устройстве
Код
chown root /system/bin/busybox
chmod 755 /system/bin/busybox
ln -s /system/bin/busybox /system/bin/ash


Текстовый редактор jupp

Можно скачать здесь
Код
chmod +x configure
./configure --prefix=/system/local --disable-curses --disable-termcap --disable-termidx --host=arm-android-linux-uclibcgnueabi ARCH=arm \
CC="arm-android-linux-uclibcgnueabi-gcc" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" sysconfdir=/system/usr/local/etc sysconfjoesubdir=/joe \
CFLAGS=" -static $_XXFLAGS"
make
arm-android-linux-uclibcgnueabi-strip joe


Уже на устройстве:
Код
копируем joe в /system/bin
копируем joerc в /system/usr/local/etc/joe
копируем jupprc в /system/usr/local/etc/joe
копируем jmacsrc в /system/usr/local/etc/joe
копируем файлы синтаксиса в /system/usr/local/etc/joe/syntax
chmod 755 /system/bin/joe
ln -s /system/bin/joe /system/bin/jupp
ln -s /system/bin/joe /system/bin/jmacs
chmod 644 /system/usr/local/etc/joe/joerc
chmod 644 /system/usr/local/etc/joe/jupprc
chmod 644 /system/usr/local/etc/joe/jmacsrc


перед запуском joe надо указать переменную TERM
Код
export TERM=ansi


Система компьютерной алгебры yacas

Скачиваем последний релиз yacas, распаковываем и переходим в каталог yacas/src Заменяем Makefile моим XVilka-yacas.Makefile и выполняем:
Код
make CC="arm-android-linux-uclibcgnueabi-gcc" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -static -fPIC $_XXFLAGS" CXXFLAGS=" -static -fPIC $_XXFLAGS" \
LDFLAGS=" -static -fPIC -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc -lgcc -lstdc++" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-g++" RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" STRIP="arm-android-linux-uclibcgnueabi-strip" \
NM="arm-android-linux-uclibcgnueabi-nm" CXX="arm-android-linux-uclibcgnueabi-g++"


Все - в этой папке лежит самодостаточный исполняемый файл yacas. Копируем его на устройство, а также скрипты к нему из папки scripts (например в /system/usr/local/etc/yacas)
Код
cp /sdcard/test-build/yacas /system/usr/bin
chown root /system/bin/yacas
chmod 755 /system/bin/yacas
cp -r /sdcard/test-build/scripts/* /system/usr/local/etc/yacas


и на устройстве можно запускать командой
Код
yacas --rootdir /system/usr/local/etc/yacas


Файловый менеджер vifm

(нужна поддержка wide char в uclibc и ncurses, в текущей конфигурации отключена)
Код
git clone git://vifm.git.sourceforge.net/gitroot/vifm/vifm
cd vifm
./configure --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-g++"  RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump"  NM="arm-android-linux-uclibcgnueabi-nm" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-"  CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  \
CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include -I$HOME/build/cross/sys-root/usr/include/ncurses" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty -lncurses"  \
--prefix="$HOME/build/cross/sys-root/usr" --disable-dependency-tracking


Сетевой сканер nmap

К сожалению пока приведен рецепт сборки nmap без замечательной утилиты ncat. Затем скачиваем и собираем nmap В переменной ac_cv_linux_vers указываем версию ядра для вашего android устройства.
Код
svn co --username guest --password "" svn://svn.insecure.org/nmap/
cd nmap
./configure --host=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
CPP="arm-android-linux-uclibcgnueabi-cpp" LD="arm-android-linux-uclibcgnueabi-ld" \
RANLIB="arm-android-linux-uclibcgnueabi-ranlib" OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" \
NM="arm-android-linux-uclibcgnueabi-nm" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -nodefaultlibs -nostdlib -fPIC -static $_XXFLAGS -DHAVE_GETADDRINFO -DHAVE_USLEEP -DHAVE_GETTIMEOFDAY \
-DHAVE_SNPRINTF -DHAVE_VSNPRINTF -DHAVE_STRERROR -Dsys_nerr=_sys_nerr -Dsys_errlist=_sys_errlist" \
CXXFLAGS=" -c -nodefaultlibs -nostdlib -fPIC -static $_XXFLAGS -DHAVE_GETADDRINFO -DHAVE_USLEEP -DHAVE_GETTIMEOFDAY \
-DHAVE_SNPRINTF -DHAVE_VSNPRINTF -DHAVE_STRERROR -Dsys_nerr=_sys_nerr -Dsys_errlist=_sys_errlist" \
CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -zmuldefs" \
LIBS=" -lm -lc -lgcc -liberty -lgcc_eh -lstdc++" \
--prefix="$HOME/build/cross/sys-root/usr" --with-liblua=included --with-libpcre=included \
--with-libdnet=included --without-ncat --without-ndiff --without-zenmap --disable-nls \
--with-libpcap=included --with-pcap=linux ac_cv_linux_vers=2.6.29
make
make install


SSH сервер dropbear

Код
./configure --host=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc"> \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -static $_XXFLAGS" \
--prefix="$HOME/build/cross/sys-root/system/usr/local" --disable-zlib
make
make install


копируем файлы dbclient, dropbearconvert и dropbearkey в /system/bin файл dropbear в /system/sbin
Код
chown root на все
chmod 755 на все


Компилятор tinycc

Код
git clone git://repo.or.cz/tinycc.git
cd tinycc
./configure --host=arm --target=arm-android-linux-uclibcgnueabi ARCH=arm CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-g++"  RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump"  NM="arm-android-linux-uclibcgnueabi-nm" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-"  CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  \
CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty"  \
--prefix="$HOME/build/cross/sys-root/usr" --disable-dependency-tracking --enable-cross \
--cross-prefix="arm-android-linux-uclibcgnueabi-" --sysroot="$HOME/build/cross/sys-root/usr"
make ARCH=arm CC="arm-android-linux-uclibcgnueabi-gcc" \
CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \
AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \
LD="arm-android-linux-uclibcgnueabi-g++"  RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \
OBJDUMP="arm-android-linux-uclibcgnueabi-objdump"  NM="arm-android-linux-uclibcgnueabi-nm" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-"  CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  \
CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty"


Создание opkg пакетов

Скрипт для создания ipkg-пакета из вашего приложения включен в состав toolchain. Отметим, что его использование не обязательно для тестирования вашго приложения (для этого вы просто можете скопировать необходимые данные и бинарники на Neo при помощи scp), тем не менее, этот скрипт очень удобен, если вы собираетесь поделиться вашим приложением с другими пользователями. om-make-ipkg openmoko-sample2 Теперь у вас есть пакет openmoko-sample2_0.1_armv4t.ipk , можно скопировать его на Neo при помощи `scp', а потом установить: scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202: ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk Обратите внимание, что хотя вы и можете распространять сгенерированный ipkg-пакет, он, в сущности, - всего-лишь голый костяк, не содержащий никакой дополнительной информации, такой как, например, библиотечные зависимости. Ниже описано как это исправить. Информацию о версии приложения, описание, имя автора и контактнуя информацию вы можете добавить в control-файл: om-make-ipkg myapp myapp_control Шаблон для файла myapp_control:
Код
Package: $appname
Version: 0.1
Description: package built by openmoko toolchain
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends:
Source: ${SRC}


-------------------------------------------------------------------------------------
Сборка утилит для разработчика:
1. Поставить git, repo
2. Загрузить дерево исходников Android
3. Необходимо собрать libSDL статически (platform/external/qemu/distrib/sdl-xxx)
Нужна libALSA-dev, libESD-dev, libX11-dev
Код

./android-configure.sh --prefix=$HOME/build/cross
make
make install

4. Собрать Android Emulator (platform/external/qemu)
Код

./android-configure.sh --sdl-config=$HOME/build/cross/bin/sdl-config
make
strip objs/emulator
sudo cp objs/emulator /usr/local/bin

"xbuild.patch"
Spoiler:

diff -cr build2//core/combo/linux-arm.mk build//core/combo/linux-arm.mk
*** build2//core/combo/linux-arm.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/combo/linux-arm.mk 2010-03-20 06:59:20.756173199 +0300
***************
*** 15,21 ****
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv5te
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
--- 15,21 ----
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv7-a
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
***************
*** 37,44 ****

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := \
! prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
--- 37,43 ----

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := arm-android-linux-uclibcgnueabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
***************
*** 94,103 ****
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir)

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags)

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
--- 93,103 ----
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir) \
! -I $HOME/build/cross/sys-root/usr/include

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags) -lgcc -lgcc_eh

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
diff -cr build2//core/envsetup.mk build//core/envsetup.mk
*** build2//core/envsetup.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/envsetup.mk 2010-03-20 06:37:09.744154707 +0300
***************
*** 270,276 ****
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
--- 270,276 ----
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP)
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
diff -cr build2//core/main.mk build//core/main.mk
*** build2//core/main.mk 2010-03-20 07:11:58.436137913 +0300
--- build//core/main.mk 2010-03-20 06:12:07.412137657 +0300
***************
*** 96,131 ****
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(java_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of java.)
! $(info $(space))
! $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

# Check for the correct version of javac
! javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(javac_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of javac.)
! $(info $(space))
! $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

endif # windows

--- 96,131 ----
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! # java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(java_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of java.)
! # $(info $(space))
! # $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

# Check for the correct version of javac
! # javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(javac_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of javac.)
! # $(info $(space))
! # $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

endif # windows

diff -cr build2//envsetup.sh build//envsetup.sh
*** build2//envsetup.sh 2010-03-20 07:11:58.436137913 +0300
--- build//envsetup.sh 2010-03-20 06:33:42.836172547 +0300
***************
*** 102,108 ****
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=$prebuiltdir/toolchain/arm-eabi-4.4.0/bin
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
--- 102,108 ----
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
diff -cr build2//target/product/sdk.mk build//target/product/sdk.mk
*** build2//target/product/sdk.mk 2010-03-20 07:11:58.440136745 +0300
--- build//target/product/sdk.mk 2010-03-20 06:17:06.032139645 +0300
***************
*** 76,84 ****
ko_KR

# include available languages for TTS in the system image
! include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! include external/svox/pico/lang/PicoLangItItInSystem.mk
--- 76,85 ----
ko_KR

# include available languages for TTS in the system image
!
! # include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! # include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! # include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! # include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! # include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! # include external/svox/pico/lang/PicoLangItItInSystem.mk
[close]


5. Собрать adb, bionic

Нижеследующие команды приведены только для использования в случае отдельной сборки bionic и adb
Код

git clone git://android.git.kernel.org/platform/system/core.git system/core
git clone git://android.git.kernel.org/platform/frameworks/base.git frameworks/base
git clone git://android.git.kernel.org/platform/build.git build
git clone git://android.git.kernel.org/platform/external/zlib.git external/zlib
git clone git://android.git.kernel.org/platform/external/elfutils.git external/elfutils
git clone git://android.git.kernel.org/platform/external/elfcopy.git external/elfcopy
git clone git://android.git.kernel.org/platform/bionic.git bionic
echo "include build/core/main.mk" >Makefile

Теперь применяем пачт следующей командой (все необходимые изменения в оптимизациях можно указать в патче)
Код

patch -p0 -i xbuild.patch

Cобираем:
Код

make adb
make libc
make libm


Сообщение отредактировал EXL - 16.9.2010, 16:35
Прикрепленный файл my.tar.gz   ( 2.12 мегабайт ) Кол-во скачиваний: 1
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
JunkiedOK
сообщение 8.2.2010, 12:32


Интересующийся
**

Группа: Пользователи
Сообщений: 69
Регистрация: 15.1.2010
Пользователь №: 212 579
Модель телефона: Motorola Milestone

Рейтинг: 3



Никогда с Linux дела не имел. Поэтому прошу прощения, но задам чайниковский вопрос. Что это даёт? Для этого нужно сносить Android или просто он добавляет в него некоторые дополнительные возможности, какие?

Сообщение отредактировал JunkiedOK - 8.2.2010, 14:50
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 8.2.2010, 18:06


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Цитата(JunkiedOK @ 8.2.2010, 15:32) *

Никогда с Linux дела не имел. Поэтому прошу прощения, но задам чайниковский вопрос. Что это даёт? Для этого нужно сносить Android или просто он добавляет в него некоторые дополнительные возможности, какие?

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

Вот сегодня завершил и оттестировал перенос библиотеки libFLAC - а то гугл все никак не добавит, надоело ждать.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
mr.Ozio
сообщение 9.2.2010, 10:27


Гуру
******

Группа: Пользователи
Сообщений: 1 444
Регистрация: 23.9.2006
Из: Київ
Пользователь №: 100 323
Модель телефона: E2,Atrix
Прошивка: Android 2.3.7

Рейтинг: 652



XVilka, a DIVX кодeки тaким обрaзом можно портировaть?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 9.2.2010, 16:30


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Вообще да, я вот пробую собрать таким образом ffmpeg, но уж больно он кривой и непредсказуемый.
Может, думаю есть полегче декодеры?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
NPman
сообщение 10.2.2010, 6:30


Мастер
****

Группа: Пользователи
Сообщений: 275
Регистрация: 12.7.2007
Из: Oren
Пользователь №: 141 260
Модель телефона: (M)otorola DEFY
Прошивка: 2.1

Рейтинг: 196



а mplayer слабо портировать? laugh.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Abram
сообщение 10.2.2010, 9:15


Прелесть какая гадость
*******

Группа: Разработчики
Сообщений: 1 963
Регистрация: 24.6.2005
Из: .ru - рідна Україна
Пользователь №: 44 825
Модель телефона: Moto G XT1033
Прошивка: CyanogenMod
Победитель конкурса 2008

Рейтинг: 744



Цитата(NPman @ 10.2.2010, 8:30) *

а mplayer слабо портировать? laugh.gif

А зачем?

к тому же , FLAC давно для ведроида есть.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 10.2.2010, 9:23


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



FLAC я видел только в кастомных прошивках. А здесь без изменения системы.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 10.2.2010, 19:42


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Цитата(mr.Ozio @ 9.2.2010, 13:27) *

XVilka, a DIVX кодeки тaким обрaзом можно портировaть?

Xvid - получите, распишитесь

Работаю на улучшением работы busybox и портированием ffmpeg
---------------------------------------------------------------------------------------------------
По поводу FLAC - вот только работающее решение из коробки
http://alldroid.org/viewtopic.php?f=259&am...326&p=29927 но у него есть ограничение на 16-битность,
пропатчены исходники файлов FLAC.
Мое решение скорее дополняет его, поскольку используется оригинальная библиотека без изменений, но в любом случае
все это уже работает. Проверено электроникой (своей). Так что можно вооружаться.
----------------------------------------------------------------------------------------------------
По поводу mplayer вот - http://mplayer4iphone.blogspot.com/2009/01...d-emulator.html
Сейчас думаю стоит ли заморачиваться или нет - тем более помогаю некоторым авторам видеоплееров, в частности mVideoPlayer в использовании внешних кодеков (в частности того же xvid)

Сообщение отредактировал XVilka - 13.2.2010, 2:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 13.2.2010, 19:52


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Если здесь есть заинтересованные разработчики - прошу принять участие в проекте:

http://github.com/freeasabeer/buildroot-android
http://wiki.github.com/freeasabeer/buildroot-android/

Здесь про то что к yacas приделали граф.морду на iPhone и исходники и про проект создания такой же на Android
http://tinyurl.com/yandroid
---------------------------------------------

А вот здесь еще портировали библиотеку Qt на андроид
http://code.google.com/p/android-lighthouse/

Сообщение отредактировал XVilka - 13.2.2010, 23:19
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
mr.Ozio
сообщение 14.2.2010, 10:51


Гуру
******

Группа: Пользователи
Сообщений: 1 444
Регистрация: 23.9.2006
Из: Київ
Пользователь №: 100 323
Модель телефона: E2,Atrix
Прошивка: Android 2.3.7

Рейтинг: 652



Цитата
Цитата
Цитата(mr.Ozio @ 9.2.2010, 13:27)

XVilka, a DIVX кодeки тaким обрaзом можно портировaть?


Xvid - получите, распишитесь

Спасибо. Жаль, что я пока не могу это оценить, в виду отсутствия данного девайса.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 25.2.2010, 0:23


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Почему-то пропала возможность редактировать шапку.


Периодически обновляю, занимаюсь вопросом автоматизации и портирования всего этого дела на bionic, отказываясь от статической компиляции.

Скоро открою репозиторий (пока только для Motorola Milestone/Droid). Базироваться он будет на opkg.

Сообщение отредактировал Osta - 25.2.2010, 12:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
OWNER
сообщение 25.2.2010, 7:12


Мастер
****

Группа: Пользователи
Сообщений: 252
Регистрация: 10.3.2004
Из: Odessa
Пользователь №: 1 969
Модель телефона: DROID RAZR MAXX
Прошивка: stok 4.1.2

Рейтинг: 77



Цитата(XVilka @ 10.2.2010, 19:42) *

Xvid - получите, распишитесь


А можно поподробней расписать как использовать данную библиотеку и как еë установить в Droid чтоб все работало. С линухой раньше дела не имел.
Спасибо.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 25.2.2010, 8:40


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Пока на данный момент ни одна программа не работает с ней. Библиотека может использоваться только в программах с JNI с вызовом System.Load().
На данный момент в текущем фреймворке OpenCORE идет активная разработка поддержки контейнеров,
но поддержка пока еще ОЧЕНЬ сырая. Как показала практика Motorola Milestone может декодировать DivX но не в контейнере AVI.
libxvidcore поддерживает контейнер AVI. Информацию о том как использовать ее я разослал разработчикам видеоплееров, но пока тихо, никто ничего не ответил (разослал неделю назад, все отписали что инфа интересная, будут пробовать, но пока никаких результатов)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
starky
сообщение 25.2.2010, 15:12


Интересующийся
**

Группа: Пользователи
Сообщений: 67
Регистрация: 4.11.2009
Пользователь №: 209 207
Модель телефона: Motorola Milestone
Прошивка: 2.1-update1 DACH

Рейтинг: 10



XVilka,
Один вопрос: root обязательное условие для использования Ваших "портировок"?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 25.2.2010, 17:55


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Не обязателен, но желателен. Особенно для busybox и opkg.
yacas например и без рута отлично работает.

Вот кстати модификация yacas для сборки с родным тулчейном
http://gitorious.org/android/yacas
Собранная версия прилагается.

В дальнейшем планирую все утилиты которые упоминаю здесь полностью портировать на родные библиотеки. Но это дело будет я думаю ближе к концу марта.
Прикрепленный файл yacas.gz   ( 88.56 килобайт ) Кол-во скачиваний: 215
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 20.3.2010, 4:37


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Еще вот такую штуку сделал

1. Поставить git, repo
2. Загрузить дерево исходников Android
3. Необходимые библиотеки:

-----------------------libSDL-------------------------------------

Собрать libSDL статически (platform/external/qemu/distrib/sdl-xxx)
Нужна libALSA-dev, libESD-dev, libX11-dev
./android-configure.sh --prefix=$HOME/build/cross
make
make install

4. Собрать Android Emulator (platform/external/qemu)

./android-configure.sh --sdl-config=$HOME/build/cross/bin/sdl-config
make
strip objs/emulator
sudo cp objs/emulator /usr/local/bin

"xbuild.patch"
Spoiler:

diff -cr build2//core/combo/linux-arm.mk build//core/combo/linux-arm.mk
*** build2//core/combo/linux-arm.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/combo/linux-arm.mk 2010-03-20 06:59:20.756173199 +0300
***************
*** 15,21 ****
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv5te
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
--- 15,21 ----
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv7-a
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
***************
*** 37,44 ****

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := \
! prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
--- 37,43 ----

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := arm-android-linux-uclibcgnueabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
***************
*** 94,103 ****
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir)

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags)

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
--- 93,103 ----
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir) \
! -I $HOME/build/cross/sys-root/usr/include

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags) -lgcc -lgcc_eh

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
diff -cr build2//core/envsetup.mk build//core/envsetup.mk
*** build2//core/envsetup.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/envsetup.mk 2010-03-20 06:37:09.744154707 +0300
***************
*** 270,276 ****
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
--- 270,276 ----
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP)
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
diff -cr build2//core/main.mk build//core/main.mk
*** build2//core/main.mk 2010-03-20 07:11:58.436137913 +0300
--- build//core/main.mk 2010-03-20 06:12:07.412137657 +0300
***************
*** 96,131 ****
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(java_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of java.)
! $(info $(space))
! $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

# Check for the correct version of javac
! javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(javac_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of javac.)
! $(info $(space))
! $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

endif # windows

--- 96,131 ----
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! # java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(java_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of java.)
! # $(info $(space))
! # $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

# Check for the correct version of javac
! # javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(javac_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of javac.)
! # $(info $(space))
! # $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

endif # windows

diff -cr build2//envsetup.sh build//envsetup.sh
*** build2//envsetup.sh 2010-03-20 07:11:58.436137913 +0300
--- build//envsetup.sh 2010-03-20 06:33:42.836172547 +0300
***************
*** 102,108 ****
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=$prebuiltdir/toolchain/arm-eabi-4.4.0/bin
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
--- 102,108 ----
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
diff -cr build2//target/product/sdk.mk build//target/product/sdk.mk
*** build2//target/product/sdk.mk 2010-03-20 07:11:58.440136745 +0300
--- build//target/product/sdk.mk 2010-03-20 06:17:06.032139645 +0300
***************
*** 76,84 ****
ko_KR

# include available languages for TTS in the system image
! include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! include external/svox/pico/lang/PicoLangItItInSystem.mk
--- 76,85 ----
ko_KR

# include available languages for TTS in the system image
!
! # include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! # include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! # include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! # include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! # include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! # include external/svox/pico/lang/PicoLangItItInSystem.mk
[close]


5. Собрать adb, bionic

Нижеследующие команды приведены только для использования в случае отдельной сборки bionic и adb

git clone git://android.git.kernel.org/platform/system/core.git system/core
git clone git://android.git.kernel.org/platform/frameworks/base.git frameworks/base
git clone git://android.git.kernel.org/platform/build.git build
git clone git://android.git.kernel.org/platform/external/zlib.git external/zlib
git clone git://android.git.kernel.org/platform/external/elfutils.git external/elfutils
git clone git://android.git.kernel.org/platform/external/elfcopy.git external/elfcopy
git clone git://android.git.kernel.org/platform/bionic.git bionic
echo "include build/core/main.mk" >Makefile

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

patch -p0 -i xbuild.patch

make adb
make libc
make libm
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 20.3.2010, 20:26


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Под андроид портирована замечательная утилита, позволяющая получить подробную информацию какой процесс или устройство использует больше всего энергии - powertop
Исходники доступны тут - http://gitorious.org/android/powertop/

Скомпилированный файл для Milestone/Droid прилагаю
Прикрепленный файл powertop.gz   ( 129.15 килобайт ) Кол-во скачиваний: 208
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 21.3.2010, 17:38


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Для создания маленьких утилит под андроид нам совсем не нужен полновесный тулчейн
Правда для их сборки нам все равно нужен полновесный тулчейн...
Нам вполне хватит двух вещей - tiny C compiler (tcc) и dietlibc

Условимся что все действия мы ведем в каталоге $HOME/build

tiny C compiler расположен по адресу (http://tinycc.org/)
Скачиваем свежую версию:
Код
git clone git://repo.or.cz/tinycc.git tinycc


dietlibc расположена по адресу (http://www.fefe.de/dietlibc/)
Скачиваем её командой:
Код
cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co dietlibc

Теперь скачав, заходим в каталог tinycc, и собираем:
Код
./configure --enable-cross --prefix=$HOME/build/tiny-toolchain
make
make install

Теперь мы имеем в $HOME/build/tiny-toolchain/bin следующие компиляторы:
Код
arm-eabi-tcc
arm-fpa-ld-tcc
arm-fpa-tcc
arm-vfp-tcc
c67-tcc
i386-win32-tcc
tcc
x86_64-tcc
x86_64-win32-tcc

Добавим их в переменную окружения PATH для легкого запуска:
Код
export PATH=$HOME/build/tiny-toolchain/bin:$PATH

Но одного компилятора мало - нужны еще библиотеки...
Поэтому создадим каталог для размещения всех библиотек:
Код
mkdir $HOME/build/tiny-root

Заходим в каталог скачанной dietlibc, и собираем:
Код
make prefix=$HOME/build/tiny-root
make prefix=$HOME/build/tiny-root ARCH=arm CROSS=arm-android-linux-uclibcgnueabi-
make install-headers prefix=$HOME/build/tiny-root ARCH=arm CROSS=arm-android-linux-uclibcgnueabi-
make install-bin prefix=$HOME/build/tiny-root ARCH=arm CROSS=arm-android-linux-uclibcgnueabi-

Делаем необходимые приготовления:
Код
ln -s $HOME/build/tiny-root/lib-arm $HOME/build/tiny-root/lib
cp $HOME/build/tiny-toolchain/include/* $HOME/build/tiny-root/include/
cp $HOME/build/tiny-toolchain/lib/* $HOME/build/tiny-root/lib/

И напоследок установим туда заголовки ядра целевой системы
Код
make headers_install ARCH=arm INSTALL_HDR_PATH=$HOME/build/tiny-root/include

Теперь мы имеем все необходимые заголовки и библиотеки в $HOME/build/tiny-root

Можно собирать соотвественно командой
Код
arm-eabi-tcc -I$HOME/build/tiny-root/include -L$HOME/build/tiny-root/lib -o example example.c


Прилагаю собранный статически тулчейн с необходимыми заголовочными файлами и библиотеками

Сообщение отредактировал XVilka - 21.3.2010, 17:48
Прикрепленный файл tiny_tool.tar.gz   ( 1.09 мегабайт ) Кол-во скачиваний: 207
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 24.3.2010, 3:39


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Информации накопилось очень много - в ветке форума не описать - предлагаю создать раздел на вики "Android для разработчиков", заливать туда проверенную информацию, а обсуждение и пожелания вести здесь

Поскольку у себя на сайте, и на некоторых других веду аналогичные разделы - мне достаточно удобно будет копировать статьи уже в вики-разметке.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 12.5.2010, 16:37


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Обновил конфигурационные файлы. Теперь компилятор GCC 4.5, uClibc 0.9.32

Также добавил ссылку на наиболее актуальную версию в вики

Чуть позже добавлю описание стандартного процесса компиляции для андроида и компиляцию Qt ( http://code.google.com/p/android-lighthouse/wiki/Compile )

Сообщение отредактировал XVilka - 12.5.2010, 16:43
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vinil_37
сообщение 10.9.2010, 8:27


Интересующийся
**

Группа: Пользователи
Сообщений: 39
Регистрация: 5.3.2005
Пользователь №: 38 166
Модель телефона: ROKR E2
Прошивка: R564_G_12.01.46P

Рейтинг: 4



"Люди добрые, просветите - не дайте помереть дурой!" :)
В программировании не шарю, потому прошу не пинать сильно ;)

Есть ли возможность портировать программу от WinMobile при наличии SDK ?

Конкретно интересует GpsGate - программа перераспределения GPS-данных.
Она может как взяв данные от приёмника, отправить их на COM-порт или сервер, так и приняв данные с сервера или IP(от такой же программы), отправить их на СОМ-порт.

По минимуму, интересует получение данных от GPS-приёмника, отправка их на сервер (gpsgate.com, или другой, или такой же клиент GpsGate по IP) и на навигационную программу в самом телефоне.

Сообщение отредактировал Vinil_37 - 15.9.2010, 13:28
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 14.9.2010, 4:13


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



нужен реверс. Но в принципе не очень сложно.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vinil_37
сообщение 16.9.2010, 16:12


Интересующийся
**

Группа: Пользователи
Сообщений: 39
Регистрация: 5.3.2005
Пользователь №: 38 166
Модель телефона: ROKR E2
Прошивка: R564_G_12.01.46P

Рейтинг: 4



Цитата(XVilka @ 14.9.2010, 7:13) *

нужен реверс. Но в принципе не очень сложно.

SDK GpsGate для этого пригодится?

В принципе да

Сообщение отредактировал XVilka - 19.9.2010, 13:48
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vinil_37
сообщение 1.10.2010, 7:26


Интересующийся
**

Группа: Пользователи
Сообщений: 39
Регистрация: 5.3.2005
Пользователь №: 38 166
Модель телефона: ROKR E2
Прошивка: R564_G_12.01.46P

Рейтинг: 4



SDK GpsGate.
Прикрепленный файл GpsGateTrackingClientSDK.rar   ( 2.04 мегабайт ) Кол-во скачиваний: 90
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 1.10.2010, 23:38


Куратор темы

Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689

Рейтинг: 244



Только сейчас заметил, что не ту кнопку нажал, когда отвечал в прошлый раз grin.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vinil_37
сообщение 2.10.2010, 8:50


Интересующийся
**

Группа: Пользователи
Сообщений: 39
Регистрация: 5.3.2005
Пользователь №: 38 166
Модель телефона: ROKR E2
Прошивка: R564_G_12.01.46P

Рейтинг: 4



На всякий случай, описание протокола сервера GpsGate лежит тут (260 килобайт).
З.Ы. Кому хочется узнать что же такое GpsGate, можно прочитать краткий обзор или просто спросить у меня в асеwink.gif

Сообщение отредактировал Vinil_37 - 4.10.2010, 8:17
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Компиляция под Android - руководство · Motorola на Android OS · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 3:22

Форум живёт: