LINUX.ORG.RU

Как запихнуть в .apk консольный бинарник для дальнейшего его запуска основной программой?

 , , , ,


0

2

И куда?

Есть приложение на Qt, которое через QProcess запускает другие консольные приложения и что-то с выхлопом из stdout делает. На десктопных платформах всё работает. Нужно, чтобы работало и на ондроеде, который нелинукс. Соответственно, нужно этот консольный бинарник куда-то в известное место поместить, а потом из этого известного места вызвать, чтобы у бинарника были права на исполнение. Шоб было юниксвейно :) А юниксвей на андроиде работает, иначе бы всякие эмуляторы терминала на нём бы не существовали

Где можно почитать про организацию файловой системы Андроида и куда у обычного приложения есть доступ на запись и исполнение?

★★★★★

Я когда-то делал приложение на qt под андроид. Но у меня были библиотеки so. В проекте есть специальный файлик, туда пишешь имена библиотек и сборщик их поместит в apk. Как с приложениями не знаю.

ox55ff ★★★★★
()

Я смутно понимаю, что ты хочешь сделать, но гугли в сторону ресурсов в ассетах (assets) — это специальное место в apkшнике, в которое можно класть любые бинарные файлы, которые не должны модифицироваться при компиляции и оставаться такими, какие они есть. Если потом из ассетов не удастся запустить, просто попытаешься скопировать их на флешку (доступ на чтение из ассетов точно есть) и запускать оттуда. Есть ли на андроиде место, доступное для записи файла и его запуска, я не знаю. Работу с карточками памяти там переделывают практически каждый релиз операционки.

Как все это прикрутить еще и к кутям я тоже не знаю, с ними на андроиде не работал.

Если есть исходники экзешников, то, по хорошему, проще их модифицировать в динамические либы с джавовским интерфейсом и работать с ними из приложения как с обычными jni библиотеками. Это обычное дело в андроиде, не надо будет париться с правами доступа, думать, как их хранить и т.п. В инете куча примеров. Но у тебя опять же, не джава, а кути и как там это делается я не в курсе.

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

просто попытаешься скопировать их на флешку (доступ на чтение из ассетов точно есть) и запускать оттуда

Вроде с флехи запускать что-то запретили в новых версиях Android? Но это не точно. В любом случае можно скопировать в Internal Storage.

Если есть исходники экзешников, то, по хорошему, проще их модифицировать в динамические либы с джавовским интерфейсом и работать с ними из приложения как с обычными jni библиотеками. Это обычное дело в андроиде, не надо будет париться с правами доступа, думать, как их хранить и т.п. В инете куча примеров. Но у тебя опять же, не джава, а кути и как там это делается я не в курсе.

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

EXL ★★★★★
()

А юниксвей на андроиде работает, иначе бы всякие эмуляторы терминала на нём бы не существовали

К использованию UNIX Way на Android’е подошли с умом, а не как в Linux. Например, Android-разработчики не стали изобретать колесо и в том же внутреннем хранилище разграничили доступ к данным используя привычные всем юниксовые права на директории. У каждого APK-приложения имеется свой собственный пользователь, который может получить доступ лишь к определённой директории и определённому набору файлов в ней, а доступ в другие каталоги (которые используются другими приложениями) ему закрыт.

EXL ★★★★★
()

на десктопных все работает...

пропустим все вышесказанное, которые даже главное не понимают...

а с чего ты решил что твой десктопный бинарь будет работать на Анроиде?! :D :D :D

заюзай adb console и поимей ошибки на бинарик

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 2)
Ответ на: комментарий от anonymous2

а с чего ты решил что твой десктопный бинарь будет работать на Анроиде?! :D :D :D

разумеется он будет скомпилен под андроид-девайс

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

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

это ж сколько лишнего пердолинга

Harald ★★★★★
() автор топика

Посмотри, как Entware устанавливается (там целый репозиторий консольных пакетов, что на андроид идут и на Nokia 8810 поставил сегодня под форк FirefoxOS [KaiOS] на ядре андроида и Webkit, все консольные утилиты из богатого набора работают). Вот доступная статья: Добавляем поддержку репозитория Entware на Android-боксе. Я пользовался способом Alternative и установил на sd карту. Кстати, можешь и swapon заодно сделать, если железо не топовое.
Если понадобится - попроси, скину инструкцию для установки Debian в чрут, все арм пакеты доступны, сервисы автоматически запускаются со стартом трубки и работают из него. Но батарею больше жрать начинает, а Entware с его репами для opkg очень лайтовый.

fehhner ★★★★★
()
Последнее исправление: fehhner (всего исправлений: 4)
Ответ на: комментарий от fehhner

Твой запрос делается по аналогии: закидываешь приложение в доступную папку и запускаешь оттуда. Нет никакой разницы, где она расположена (если ты собрался запускать напрямую из приложения, то не надо добавлять ничего в $PATH).

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

Твой запрос делается по аналогии: закидываешь приложение в доступную папку и запускаешь оттуда.

доступная - это какая конкретно?

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

доступная - это какая конкретно?

Любая. В какую ты хлам весь пишешь? Можно, например, /sdcard/opt/packagename
Но тогда и запускать, при вызове указывая путь.

fehhner ★★★★★
()
Последнее исправление: fehhner (всего исправлений: 3)
Ответ на: комментарий от Harald

надо попробовать

не забудь проверить, что chmod +x сделан

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

если разумеется тебя есть исходник, то зачем?! зачем делать отдельный бинарь?!

собери его в либу или слинкуй с основным приложением, и вызывай как угодно через функцию...

зачем эта куча проблем с проверкой на права запуска от assets?

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)

Я, когда мне такое надо было, форкнул Termux и заставил его докачивать и запускать мой код.

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

К слову, вы знаете, в честь какой ОС называется UNIX Way?

next_time ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.