Интеграция пользовательских сборок ядра Android с помощью SDK

Я расширяю собственный форк ядра Android, который возник как ядро ​​2.2 Froyo. Сам процесс сборки не представляет проблемы; просто введите "сделать" и готово. Но я не уверен, что мне нужно сделать, чтобы новое ядро ​​стало известно другим инструментам в Android SDK; особенно эмулятор, adb и отладчик Eclipse.

Я пробовал различные вещи, такие как запуск эмулятора с аргументами -system и -userdata в командной строке, и они, кажется, работают, хотя я сталкивался со спорадическими проблемами, которые оставляли меня неуверенным. Распространенная проблема, которую я видел, заключается в том, что иногда приложения «зависают», отображая свой пользовательский интерфейс, но отказываясь уходить, даже когда нажимаются кнопки «Домой» или «Меню». Я пробовал отключать кеширование. Но настоящая проблема здесь в том, что у меня нет хорошей мысленной модели того, как сборки ядра должны передаваться в SDK.

Должен ли я копировать результаты сборки (файлы .img) в ~/.android/, возможно? Или куда-нибудь в папку SDK?

Работающий рецепт был бы хорош, но еще лучше было бы понимание того, как инструменты сборки ядра и SDK работают вместе. Например, http://source.android.com/source/using-eclipse.html отлично подходит для рецептов, но я до сих пор не понимаю, как adb и эмулятор узнают, откуда загружать файлы .img.


person Bradjcox    schedule 18.02.2012    source источник


Ответы (2)


Когда вы создали образ Android, веб-страница Android рекомендует запустить его с помощью команды emulator. Но вы можете запустить построенный образ таким образом, потому что команда android envsetup ранее указала некоторые пути. Например, чтобы протестировать созданный образ, я запускаю команду:

out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu -sdcard sdcard.img -skindir sdk/emulator/skins -skin WVGA800 -scale 0.7 -memory 512 -partition-size 1024

Итак, как видите, я явно указываю все изображения и все пути. Это команда для запуска образа в эмуляторе. Папка Out создается во время сборки в исходной корневой папке Android.

P.S. Ядро обычно относится к ядру Linux Android. В вашем случае, я думаю, вы изменили структуру Android.

person Yury    schedule 18.02.2012
comment
Да, вилка, которую я использую, включает в себя ядро ​​​​Linux и биты Java, которые они называют промежуточным программным обеспечением. Под ядром я имел в виду комбинацию. - person Bradjcox; 19.02.2012
comment
Но я до сих пор не понимаю, как новый эмулятор (из вашей строки cmd) подхватывается и используется eclipse и такими инструментами, как AVD Builder. Нужно ли мне что-то там настраивать, или eclipse обращает внимание на окружение. Кажется, я припоминаю, что запуск eclipse с терминала подхватывает это, а запуск Eclipse.app - нет. Кстати, это все на Mac OSX. - person Bradjcox; 19.02.2012
comment
Чтобы собрать инструменты, вам нужно запустить команду make sdk. Но как связать их с eclipse не знаю. Вы можете запускать их отдельно от eclipse. - person Yury; 19.02.2012

Я составил полный ответ на основе бесценных подсказок, которые предоставил Юрий. Решение состояло в том, чтобы добавить эти настройки в мой .bashrc. Инструменты (эмулятор, adb, ddms) в eclipse используют эти настройки для получения данных из ANDROID_TARGET_OUT вместо того, чтобы получать их из готовых копий внутри SDK. CACHE — стандартная рекомендация.

# Android SDK Build settings
export ANDROID_HOME="/Volumes/DroidImg/android-sdk-macosx"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_SDK_BASE="$ANDROID_HOME"
export ANDROID_SDK_HOME="$ANDROID_HOME"
export ANDROID_TARGET_OUT="/Volumes/DroidImg/Droid-Kernel/out/target/product/generic"
export USE_CCACHE=1
export CCACHE_DIR="/Volumes/DroidImg/CCACHE_DIR"
ulimit -S -n 1024

Наконец, скопируйте .classpath, поставляемый с SDK, как описано в вики, в корень дистрибутива ядра и «импортируйте существующие файлы» в Eclipse. Все компоненты Java теперь должны правильно открываться и собираться в проводнике пакетов. Очень удобно для исследования, но не забывайте, что вам нужно использовать обычную сборку, чтобы построить этот материал по-настоящему.

/Volumes/DroidImg — образ диска с сохранением регистра, который я сделал для работы с MAC-OS; измените эту часть пути в соответствии с вашими потребностями.

person Bradjcox    schedule 28.02.2012