LINUX.ORG.RU

Android + sdkmanager + пути

 , , ,


0

1

Как экспортировать пути до утилит SDK/NDK если использовать sdknamager?

Есть проект, для него устанавливаю зависимости по сборке

	export ANDROID_SDK_ROOT=$(HOME)/.love-android-build-dir/ANDROID-SDK \
	sdkmanager --install "platforms;android-33";    \
	sdkmanager --install "ndk;23.2.8568313";        \
	sdkmanager --install "platform-tools;33.0.0";   \
	sdkmanager --install "build-tools;33.0.0";      \
	sdkmanager --install "cmdline-tools;latest";    \
	sdkmanager --licenses;

Потом этот проект собирается. Всё ок

export ANDROID_SDK_ROOT=$(HOME)/.love-android-build-dir/ANDROID-SDK; \
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64; \
./gradlew assembleNormalRecord;

sdkmanager NDK + SDK файлы раскидывает вот так

dron@gnu:~/.love-android-build-dir/ANDROID-SDK$ tree -L 2
.
├── build-tools
│   ├── 33.0.0
│   └── 33.0.1
├── cmdline-tools
│   └── latest
├── licenses
│   ├── android-sdk-license
│   ├── android-sdk-preview-license
│   ├── android-sdk-preview-license-old
│   └── intel-android-extra-license
├── ndk
│   ├── 23.2.8568313
│   └── 25.2.9519653
├── platforms
│   ├── android-33
│   └── android-34
└── platform-tools
    ├── adb
    ├── dmtracedump
    ├── e2fsdroid
    ├── etc1tool
    ├── fastboot
    ├── hprof-conv
    ├── lib64
    ├── make_f2fs
    ├── make_f2fs_casefold
    ├── mke2fs
    ├── mke2fs.conf
    ├── NOTICE.txt
    ├── package.xml
    ├── sload_f2fs
    ├── source.properties
    ├── sqlite3
    └── systrace

16 directories, 19 files
dron@gnu:~/.love-android-build-dir/ANDROID-SDK$ 

Я хочу собрать luasocket для android, для этого пишу Android.mk кидаю его в исходники luasocket и теперь я хочу вызвать просто ndk-build и вот тут затык. sdkmanager не просто разворачивает окружения, а там ещё всякие ndk/23.2.8568313/blabla nkd/25.2.9519653/blabla и прочие, когда собираю проект то просто указываю ANDROID_SDK_ROOT и gradlew с прочим Ant говном понимают что и откуда из этой каши брать. Образно я тоже понимаю, но если раньше в пути нужно было просто прописать 1 раз путь до NDK/SDK + JAVA_HOME то с sdkmanager непонятно, так как он плодит кучи каталогов с кучей всего пересекающегося, разбитых по версиям, не руками же всё каждый раз прописывать? в смысле пути до утилит и прочих программ из SDK/NDK Можно ли как-то у sdkmanager или от установленных им зависимостей по сборке запросить пусти чтобы их добавить к PATH автоматически на основе того что он же наустанавливал? И просто собрать soшку через ndk-build?

Андроид боль :( Хочется ругаться и стукнуть по столу, а ещё хочется что-то сломать. Но я пока держусь :3

★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Короче я так и не понял как, руками прописывать пути от каждой, новой версии тулзы это бред и заниматься я этим не буду, поэтому как всегда всё делаем через жопу, подсовываем сорцы и Android.mk к JNI коду основной программы, благо это есть, оно скомпилирует наши soшки, потом мы эти soшки или из apk выдираем или в дебрях build каталога находим. Звездец, дурдом.

А ещё gradlew просто не видит что ему сунули в каталоги ещё каталоги с сырцами и не собирает их, нужно сделать gradlew clean и по новой ждать полчаса пока он пересоберёт весь мир и ещё два новых файлика 🤦. Даже make умеет отслеживать новые файлы и замечать изменения в текущих. А это… только оперативку жрёт и проц в сотку долбит как будто я браузер собираю, а не SDL2.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Если хочется просто взять исходники и собрать из них бинарник, то есть cmake.

А если тебе нужно подружить android ndk с automake/autotools, то тут придётся попердолиться. Но ничего не поделаешь, такова жизнь.

Андроид боль :(

Кросскомпиляция – это почти всегда боль. Под iOS тоже весело.

mono ★★★★★
()

Cmake запилить, чтоб он сам искал. Лично у меня под Qt вообще отлично собиралось кроссплатформенное приложение с минимальными изменениями, но надо учить как работает Cmake.

проц в сотку долбит

Можно nice ему высокий выставить, пущай крутит.

ac130kz ★★
()
Ответ на: комментарий от ac130kz

Ещё одну абстракцию и ещё писать модуль поиска для cmake ну такое, мне уже и так всю плешь выжрало то что cmake в каждом втором проекта ругается что ему не хватает такого-то модуля, где его брать, как его писать, а чёрт его знает. Больше проблем, чем пользы ну ИМХО конечно, там суть в том что в каждом каталоге который установил sdkmanager есть файл source.properties в котором указано что тут установлено, какая у этого версия и прочее. Логично и просится само наличие того что я установил через sdknamager нужные версии частей из SDK/NDK и затем ну прям просится само, чтобы я запросил пути до того что я установил, указав ещё раз всё что я запросил установить. Достаточно пройтись по ANDROID_SDK_ROOT прочитать в каталогах содержимое source.properties и если оно совпадает запрашиваемому то выдать путь/пути которые можно экспортировать в PATH и сразу получить ровно то окружение SDK/NDK котрое было установлено, а установлено оно может быть не раз, в разной комплектации, для разного ПО. И то что можно установить специализированную коллекцию тулчейна, но нельзя запросить пути для вот этой ущкоспециализированной установки, мне кажется очень плохим бредом и искусственным усложнением, когда вот оно всё на виду, но нет.

Я вот про это. Взять например Emscripten там такая же фигня, SDK кучи тулчейнов разных и версий каждого. Но ты накатил эту махину, вызвал экспорт путей до тулченйна и всё, ты просто вызываешь программы которые будут нужных версий (даже если у тебя много версий одного и того же). Банальная вещь как пути до локально установленного так через жопно сделала в андроиде. Дааа дам maven/ant/gradlew/Groovy, навороченные IDE которые сами за тебя всё сделают. Но блииин, оно же как из пушки по воробьям в куче случаев. И то что можно сделать буквально за несколько секунд, делается по правильному минуты и порой десятки минут.

Благо с NDK не сильно перемудрили Android.mk и всё и лапушки и ладушки. Но с кучей других вещей просто боль. Ну, кто профи тому норм, а другим боль. Когда простые и банальнейшие вещи искусственно переусложняются до неадекватных размеров.

Ладно, просто у меня жопа горит. Как mono сказал

придётся попердолиться. Но ничего не поделаешь, такова жизнь.

Йех, дя :(

LINUX-ORG-RU ★★★★★
() автор топика