HLFX.Ru Forum
Показать все 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)


Отправлено XaeroX 22-11-2017 в 17:14:

[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?

__________________

xaerox on Vivino


Отправлено DEAD MAN 23-11-2017 в 10:01:

Цитата:
XaeroX писал:
А как обстоит дело с endianess?

Не знаю как сейчас обстоят дела, но до выхода Swift если ты пользовался стандартными обёрточными классами структурами в Obj-C (все, что NS*), то компилятор/макросы за тебя всё делали. Если лез в низкоуровневым типам из C, то весь парсинг ложился на твои плечи. Ну и есть вот эти методы: https://developer.apple.com/documen...s?language=objc


Отправлено XaeroX 23-11-2017 в 10:22:

DEAD MAN
Спасибо. Методы-то есть, вопрос в том, стоит ли вообще заморачиваться? Прошёл слух, что на iOS, как и на андроиде, всё уже давно Little Endian. Хотелось бы знать наверняка, чтобы не делать лишнюю работу.

А по юнит-тестам что скажешь? У вас есть CI? Что вы используете для их запуска?

__________________

xaerox on Vivino


Отправлено DEAD MAN 23-11-2017 в 11:52:

Да, так и есть, последние версии иОС - little endian. Заморачиваться или нет, вопрос сложный и спорный, т.к. Аппл очень сильно любит ломать обратную совместимость с каждой новой годовой версии оси. С другой стороны, такие вещи как работа с Блутучем, ГПСом, Секьюрити фичами они могут поломать в любой момент, то низкоуровневые вещи трогают очень редко.

Насчёт юнит тестов ничего подсказать, увы, не могу, т.к. не занимаюсь ими вообще. Да и таких больших заказов для мобильных платформ у нас не было, чтоб ими заморачиваться. Пару лет назад только для Андрода, что-то делали, т.к. ТЗ требовало.


Отправлено Дядя Миша 23-11-2017 в 13:29:

Цитата:
XaeroX писал:
Прошёл слух, что на iOS, как и на андроиде, всё уже давно 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'


Отправлено XaeroX 23-11-2017 в 17:08:

Дядя Миша
Можно, наверное. Но у Apple очень... специфическая документация. Мы же люди, с детства избалованные MSDN.

Добавлено 24-11-2017 в 00:05:

Нашёл вот такой любопытный способ запуска через ADB:
https://android.googlesource.com/pl...test/README.NDK

А что, теперь можно вот так просто закинуть исполняемый файл на телефон/эмулятор и исполнить его?
Вроде бы во времена моей молодости, когда я только начинал под андроид что-то делать, можно было только apk закидывать через adb install.

__________________

xaerox on Vivino


Отправлено Дядя Миша 23-11-2017 в 18:27:

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 24-11-2017 в 01:56:

Дядя Миша
Ну так на винфоне обычные ехешники же вроде, там ничего портировать не надо?

__________________

xaerox on Vivino


Отправлено XaeroX 14-05-2018 в 13:58:

Ну так что, кто-нибудь знает, как наладить инфраструктуру юнит-тестирования под iOS? Желательно через консоль.

С андроидом почти разобрался, эмулятор неплохо управляется через командную строку, команды выполняются через adb shell, так же и юнит-тесты запускаются. Правда, пока не могу понять, как увеличить таймаут выполнения теста - во время выполнения тестов рендерера получаю device offline.

__________________

xaerox on Vivino


Отправлено Дядя Миша 14-05-2018 в 14:07:

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 14-05-2018 в 15:12:

Цитата:
XaeroX писал:
Дядя Миша
Ну так на винфоне обычные ехешники же вроде, там ничего портировать не надо?


Нет, там архитектура другая же. Дядя Миша распространяет ложные слухи.
Майкрософт только обещал это сделать, но потом что то на обещаниях всё и закончилось.
http://www.cnews.ru/news/top/v_wind...dprilozheniya_1

Цитата:
Дядя Миша писал:
XaeroX покажи скриншот спонзы на андроиде

Попадёшь в книгу рекордов гинесса - первый случай запуска спонзы на мобильном устройстве.


И вот опять Дядя Миша распространяет ложные слухи, я спонзу на андроиде уже давным давно запускал.
https://cs-mapping.com.ua/forum/sho...1&postcount=595

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 14-05-2018 в 15:25:

Цитата:
FiEctro писал:
я спонзу на андроиде уже давным давно запускал

7 fps?

Добавлено 14-05-2018 в 22:25:

Цитата:
FiEctro писал:
И вот опять Дядя Миша распространяет ложные слухи

Да я же говорю - банить надо, банить.

__________________

xaerox on Vivino


Отправлено FiEctro 14-05-2018 в 15:28:

Цитата:
XaeroX писал:
7 fps?


В среднем 20-25, но если встать в угол и смотреть через всю карту как на скриншоте, то да, падает до 5-7фпс.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено a1batross 15-05-2018 в 01:08:

FiEctro если уж запускать спонзу, то как минимум на рендере паранойи

XaeroX ARM процессоры так-то и в BE, и в LE могут. Но все используют LE режим, по крайней мере я не встречал иного в мобильных ОС.


Отправлено FiEctro 15-05-2018 в 10:49:

a1batross
ДМ даёт сорцы паранойи 2 на порт? Хотя учитывая что на обычном ксаше спонза нехило так проседает, с шейдерами там вообще 1 фпс будет.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено nemyax 15-05-2018 в 15:15:

Цитата:
FiEctro писал:
учитывая что на обычном ксаше спонза нехило так проседает, с шейдерами там вообще 1 фпс будет

Неожиданный вывод.


Отправлено XaeroX 15-05-2018 в 16:27:

Так что, про iOS никто ничего не знает?

__________________

xaerox on Vivino


Отправлено XaeroX 20-04-2019 в 20:10:

Очередные андроедопроблемы.
Решил настроить кросс-компиляцию и запуск под Windows 7.
Компиляция работает, а вот юнит-тесты на эмуляторе не стартуют - ехешник валится с "Illegal instruction".
Под линуксом я с таким не сталкивался.
Что это может быть? Бага эмулятора под виндой, или я что-то не так настраиваю?

Цитата:
INFO: Running unit test bundles in "android\jni"...
INFO: Pushing content to device...
libdedicated.so: 1 file pushed. 5.4 MB/s (1591228 bytes in 0.282s)
libfilesystem.so: 1 file pushed. 6.8 MB/s (87908 bytes in 0.012s)
libgame.so: 1 file pushed. 6.0 MB/s (1982808 bytes in 0.317s)
libogg.so: 1 file pushed. 1.8 MB/s (20804 bytes in 0.011s)
libphysics.so: 1 file pushed. 7.6 MB/s (770412 bytes in 0.096s)
libplatform.so: 1 file pushed. 4.1 MB/s (48548 bytes in 0.011s)
libref_gles1.so: 1 file pushed. 5.5 MB/s (655044 bytes in 0.114s)
libref_null.so: 1 file pushed. 5.8 MB/s (626236 bytes in 0.103s)
libvgui.so: 1 file pushed. 5.7 MB/s (418140 bytes in 0.069s)
libvmdlib.so: 1 file pushed. 1.1 MB/s (6540 bytes in 0.006s)
libvorbis.so: 1 file pushed. 5.5 MB/s (175448 bytes in 0.030s)
libvorbisenc.so: 1 file pushed. 7.8 MB/s (989212 bytes in 0.122s)
libvorbisfile.so: 1 file pushed. 3.1 MB/s (35052 bytes in 0.011s)
libvsound.so: 1 file pushed. 5.2 MB/s (169588 bytes in 0.031s)
libvstdlib.so: 1 file pushed. 3.1 MB/s (79664 bytes in 0.024s)
libvtxlib.so: 1 file pushed. 2.5 MB/s (25272 bytes in 0.010s)
INFO: Running: "base_unittest"...
base_unittest: 1 file pushed. 7.8 MB/s (964288 bytes in 0.118s)
Illegal instruction
ERROR: Unit tests in bundle "base_unittest" failed!
INFO: Running: "platform_unittest"...
platform_unittest: 1 file pushed. 5.2 MB/s (850872 bytes in 0.155s)
Illegal instruction
ERROR: Unit tests in bundle "platform_unittest" failed!
INFO: Running: "vstdlib_unittest"...
vstdlib_unittest: 1 file pushed. 7.2 MB/s (1163836 bytes in 0.154s)
Illegal instruction
ERROR: Unit tests in bundle "vstdlib_unittest" failed!
INFO: Running: "filesystem_unittest"...
filesystem_unittest: 1 file pushed. 8.6 MB/s (1054080 bytes in 0.117s)
Illegal instruction
ERROR: Unit tests in bundle "filesystem_unittest" failed!
INFO: Running: "vtxlib_unittest"...
vtxlib_unittest: 1 file pushed. 7.4 MB/s (808280 bytes in 0.105s)
Illegal instruction
ERROR: Unit tests in bundle "vtxlib_unittest" failed!
INFO: Running: "vmdlib_unittest"...
vmdlib_unittest: 1 file pushed. 7.9 MB/s (788292 bytes in 0.096s)
Illegal instruction
ERROR: Unit tests in bundle "vmdlib_unittest" failed!
INFO: Running: "scriptsys_unittest"...
scriptsys_unittest: 1 file pushed. 8.7 MB/s (2689528 bytes in 0.294s)
Illegal instruction
ERROR: Unit tests in bundle "scriptsys_unittest" failed!
INFO: Running: "physics_unittest"...
physics_unittest: 1 file pushed. 8.4 MB/s (1822788 bytes in 0.206s)
Illegal instruction
ERROR: Unit tests in bundle "physics_unittest" failed!
INFO: Running: "renderer_unittest"...
renderer_unittest: 1 file pushed. 7.9 MB/s (1175064 bytes in 0.142s)
Illegal instruction
ERROR: Unit tests in bundle "renderer_unittest" failed!
All done - 9 test bundle(s) executed.
ERROR: 9 TEST BUNDLE(S) FAILED:
[android\jni] base_unittest
[android\jni] platform_unittest
[android\jni] vstdlib_unittest
[android\jni] filesystem_unittest
[android\jni] vtxlib_unittest
[android\jni] vmdlib_unittest
[android\jni] scriptsys_unittest
[android\jni] physics_unittest
[android\jni] renderer_unittest


Компилирую в 32-bit, armv7-a, softfp, api level 16, clang.
Эмулятор создавался так:
Цитата:
avdmanager create avd -n EmulatorDevice -k "system-images;android-16;default;armeabi-v7a" -c 50M -f


Что любопытно - некоторые программы (не юнит-тесты) на эмуляторе стартуют, например, компилятор текстур makevtx и компилятор моделей makevmd. Но в 90% случаев они тоже выдают эту ошибку "Illegal instruction". А в 10% случаев - запускаются.

__________________

xaerox on Vivino


Отправлено EXL 21-04-2019 в 04:06:

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


Но у меня была обратная ситуация -- мне нужно было нативный код собрать конкретно под мой девайс, а не под Generic ARM, то есть с моими:

code:
-mcpu=cortex-a15 -mfpu=neon-vfpv4


И вот в добавление к захардкоженным Generic vfpv3-d16 добавлялась ещё и специфичная neon-vfpv4, но компилятор брал именно её, поскольку флаги "новых" CPU/FPU, заглушают уже заданные старые. Посмотреть информацию что там за CPU и FPU инструкции оно тебе вкомпилило можно через readelf:

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


Я склоняюсь ко мнению, что у тебя ситуация, когда эмулируемый процессор твоём Android Emulator не знает что такое vfpv3-d16, а компилятор навставлял этих инструкций потому что они теперь идут по умолчанию.


Отправлено XaeroX 21-04-2019 в 05:57:

EXL
У нас своя система сборки и самописный мейкфайл, общий под все оси, с кучей ifeq/ifneq, разумеется.

Цитата:
$ /l/Android/ndk/bin/arm-linux-androideabi-readelf.exe -A base_unittest
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_Advanced_SIMD_arch: NEONv1
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


Не в этом ли проблема? (выделил жирным)

__________________

xaerox on Vivino


Отправлено EXL 21-04-2019 в 06:16:

XaeroX, скорее всего. Значит где-то компилятору проставляется neon.


Отправлено XaeroX 21-04-2019 в 09:02:

Точно, это оно. Видимо, по умолчанию в апи левел 16 стал неон. Раньше-то я с 14-м собирал.
Проблема решена добавлением "-mfpu=vfpv3-d16".
EXL большое спасибо!

Добавлено 21-04-2019 в 16:02:

Разгадал загадку одного падающего юнит-теста, и просто оставлю это здесь:

Цитата:
Correct soname/path handling (Available in API level >= 23)

The dynamic linker now understands the difference between a library’s soname and its path (public bug https://code.google.com/p/android/issues/detail?id=6670). API level 23 is the first release where search by soname is implemented. Earlier releases would assume that the basename of the library was the soname, and used that to search for already-loaded libraries. For example, dlopen("/this/directory/does/not/exist/libc.so", RTLD_NOW) would find /system/lib/libc.so because it’s already loaded. This also meant that it was impossible to have two libraries "dir1/libx.so" and "dir2/libx.so" --- the dynamic linker couldn’t tell the difference and would always use whichever was loaded first, even if you explicitly tried to load both. This also applied to DT_NEEDED entries.


Т.е. до апи левела 23, если сошка была загружена, то попытка загрузить сошку с тем же именем, но по другому пути, всегда удавалась (и давала хэндл первой библиотеки), даже если этот путь не существовал. Потрясающая дыра в безопасности, надо сказать...

__________________

xaerox on Vivino


Отправлено Дядя Миша 21-04-2019 в 14:10:

XaeroX это всё что нужно знать про гугл, их коде-стайл и их юнит-тесты.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 21-04-2019 в 14:53:

XaeroX аплодисменты стоя. Осталось Гуглу, Циске и Майку объединиться в какой-нибудь консорциум по безопасности и проводить высокоинтеллектуальные семинары!

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 25-04-2019 в 06:23:

Товарищи эндэкашники, а на Андроид какой версии вы обычно таргетируете свой код?
Я ориентировался на 4.0 как на минимальный (апи левел 16), но сейчас подумываю переориентироваться на 5.0 (апи левел 21), т.к. хочу собирать 64-битные бинарники, а это кажется только на 21 апи возможно (в 16-м тулчейне я не вижу кланга для arm64).
Это оправдано сейчас?
У меня самого две андроид-железки, одна 5.1 и другая 8.0.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2019 в 07:02:

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'


Отправлено XaeroX 25-04-2019 в 07:13:

Дядя Миша
Да. А с августа 2019 Гугл требует, чтобы все засылаемые в маркет программы и игры были 64-битными. При этом в APK можно класть и 32-битные, и 64-битные бинарники (андроид сам подцепит нужные в зависимости от своей битности). Но теперь 64-битные становятся строго обязательными для гугл-плея.

__________________

xaerox on Vivino


Отправлено AntiPlayer 25-04-2019 в 08:41:

XaeroX
А ты уверен, что устройства, на которых Android 4, вообще потянут игру?
Если да, то на осень 2018 года доля устройств на 4.0-4.4 около десяти процентов.
Готов ли ты ими пожертвовать?
Я думаю, что стоит отказаться от их поддержки.

__________________
I tell you to enjoy life


Отправлено XaeroX 25-04-2019 в 09:05:

Цитата:
AntiPlayer писал:
А ты уверен, что устройства, на которых Android 4, вообще потянут игру?

Ну мне кажется, что должны, хотя портирование ещё не закончено.
У нас же там на андроиде очень примитивная графика и вообще GLES1.

__________________

xaerox on Vivino


Отправлено AntiPlayer 25-04-2019 в 09:13:

Цитата:
XaeroX писал:
У нас же там на андроиде очень примитивная графика

Я думал графон будет, как в ПК версии и опциональный

__________________
I tell you to enjoy life


Отправлено XaeroX 25-04-2019 в 09:24:

AntiPlayer
Я не считаю Андроид подходящей платформой для игр, и с уважением отношусь к его черте сжигать ресурс аккумулятора за считаные часы.
Но андроид версия движка - это хорошая разминка для мозгов (т.к. это очень капризная платформа), плюс я полагаю, что мультиплеер может кому-то пригодиться. Даже выделенный сервер - зачем нагружать РС расчётами, если можно запустить его на телефоне, а с РС спокойно приконнектиться в режиме клиента и играть, тратя ресурсы исключительно на клиентские расчёты?
Кстати, в мульте графон вообще никому не интересен: все атцы сразу же отключают все эти красивые эффекты и хд-текстуры.

Добавлено 25-04-2019 в 16:24:

Но опять же - когда портируем на GLES2+, тогда и графон с шейдерами появится. Это задача с очень низким приоритетом, но она в принципе есть, да.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2019 в 10:15:

Телефон вообще не для игр. Просто у многих была в детстве мечта погамать в дуум на калькуляторе и впоследствии она приняла такие извращённые формы.

Добавлено 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'


Отправлено thambs 25-04-2019 в 12:14:

Дядя Миша
Так рынок же порешал что для игорей.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено FiEctro 25-04-2019 в 13:22:

thambs
Если это можно назвать играми, в целом да, мобильный рынок выжил, но во что он мутировал лично мне смотреть до слёз больно. Делать какой то серьёзный проект на мобилы резона нет никакого вообще, а вот генерить по 5 штук в месяц всяких донатных кликеров с рекламой, если не прибыльно, то хотя бы в минус не уйдёшь.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено AntiPlayer 25-04-2019 в 14:32:

XaeroX
С одной стороны да, телефон не для игр. Даже скорее не для шутеров.
А с другой, пару месяцев назад я с удовольствием прошел на телефоне GTA: Vice City. Спасибо адаптированным управлению и сложности.

Цитата:
FiEctro писал:
но во что он мутировал лично мне смотреть до слёз больно

Есть очень классные проекты порты с ПК, крутые квесты, вроде Valiant Hearts или Monument Valley.

Цитата:
XaeroX писал:
все атцы сразу же отключают все эти красивые эффекты и хд-текстуры.

слежу за киберспортом и основными дисциплинами в нем. Типа вместо первого канала в фоне частенько играет. Никто давно ничего не отключает. Играют на максималках со 120fps.

__________________
I tell you to enjoy life


Отправлено XaeroX 25-04-2019 в 16:16:

Цитата:
AntiPlayer писал:
Никто давно ничего не отключает. Играют на максималках со 120fps.

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

Добавлено 25-04-2019 в 23:16:

Цитата:
AntiPlayer писал:
А с другой, пару месяцев назад я с удовольствием прошел на телефоне GTA: Vice City. Спасибо адаптированным управлению и сложности.

Но зачем, если можно это сделать на РС с огромным дисплеем, удобной клавиатурой, и уж если что-то адаптировать там - так это управление РУ-вертолётом к джойстику.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2019 в 16:31:

Цитата:
thambs писал:
Так рынок же порешал что для игорей.

авечки там всякие? Ну это и раньше было. Это не игры, это таймшутеры или как правильно.

Цитата:
XaeroX писал:
Вероятно, сейчас это тупо

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено EXL 25-04-2019 в 20:02:

Цитата:
XaeroX писал:
Товарищи эндэкашники, а на Андроид какой версии вы обычно таргетируете свой код?


14 или 16-ой.

Цитата:
XaeroX писал:
т.к. хочу собирать 64-битные бинарники, а это кажется только на 21 апи возможно (в 16-м тулчейне я не вижу кланга для arm64).


Такого быть не должно, я собирал 64-битные библиотеки ещё на Android-9, лет пять назад. Кросс-компиляторы там должны быть общие, а сам Target Platform для NDK влияет лишь на доступность определённых API в поставке:

https://developer.android.com/ndk/guides/stable_apis

То есть если ты соберёшь с API_LEVEL=26 (Android 8.0), это не значит что у тебя приложение не будет работать на 5.1; можешь проверить сам. По-крайней мере у меня приложение с высоким уровнем NDK API работает без проблем на древнем Android 2.3.3.

Добавлено 25-04-2019 в 23:02:

P.S. сейчас проверил, Android NDK (ndk-build и CMake) при platform-9 автоматом линкует 64-битные библиотеки из platform-21.


Отправлено a1batross 26-04-2019 в 09:33:

> (т.к. это очень капризная платформа)

Смотря как ты к этому относишься. Если уровня позапускать в эмуляторе и на личном/жены/мамы/и т.д. устройстве, то скорее всего тебе оно не покажется капризной. А когда твой движок будет запущен на нескольких тысяч устройств, а то и больше миллиона -- писать под андроид разхочется.

Опыт собственный, да.

> P.S. сейчас проверил, Android NDK (ndk-build и CMake) при platform-9 автоматом линкует 64-битные библиотеки из platform-21.

Так официальный порт на 64 бита примерно тогда и появился. Где-то с Android 5.0.


Отправлено XaeroX 26-04-2019 в 10:45:

Цитата:
a1batross писал:
Если уровня позапускать в эмуляторе и на личном/жены/мамы/и т.д. устройстве, то скорее всего тебе оно не покажется капризной.

Ну хз, мне и на этом уровне она кажется капризной. Особенно эта мерзкая чувствительность к выравниваниям.

Цитата:
a1batross писал:
Так официальный порт на 64 бита примерно тогда и появился. Где-то с Android 5.0.

Я понимаю, да, 5.0 и апи левел 21.
Вопрос - если я соберу armeabi-сошки с апи левелом 21, они запустятся на устройствах с апи левел 16? Или надо непременно собирать 32-битные сошки с апи левелом 16, а 64-битные - тулчейном 21-го левела?

Вы тут постоянно про какие-то ndk-build и CMake пишете, но у меня полностью самописная билд-система (а лучше сказать - геганцкий мейкфайл под все оси, который умеет собирать всё от Qt-ехешника vfont под винду до жавовского classes.dex под андроид), поэтому мне нужны конкретные названия бинарников и конкретные флаги компиляции. Это хард-мод, я знаю, но я терпеть не могу зависеть от чужих библиотек/систем сборки/прочей херни, которая меняется внезапно и без предупреждения.

С armeabi я разобрался, всё отлично собирается и работает с тулзами из platform-16, а вот с arm64/aarch64 пока никак.

__________________

xaerox on Vivino


Отправлено a1batross 26-04-2019 в 11:24:

XaeroX

Цитата:
Особенно эта мерзкая чувствительность к выравниваниям


Это так только ARM и только в отношении float-ов. Которыми любой игровой движок пропитан, так что... крепись.

Цитата:
Вопрос - если я соберу armeabi-сошки с апи левелом 21, они запустятся на устройствах с апи левел 16? Или надо непременно собирать 32-битные сошки с апи левелом 16, а 64-битные - тулчейном 21-го левела?


Запустятся ровно до тех пор, пока ты не юзаешь какие-то специфичные для новых апи левелов фичи. Как с жавой. Таргет выше, а реальный минимум определяется только вызываемыми функциями/методами.

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


ХАХА. Я тоже!

Я для Android NDK писал плагин для Waf. Можешь посмотреть тут, как примерный ориентир: https://github.com/FWGS/xash3d-fwgs...lib/xcompile.py. Если недостаточно, объясню в подробностях. Можешь и в тг написать.

Для Android SDK я тоже, но думаю ты не станешь заморачиваться, чтобы собирать жавовую часть мейкфайлами. Но если хочешь, могу тоже объяснить как APK собираются из под консоли.

Цитата:
а вот с arm64/aarch64 пока никак


Если уже разобрался сам, то вообще достаточно выбрать тулчейн(он в папке toolchains лежит), сисрутом указал сисрут из platform-21 и вперёд.

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


Отправлено XaeroX 26-04-2019 в 11:33:

Цитата:
a1batross писал:
Это так только ARM и только в отношении float-ов.

Представь себе - не только в отношении float-ов.
У него шорт должен быть строго выровнен по 2-м байтам, дабл по 8-и и так далее.
Я только в арм собираю под андроид, т.к. у меня нет х86-устройств, да и вообще - они сейчас широко распространены?

Цитата:
a1batross писал:
пока ты не юзаешь какие-то специфичные для новых апи левелов фичи

Я вообще ничего специфичного не юзаю, это ведь те же сошки, что собираются под другие оси, ну плюс несколько андроид-специфичных функций типа записи лога. Я не использую никаких native app glue, т.к. не стремаюсь немного и на джаве пописать. Мне интересно, не насуёт ли туда чего-нибудь компилятор? Выше в этой теме уже выяснили, что он мне неон засунул, потому что я забыл его явно попросить этого не делать.
Цитата:
a1batross писал:
но думаю ты не станешь заморачиваться, чтобы собирать жавовую часть мейкфайлами. Но если хочешь, могу тоже объяснить как APK собираются из под консоли.

Я же написал - это всё уже в нашей инфраструктуре есть. Да, у меня джава собирается мейкфайлами там же, где и плюсовый код. Команды простые, javac да dx. Апк у меня собирается aapt-ом, подписывается и устанавливается на устройство через питоновский скрипт. Тоже ничего сложного. Сложности главным образом в параметрах, которые нужно скормить клангу, ну и вот в платформе. На 16-й платформе кланг не понимает архитектуру aarch64.
Цитата:
a1batross писал:
то вообще достаточно выбрать тулчейн(он в папке toolchains лежит)

Я обычно генерю тулчейн через make_standalone_toolchain, но мысль понятна, да.

__________________

xaerox on Vivino


Отправлено a1batross 26-04-2019 в 11:38:

XaeroX

Цитата:
Я обычно генерю тулчейн через make_standalone_toolchain, но мысль понятна, да.


Мне так влом делать. Я даже к Source SDK когда-то прикрутил именно Android NDK вместо standalone toolchain. При чём тут Source SDK? Та я ковырял порт HL2 на тегру.

Цитата:
Команды простые, javac да dx. Апк у меня собирается aapt-ом, подписывается и устанавливается на устройство через питоновский скрипт. Тоже ничего сложного


Ну aapt уже deprecated, dx тоже может быть выкинут в пользу d8. Но пока можно поставить билдтулзы постарее -- можно не заморачиваться.

Цитата:
они сейчас широко распространены?


Никогда не были. Но больше не будет -- интел ушёл с мобильного рынка. Только ради эмулятора можно.


Отправлено XaeroX 26-04-2019 в 11:41:

Цитата:
a1batross писал:
Можешь посмотреть тут, как примерный ориентир

Спасибо. Получается, для arm64 не нужно передавать ни arch, ни mfloat-abi?

Ещё пара нубских вопросов:

1) Насколько hard быстрее softfp? Есть ощутимая разница?
2) В интернете тоже находил "-Wl,--fix-cortex-a8", но добавлять не стал. Насколько этот фикс актуален в 2к19-м?

Добавлено 26-04-2019 в 18:41:

Цитата:
a1batross писал:
Ну aapt уже deprecated

Ну там можно даже простым pkzip-ом собирать, в принципе, разве нет? Я видел, некоторые так делают. Это ж обычный зип-архив.
Из тонкостей - только "правильные" слеши в путях (ещё один каприз андроида).

__________________

xaerox on Vivino


Отправлено a1batross 26-04-2019 в 11:50:

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:

Цитата:
XaeroX писал:
ещё один каприз андроида


Я думаю Linux как такового.

Цитата:
XaeroX писал:
Ну там можно даже простым pkzip-ом собирать, в принципе, разве нет?


Я так и делаю, да. aapt2 теперь просто генератор R.java и компилятор ресурсов. И начальный APK он тоже создает.

Добавлено 26-04-2019 в 14:50:

Да, пример где надо aapcs атрибут добавлять -- вызовы OpenGL. libGLES он всё же в softfp.


Отправлено XaeroX 26-04-2019 в 11:52:

Цитата:
a1batross писал:
Для Ксаша было быстрее.

Насколько быстрее, в процентах?
И пробовали ли вы включать автоматическую генерацию неона компилятором? Или может быть, интринсики юзали?

Вам в ксаше хорошо, у вас физики нет, а меня Ньютон в этом плане очень беспокоит. В нём нет поддержки неона (только altivec и sse), а тут ещё softfp...

Добавлено 26-04-2019 в 18:52:

Цитата:
a1batross писал:
Да, пример где надо aapcs атрибут добавлять -- вызовы OpenGL. libGLES он всё же в softfp.

Спасибо, буду иметь в виду.
Если не добавить, там что будет? Ошибка компиляции или сегфолт в рантайме?

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-04-2019 в 13:35:

в андроеде еще и сегфолты есть? очуметь можно. Я и думаю, ну откуда на джаве сегфолты.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено EXL 26-04-2019 в 13:44:

Цитата:
Дядя Миша писал:
в андроеде еще и сегфолты есть? очуметь можно. Я и думаю, ну откуда на джаве сегфолты.



Так же как и в Windows или Linux. Сегфолты они в нативном коде.


Отправлено XaeroX 26-04-2019 в 14:34:

Цитата:
Дядя Миша писал:
в андроеде еще и сегфолты есть? очуметь можно.

Я бы сказал, что там почти всё состоит из сегфолтов. А задача опытного андроид-разработчика - аккуратно между ними пробираться.

__________________

xaerox on Vivino


Отправлено a1batross 26-04-2019 в 18:55:

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 27-04-2019 в 09:40:

Цитата:
EXL писал:
То есть если ты соберёшь с API_LEVEL=26 (Android 8.0), это не значит что у тебя приложение не будет работать на 5.1; можешь проверить сам. По-крайней мере у меня приложение с высоким уровнем NDK API работает без проблем на древнем Android 2.3.3.

Собрал бинарники с апи левел 21, код не трогал.
На эмуляторе, созданном с имиджем 16 левела, имеем:
Цитата:
INFO: Running: "base_unittest"...
base_unittest: 1 file pushed. 3.9 MB/s (960740 bytes in 0.233s)
reloc_library[1306]: 785 cannot locate 'uselocale'...
CANNOT LINK EXECUTABLE
ERROR: Unit tests in bundle "base_unittest" failed!
INFO: Running: "platform_unittest"...
platform_unittest: 1 file pushed. 3.5 MB/s (847324 bytes in 0.231s)
reloc_library[1306]: 809 cannot locate 'uselocale'...
CANNOT LINK EXECUTABLE
ERROR: Unit tests in bundle "platform_unittest" failed!

И далее в таком духе.
Это вообще норма?

Добавлено 27-04-2019 в 16:40:

Я понимаю, что могу пересоздать эмулятор с левелом 21, но разве это не означает, что на устройствах с левелом ниже 21 ничего работать не будет?

__________________

xaerox on Vivino


Отправлено a1batross 27-04-2019 в 11:46:

XaeroX таки я ошибся, прости. Это минимальный.

Но NDK сильно не меняется. В целом, android-9 достаточно для всего, именно в этой версии добавили OpenSL ES, чтобы выводить звук не через JNI.

GLES 3 хоть и с позже API "доступен", с android-9 можно использовать с eglGetProcAddress или dlsym-ать по libGLESv2.

Кстати, как у тебя движок как GL вызовы инициализирует? Напрямую линкуется к библиотеке или все вызовы получает через *GetProcAddress? И почему именно такой вариант? Просто собираю мнения.


Отправлено XaeroX 27-04-2019 в 12:16:

Цитата:
a1batross писал:
Кстати, как у тебя движок как GL вызовы инициализирует? Напрямую линкуется к библиотеке или все вызовы получает через *GetProcAddress?

Динамически, через GPA, да.
Цитата:
a1batross писал:
И почему именно такой вариант?

Гм... Ну так исторически сложилось. Под всеми осями местная библиотека OpenGL грузится динамически, и андроид не исключение.
Я больше скажу - у нас и Direct3D динамически грузится, вот это по-настоящему весело.

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-04-2019 в 12:55:

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 27-04-2019 в 15:57:

Цитата:
a1batross писал:
таки я ошибся, прости. Это минимальный.

Причём тут всё интереснее. Я сделал тулчейн 21-го левела, и sysroot там, получается, 21-й. Но при этом собирал с --target=armv7a-linux-androideabi16. И вот такая ошибка вылезает. Это никак не побороть?

__________________

xaerox on Vivino


Отправлено a1batross 27-04-2019 в 16:42:

XaeroX не вгляделся.

А ты пробовал убрать uselocale? У Android нестандартная библиотека и локалей например там нет.


Отправлено XaeroX 27-04-2019 в 17:36:

a1batross
В том-то и дело, что я не использую никаких uselocale. Может, оно как-то неявно появляется из-за GTest/GMock. Но на 16-м тулчейне как-то работает же?

__________________

xaerox on Vivino


Отправлено EXL 27-04-2019 в 20:22:

Цитата:
XaeroX писал:
Собрал бинарники с апи левел 21, код не трогал.

Сейчас посмотрел, оказывается Google как раз сломал всю совместимость начиная именно с API Level 21:

https://stackoverflow.com/a/27338365
https://stackoverflow.com/a/27093163

Цитата:
For basic C functions, it shouldn't matter which target version between android-3 and android-20 you use, it should work on all of them, but if you use android-21 it only works on that version and newer.


Видимо тебе придётся собирать какие-то два тулчейна для твоей самосборной сборочной системы. Которые для 64-битных архитектур armv8-a и x86_64 будут брать android-21, а для 32-битных -- android-16. Именно этим и занимаются стандартные утилиты сборки в Android NDK (ndk-build и приправленный Google'ом CMake).


Отправлено XaeroX 28-04-2019 в 06:57:

EXL
Спасибо, помогло.

Ещё один вопрос: можно ли создать эмулятор, который может выполнять одновременно и armv8, и armv7a код?

__________________

xaerox on Vivino


Отправлено a1batross 28-04-2019 в 18:58:

XaeroX можно. Нужен эмулятор, который будет исполнять armv8 код.

И чтобы он исполнял armv7a код, нужен такой APK в котором 64-битного кода нет.


Отправлено XaeroX 28-04-2019 в 19:07:

a1batross
Ок, спрошу иначе.
Эмулятор создаётся такой командой:

Цитата:
avdmanager create avd -n EmulatorDevice -k "system-images;android-16;default;armeabi-v7a" -c 50M -f

Как её модифицировать, чтобы он умел выполнять aarch64-бинарники?

__________________

xaerox on Vivino


Отправлено Дядя Миша 28-04-2019 в 19:20:

ДА НЕ КАК!

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено a1batross 29-04-2019 в 10:50:

XaeroX Дядя Миша прав.

Если ты её изначально не создал под aarch64, то и не поменяешь ничего. В эмуляторе пускается полноценная ОС в виртуальной машине.

Пересоздай под aarch64, это дело нескольких минут.


Отправлено XaeroX 29-04-2019 в 11:14:

a1batross
Ничего не понял. Что именно пересоздать?
Я и спрашиваю, какую надо написать команду - ну вероятно, тут речь об аргументе "-k", чтобы эмулятор умел в 64 бита? И вероятно, надо скачать через sdkmanager платформу? Как она будет называться?

__________________

xaerox on Vivino


Отправлено a1batross 29-04-2019 в 11:22:

XaeroX а, я тебя не понял. Мне показалось, ты хочешь модифицировать образ эмулятора.

А в команде достаточно написать arm64-v8a вроде. По крайней мере именно так значится имя архитектуры "по андродному". Ну и учти, что соответствующий образ с SDK нужно скачать.

__________________
Xash3D FWGS форк


Отправлено EXL 29-04-2019 в 11:33:

Цитата:
XaeroX писал:
Ещё один вопрос: можно ли создать эмулятор, который может выполнять одновременно и armv8, и armv7a код?


Да, конечно. У ARM-процессоров имеется совместимость "вниз", то есть arm64-v8a CPU умеет исполнять код для armeabi-v7a CPU и даже (надо проверить) armv6.

Цитата:
XaeroX писал:
Как её модифицировать, чтобы он умел выполнять aarch64-бинарники?


code:
avdmanager create avd -n "ARM64_Emulator" -k "system-images;android-24;default;arm64-v8a" -c 100M -f


Предварительно нужно скачать через AVD Manager системный образ для Android 7.0 (24) и ARM64 V8A.


Отправлено XaeroX 29-04-2019 в 12:00:

Цитата:
a1batross писал:
А в команде достаточно написать arm64-v8a вроде.

Ага, только апи левел нужен уже 24-й.
Есть только пакеты "system-images;android-24;default;arm64-v8a" и выше.

__________________

xaerox on Vivino


Отправлено a1batross 29-04-2019 в 12:19:

XaeroX запускать на андроиде новее, чем под то что собирал уж точно можно безболезненно. Собирай под 21, запускай хоть на 28.

Хотел бы я сказать, да вот одна корпорация "добра" наверняка вставит какие-нибудь палки в колёса рано или поздно.

__________________
Xash3D FWGS форк


Отправлено XaeroX 29-04-2019 в 12:19:

А что такое вот это?

Цитата:
WARNING: linker: Warning: unable to normalize ""

Вылезает при запуске бинарника. Но вроде ничего не ломается.

__________________

xaerox on Vivino


Отправлено a1batross 29-04-2019 в 12:31:

XaeroX
Похоже, что часть резолвинга путей от линкера.
https://android.googlesource.com/pl...r_utils.cpp#224

Я думаю, если ты пускаешь тест бинарём, то всё нормально. Если внутри приложения... да тоже можно забить. Ну не отрезолвило путь из \0, и ладно.

Мне регулярно про какие-то неиспользованные секции в ELF пишет, но никто от этого ещё не пострадал.

__________________
Xash3D FWGS форк


Отправлено XaeroX 29-04-2019 в 12:35:

a1batross
Этот варнинг портит мне красивый выхлоп тестов. Мой внутренний перфекционист негодует.

__________________

xaerox on Vivino


Отправлено EXL 29-04-2019 в 14:39:

Цитата:
EXL писал:
и даже (надо проверить) armv6.


Итак, проверил, получилось такое:



Плюсом отмечена возможность запуска. Действительно, 64-битный процессор ARM-архитектуры ARMv8-A может запускать код от древнейшего ARMv6.

Отдельный плевок в Google за то, что из последних NDK они напрочь вырезали ARMv6, а до этого выкинули MIPS и MIPS64.

Цитата:
XaeroX писал:
Есть только пакеты "system-images;android-24;default;arm64-v8a" и выше.

Ну Android-16 (Android 4.1.2) никто для ARMv8-A не портировал. Во времена Jelly Bean наверное эта архитектура только-только разрабатывалась. А вот то, что образы для Android-21 (Android 5.0) они не подготовили, вот это странно. Ведь именно с этого Android'а появилась поддержка 64-битных ARM'ов. Да и последние образы идут только для x86 и x86_64 архитектур, видимо из-за того, что эмуляция armeabi-v7a и arm64-v8a уж очень тормозная и медленная.


Отправлено XaeroX 29-04-2019 в 14:52:

Цитата:
EXL писал:
А вот то, что образы для Android-21 (Android 5.0) они не подготовили, вот это странно. Ведь именно с этого Android'а появилась поддержка 64-битных ARM'ов.

Да, в этом-то и дело.
Цитата:
EXL писал:
видимо из-за того, что эмуляция armeabi-v7a и arm64-v8a уж очень тормозная и медленная.

Для юнит-тестов - пойдёт.

Добавлено 29-04-2019 в 21:52:

Цитата:
XaeroX писал:
WARNING: linker: Warning: unable to normalize ""

От варнинга удалось избавиться.
Оказывается, он вылезает, когда LD_LIBRARY_PATH содержит "пустой" путь, например, имеет вид "/path/to/libs:" вместо "/path/to/libs". Старые андроиды это игнорировали, а на новых - варнинг.

__________________

xaerox on Vivino


Отправлено a1batross 29-04-2019 в 15:14:

XaeroX не беспокойся, по ссылке на сорцы линкера, этот недостаток поправили почти 3 три года назад.

__________________
Xash3D FWGS форк


Временная зона GMT. Текущее время 21:12.
Показать все 74 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024