![]() |
Показать все 74 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- [iOS, Android] Нубские вопросы от XaeroX (https://hlfx.ru/forum/showthread.php?threadid=5064)
[iOS, Android] Нубские вопросы от XaeroX
Постепенно пытаюсь разобраться со сборкой проекта под Android и iOS. Кое-что получается, а кое-что пока вводит в ступор. Я знаю, что на форуме есть люди, которые разрабатывали/портировали что-то под мобилки, и возможно, уже решали проблемы, которые у меня возникают. Поэтому свои нубские (ну хочется надеяться, что не совсем уж прям нубские) вопросы буду писать сюда.
Сразу оговорюсь - работаю через консоль, т.к. у меня в проекте довольно высокая степень автоматизации сборки на мейкфайлах и скриптах. Никаких Android Studio, никакого XCode, только консоль, только хардкор. И т.к. мне не хочется иметь отдельные мейкфайлы для мобильных ОС, пытаюсь написать общий ветвистый мейкфайл, и не рассчитываю на стандартные средства SDK/NDK.
Пока возникает всего два, но очень важных вопроса:
1) Как вы запускаете юнит-тесты на эмуляторе? Возможно ли это сделать без упаковки специального "запускальщика" тестов в apk/bundle? Очень уж не хочется вводить этот этап в пайплайн... Может быть, есть команда типа "запусти эту консольную прогу на эмуляторе и выдай мне лог терминала"? Может быть, есть какие-то готовые решения (в идеале совместимые с Google Test/Google Mock)?
2) Как я понял, iPhone-emulator требует х86-билдов, а iPhoneOS - arm-билдов. А как обстоит дело с endianess? Могу ли я быть уверен, что на реальном устройстве программа будет работать в режиме Little endian? В противном случае я не понимаю, в чём смысл эмулятора, на котором нельзя протестить правильность endianess?
__________________
DEAD MAN
Спасибо. Методы-то есть, вопрос в том, стоит ли вообще заморачиваться? Прошёл слух, что на iOS, как и на андроиде, всё уже давно Little Endian. Хотелось бы знать наверняка, чтобы не делать лишнюю работу.
А по юнит-тестам что скажешь? У вас есть CI? Что вы используете для их запуска?
__________________
Да, так и есть, последние версии иОС - little endian. Заморачиваться или нет, вопрос сложный и спорный, т.к. Аппл очень сильно любит ломать обратную совместимость с каждой новой годовой версии оси. С другой стороны, такие вещи как работа с Блутучем, ГПСом, Секьюрити фичами они могут поломать в любой момент, то низкоуровневые вещи трогают очень редко.
Насчёт юнит тестов ничего подсказать, увы, не могу, т.к. не занимаюсь ими вообще. Да и таких больших заказов для мобильных платформ у нас не было, чтоб ими заморачиваться. Пару лет назад только для Андрода, что-то делали, т.к. ТЗ требовало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Можно, наверное. Но у Apple очень... специфическая документация. Мы же люди, с детства избалованные MSDN.
Добавлено 24-11-2017 в 00:05:
Нашёл вот такой любопытный способ запуска через ADB:
https://android.googlesource.com/pl...test/README.NDK
А что, теперь можно вот так просто закинуть исполняемый файл на телефон/эмулятор и исполнить его?
Вроде бы во времена моей молодости, когда я только начинал под андроид что-то делать, можно было только apk закидывать через adb install.
__________________
XaeroX мне говорят, на винфоне можно прямо с компа любое приложение взять и запустить на телефоне, но я сам не пробовал, зачем мне это.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну так на винфоне обычные ехешники же вроде, там ничего портировать не надо?
__________________
Ну так что, кто-нибудь знает, как наладить инфраструктуру юнит-тестирования под iOS? Желательно через консоль.
С андроидом почти разобрался, эмулятор неплохо управляется через командную строку, команды выполняются через adb shell, так же и юнит-тесты запускаются. Правда, пока не могу понять, как увеличить таймаут выполнения теста - во время выполнения тестов рендерера получаю device offline.
__________________
XaeroX покажи скриншот спонзы на андроиде
Добавлено 14-05-2018 в 17:07:
Попадёшь в книгу рекордов гинесса - первый случай запуска спонзы на мобильном устройстве.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro если уж запускать спонзу, то как минимум на рендере паранойи
XaeroX ARM процессоры так-то и в BE, и в LE могут. Но все используют LE режим, по крайней мере я не встречал иного в мобильных ОС.
a1batross
ДМ даёт сорцы паранойи 2 на порт? Хотя учитывая что на обычном ксаше спонза нехило так проседает, с шейдерами там вообще 1 фпс будет.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так что, про iOS никто ничего не знает?
__________________
Очередные андроедопроблемы.
Решил настроить кросс-компиляцию и запуск под Windows 7.
Компиляция работает, а вот юнит-тесты на эмуляторе не стартуют - ехешник валится с "Illegal instruction".
Под линуксом я с таким не сталкивался.
Что это может быть? Бага эмулятора под виндой, или я что-то не так настраиваю?
__________________
XaeroX А чем компилируешь? CMake или ndk-build?
Illegal instruction это как раз тот случай, когда в либе/бинаре исполнение натыкается на инструкцию, которая не поддерживается процессором, например, компиляция каких-то определённых модулей идёт с mfpu=neon или определённым march/mcpu/mtune.
Какой Android NDK? Новый или старый? Если новый, то там могли уже вообще дропнуть древние устройства без FPU и компилятор навставлял подобных инструкций. Google подобное может выкинуть, учитывая что все 32-битные приложения они официально дропают в августе 2019-го.
В общем, тебе нужно смотреть лог сборки на предмет проскакивания всяких там подозрительных опций компилятора. Заюзай такое, если у тебя Gradle:
И смотри в лог. Я так кстати обнаружил, что мне сборочные системы (ndk-build и CMake) пихают по умолчанию такое:
code:
-mfpu=vfpv3-d16 -fno-addrsig -march=armv7-a -mthumb
code:
-mcpu=cortex-a15 -mfpu=neon-vfpv4
code:
$ /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf -A libSpoutOld.so Attribute Section: aeabi File Attributes Tag_CPU_name: "ARM v7" Tag_CPU_arch: v7 Tag_CPU_arch_profile: Application Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-2 Tag_FP_arch: VFPv3 Tag_ABI_PCS_GOT_use: GOT-indirect Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_enum_size: int Tag_CPU_unaligned_access: v6 Tag_ABI_FP_16bit_format: IEEE 754 $ /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf -A libSpout.so Attribute Section: aeabi File Attributes Tag_CPU_name: "ARM v7" Tag_CPU_arch: v7 Tag_CPU_arch_profile: Application Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-2 Tag_FP_arch: VFPv4 Tag_Advanced_SIMD_arch: NEONv1 with Fused-MAC Tag_ABI_PCS_GOT_use: GOT-indirect Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_enum_size: int Tag_CPU_unaligned_access: v6 Tag_FP_HP_extension: Allowed Tag_ABI_FP_16bit_format: IEEE 754 Tag_MPextension_use: Allowed Tag_DIV_use: Allowed in v7-A with integer division extension Tag_Virtualization_use: TrustZone and Virtualization Extensions
EXL
У нас своя система сборки и самописный мейкфайл, общий под все оси, с кучей ifeq/ifneq, разумеется.
__________________
XaeroX, скорее всего. Значит где-то компилятору проставляется neon.
Точно, это оно. Видимо, по умолчанию в апи левел 16 стал неон. Раньше-то я с 14-м собирал.
Проблема решена добавлением "-mfpu=vfpv3-d16".
EXL большое спасибо!
Добавлено 21-04-2019 в 16:02:
Разгадал загадку одного падающего юнит-теста, и просто оставлю это здесь:
__________________
XaeroX это всё что нужно знать про гугл, их коде-стайл и их юнит-тесты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX аплодисменты стоя. Осталось Гуглу, Циске и Майку объединиться в какой-нибудь консорциум по безопасности и проводить высокоинтеллектуальные семинары!
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Товарищи эндэкашники, а на Андроид какой версии вы обычно таргетируете свой код?
Я ориентировался на 4.0 как на минимальный (апи левел 16), но сейчас подумываю переориентироваться на 5.0 (апи левел 21), т.к. хочу собирать 64-битные бинарники, а это кажется только на 21 апи возможно (в 16-м тулчейне я не вижу кланга для arm64).
Это оправдано сейчас?
У меня самого две андроид-железки, одна 5.1 и другая 8.0.
__________________
XaeroX а што новые андроеды 64-х битные? Ничоси техника зашла.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Да. А с августа 2019 Гугл требует, чтобы все засылаемые в маркет программы и игры были 64-битными. При этом в APK можно класть и 32-битные, и 64-битные бинарники (андроид сам подцепит нужные в зависимости от своей битности). Но теперь 64-битные становятся строго обязательными для гугл-плея.
__________________
XaeroX
А ты уверен, что устройства, на которых Android 4, вообще потянут игру?
Если да, то на осень 2018 года доля устройств на 4.0-4.4 около десяти процентов.
Готов ли ты ими пожертвовать?
Я думаю, что стоит отказаться от их поддержки.
__________________
I tell you to enjoy life
__________________
__________________
I tell you to enjoy life
AntiPlayer
Я не считаю Андроид подходящей платформой для игр, и с уважением отношусь к его черте сжигать ресурс аккумулятора за считаные часы.
Но андроид версия движка - это хорошая разминка для мозгов (т.к. это очень капризная платформа), плюс я полагаю, что мультиплеер может кому-то пригодиться. Даже выделенный сервер - зачем нагружать РС расчётами, если можно запустить его на телефоне, а с РС спокойно приконнектиться в режиме клиента и играть, тратя ресурсы исключительно на клиентские расчёты?
Кстати, в мульте графон вообще никому не интересен: все атцы сразу же отключают все эти красивые эффекты и хд-текстуры.
Добавлено 25-04-2019 в 16:24:
Но опять же - когда портируем на GLES2+, тогда и графон с шейдерами появится. Это задача с очень низким приоритетом, но она в принципе есть, да.
__________________
Телефон вообще не для игр. Просто у многих была в детстве мечта погамать в дуум на калькуляторе и впоследствии она приняла такие извращённые формы.
Добавлено 25-04-2019 в 13:15:
У меня был первый телефон с потдержкой явы, это Siemens A65. В ём было целых 1.7 мегабайта памяти и я туда закачал каких-то игр, типо марио и принца персии и рубился целую неделю. А потом мне это надоело.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так рынок же порешал что для игорей.
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Если это можно назвать играми, в целом да, мобильный рынок выжил, но во что он мутировал лично мне смотреть до слёз больно. Делать какой то серьёзный проект на мобилы резона нет никакого вообще, а вот генерить по 5 штук в месяц всяких донатных кликеров с рекламой, если не прибыльно, то хотя бы в минус не уйдёшь.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
XaeroX
С одной стороны да, телефон не для игр. Даже скорее не для шутеров.
А с другой, пару месяцев назад я с удовольствием прошел на телефоне GTA: Vice City. Спасибо адаптированным управлению и сложности.
__________________
I tell you to enjoy life
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
> (т.к. это очень капризная платформа)
Смотря как ты к этому относишься. Если уровня позапускать в эмуляторе и на личном/жены/мамы/и т.д. устройстве, то скорее всего тебе оно не покажется капризной. А когда твой движок будет запущен на нескольких тысяч устройств, а то и больше миллиона -- писать под андроид разхочется.
Опыт собственный, да.
> P.S. сейчас проверил, Android NDK (ndk-build и CMake) при platform-9 автоматом линкует 64-битные библиотеки из platform-21.
Так официальный порт на 64 бита примерно тогда и появился. Где-то с Android 5.0.
__________________
XaeroX
__________________
XaeroX
__________________
XaeroX для AArch64 я думаю необязательно передавать -march или -mfloat-abi. Все AArch64 устройства умеют hardfp. Ну и arch пока не несёт значения, arm64 всё же молод.
1) Для Ксаша было быстрее. Но hardfp deprecated в новых NDK(неосилили, лол), так что на свой страх и риск. Разница в том, что придётся некоторые вызовы оборачивать aapcs атрибутом(при обращении к softfp библиотеке) и вместо libm, линковаться к libm_hard.
2) От неё ни холодно, ни жарко. Cortex-A8 вероятность встретить сильно меньше, чем A9 или A7. Но можно оставить, так как для других никакого эффекта нет.
Добавлено 26-04-2019 в 14:45:
__________________
в андроеде еще и сегфолты есть? очуметь можно. Я и думаю, ну откуда на джаве сегфолты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX давно замеры были. Я даже не помню.
Но автовекторизацией пользуемся: https://github.com/FWGS/xash3d-andr...lication.mk#L19
Ни ошибки в рантайме, ни сегфолта не будет. Это call convention. Просто в таком случае регистры где хранятся флоаты будут другие.
Добавлено 26-04-2019 в 21:55:
Softfp/hardfp это просто ABI и на использование неона оно не влияет. Оно влияет на запись/чтение из neon регистров флоатов. В softfp для neon кода соответствующие load/store будет генерироваться, а в hardfp это не нужно -- всё изначально там где надо.
Поэтому и польза hardfp сомнительна в общем случае. Но движки где float на float-е это важно.
__________________
XaeroX таки я ошибся, прости. Это минимальный.
Но NDK сильно не меняется. В целом, android-9 достаточно для всего, именно в этой версии добавили OpenSL ES, чтобы выводить звук не через JNI.
GLES 3 хоть и с позже API "доступен", с android-9 можно использовать с eglGetProcAddress или dlsym-ать по libGLESv2.
Кстати, как у тебя движок как GL вызовы инициализирует? Напрямую линкуется к библиотеке или все вызовы получает через *GetProcAddress? И почему именно такой вариант? Просто собираю мнения.
__________________
XaeroX ставь сразу левел 1488, чёб наподольше хватило, ну или хотя бы 666.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX не вгляделся.
А ты пробовал убрать uselocale? У Android нестандартная библиотека и локалей например там нет.
a1batross
В том-то и дело, что я не использую никаких uselocale. Может, оно как-то неявно появляется из-за GTest/GMock. Но на 16-м тулчейне как-то работает же?
__________________
EXL
Спасибо, помогло.
Ещё один вопрос: можно ли создать эмулятор, который может выполнять одновременно и armv8, и armv7a код?
__________________
XaeroX можно. Нужен эмулятор, который будет исполнять armv8 код.
И чтобы он исполнял armv7a код, нужен такой APK в котором 64-битного кода нет.
a1batross
Ок, спрошу иначе.
Эмулятор создаётся такой командой:
__________________
ДА НЕ КАК!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX Дядя Миша прав.
Если ты её изначально не создал под aarch64, то и не поменяешь ничего. В эмуляторе пускается полноценная ОС в виртуальной машине.
Пересоздай под aarch64, это дело нескольких минут.
a1batross
Ничего не понял. Что именно пересоздать?
Я и спрашиваю, какую надо написать команду - ну вероятно, тут речь об аргументе "-k", чтобы эмулятор умел в 64 бита? И вероятно, надо скачать через sdkmanager платформу? Как она будет называться?
__________________
XaeroX а, я тебя не понял. Мне показалось, ты хочешь модифицировать образ эмулятора.
А в команде достаточно написать arm64-v8a вроде. По крайней мере именно так значится имя архитектуры "по андродному". Ну и учти, что соответствующий образ с SDK нужно скачать.
__________________
Xash3D FWGS форк
code:
avdmanager create avd -n "ARM64_Emulator" -k "system-images;android-24;default;arm64-v8a" -c 100M -f
__________________
XaeroX запускать на андроиде новее, чем под то что собирал уж точно можно безболезненно. Собирай под 21, запускай хоть на 28.
Хотел бы я сказать, да вот одна корпорация "добра" наверняка вставит какие-нибудь палки в колёса рано или поздно.
__________________
Xash3D FWGS форк
А что такое вот это?
__________________
XaeroX
Похоже, что часть резолвинга путей от линкера.
https://android.googlesource.com/pl...r_utils.cpp#224
Я думаю, если ты пускаешь тест бинарём, то всё нормально. Если внутри приложения... да тоже можно забить. Ну не отрезолвило путь из \0, и ладно.
Мне регулярно про какие-то неиспользованные секции в ELF пишет, но никто от этого ещё не пострадал.
__________________
Xash3D FWGS форк
a1batross
Этот варнинг портит мне красивый выхлоп тестов. Мой внутренний перфекционист негодует.
__________________
__________________
XaeroX не беспокойся, по ссылке на сорцы линкера, этот недостаток поправили почти 3 три года назад.
__________________
Xash3D FWGS форк
Временная зона GMT. Текущее время 16:07. | Показать все 74 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024