портировать родной C ++ нестатический двоичный файл на Android - PullRequest
0 голосов
/ 17 ноября 2010

Я новичок в Android, и у меня есть вопрос ко всем вам, кто является экспертом! Хорошо, моя проблема ... Я реализовал клиент-серверное приложение на основе программирования сокетов. Сервер кодирует некоторые пакеты, отправляет их клиенту через сокет, а клиник декодирует их. Я тестировал код на двух машинах Linux, и он отлично работает, но в моем эксперименте требуется включить другой узел (это будет Android). Таким образом, сервер (машина linux) будет кодировать пакеты и отправлять через сокет на client1 (машина linux) и client2 (Android). По этой причине я хочу портировать двоичный код моего кода (который находится на C ++) на Android. Каким образом я могу это сделать?

Пожалуйста, помогите мне! На самом деле я полностью застрял!

Спасибо

Zenia

Ответы [ 4 ]

1 голос
/ 17 ноября 2010

, когда вы хотите портировать нативный код C / C ++ на Android, вы хотите найти Android ndk и jni

http://developer.android.com/sdk/ndk/index.html

http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

Естьнекоторые примеры в ndk о том, как это сделать.

. Предупреждаем, что C полностью поддерживается, но поддержка API для C ++ очень ограничена для Android (список находится в документации ndk), поэтому у вас могут возникнуть проблемы с переносомВаш код.

Я бы порекомендовал использовать напрямую java, если вы можете, так как работа с JNI утомительна lol

0 голосов
/ 17 ноября 2010

Что вам, вероятно, следует сделать, это установить SDK и NDK и собрать пример hello-jni ndk.

Затем посмотрите, как получить доступ к выводу android logcat из C, и напишите себе симпатичную для этого оболочку, похожую на printf (вероятно, с использованием версии vargs базовой функции), чтобы вы могли легко генерировать выходные данные отладки из собственного кода .

Затем вживите свой собственный исполняемый файл в пример кода hello-jni, чтобы у вас была Java-оболочка, которая мало что делает, кроме как начинать с вызова нативного кода. Просто помните, что не нужно выполнять много обработки в потоке пользовательского интерфейса или в собственном коде, вызываемом в этом потоке, иначе вы рискуете, что приложение не ответит по таймауту.

Также возможно (ab) использовать gcc ndk для создания автономных собственных исполняемых файлов без java-оболочки, но это не рекомендуется. Трудно найти надежное место для установки их на нерутированный телефон, и управление процессами в Android не в восторге от неизвестных нативных процессов. Другими словами, это путь, который подходит для личных экспериментов на вашем собственном устройстве, но сложный и не ориентированный на будущее для приложения, развернутого для других.

0 голосов
/ 17 ноября 2010

Спасибо за ответ,

Сначала я попытался написать свой собственный код полностью в java с использованием сокетов, однако мне пришлось перенести некоторые оптимизированные библиотеки на Android, и я смог выяснить, как это сделатьпортировать простую небольшую библиотеку, но не ту, которую я хотел).Я сдался, и сейчас я пытаюсь играть с jni и ndk.однако я не знаю, действительно ли я мог бы портировать свой бинарный файл, так как он не статичен (как Hello World).Вот почему я спрашиваю.если у кого-то есть опыт в этом, пожалуйста, дайте мне знать.Большое спасибо,

Зения

0 голосов
/ 17 ноября 2010

как еще можно это портировать? начать изучать Android я сделал быструю проверку заметил, что SDK использует Java, вы можете начать с просмотра

http://developer.android.com/reference/java/net/Socket.html

...