Я пытаюсь открыть сокет в исходном коде Android. В частности, сейчас я нахожусь в файле DisplayDevice.cpp, но расположение кода сокета может измениться. Прямо сейчас после того, как я:
int fd = socket(AF_INET, SOCK_STREAM, 0);
fd возвращается как -1, и когда я проверяю сообщение об ошибке, оно отображается как «Отказано в доступе». Я много раз об этом разбирался, большинство ответов включают добавление интернет-разрешения в файл AndroidManifest. Это будет не работать для меня, как код, который я добавляю, находится внутри исходного кода Android.
Мне было интересно, если есть способ обойти отказано в разрешении. Или, если есть лучший способ сделать это / использовать другой тип сокета (сейчас я использую сокеты из
Спасибо.
Вполне естественно, что вы получаете Permission Denied
ошибка. Это просто потому, что у вас нет правильного разрешения :). Проверять, выписываться модель разрешения Android!
Представьте себе сценарий, подобный обычному пользователю в операционной системе, и вы пишете программу, которая пытается открыть сокет, подобный вашему. Скорее всего, вы столкнетесь с той же проблемой, в зависимости от того, где будет создан именованный сокет.
Как вы пытаетесь создать сокет в DisplayDevice.cpp (компиляция Android из источника), вы можете быть заинтересованы в компиляции источника в качестве суперпользователя. Вот это решение от м-RIC (Я никогда не проверял это).
Вот некоторые полезные указатели / ссылки в аналогичном направлении, которые я нашел полезными во время исследования этой увлекательной темы:
Других решений пока нет …