Може ли приложение за android да говори с родна услуга за Android чрез сокети?

Опитвам се да накарам приложение за Android да говори с родна услуга (или кръстосано компилиран ARM двоичен файл, или Linux скрипт) и се чудя дали мога да направя това с помощта на сокети?

По принцип родната услуга ще работи при стартиране и ще изчака приложението да изпрати данни, преди да направи някои други неща.

Възможно ли е това и приложението за android има ли нужда от root права, за да направи това?

Благодаря.


person user1118764    schedule 06.06.2012    source източник


Отговори (1)


Да, възможно е. И не, приложението не се нуждае от специално разрешение за това - за сокет на Unix домейн дори не се нуждаете от разрешение за интернет.

Единственото място, където ще имате нужда от специално разрешение, е това, което стартира услугата - по същество трябва да й дадете стойности за убиване на oom, които ще кажат на android да остави този процес сам и/или да го настроите да се рестартира автоматично. В противен случай Android система с ограничени ресурси може да унищожи мистериозен процес, който не изглежда свързан с някаква конкретна законна дейност или услуга.

Средства за интеграция, които са по-подобни на android, разбира се, биха били да внедрите услугата си по-скоро като съществуващи услуги на android, т.е. с api API, който се изпълнява в клиентския процес и прокарва нещата през Binder IPC към услуга, работеща в специален процес (доста евентуално системния процес). Това също може да улесни регулирането на достъпа до вашата услуга с помощта на съществуващата схема за разрешения за пакет/манифест. Но в крайна сметка това е стилистично нещо и макар че може би до известна степен е свързано с приемането на вашето устройство от Google, това не е единственият начин да направите нещо, което работи.

person Chris Stratton    schedule 06.06.2012
comment
Благодаря. Написах просто клиентско приложение за Android за свързване към гнездо 10.0.2.2, но когато се опитам да го стартирам, то увисва. Предполагам, че ми липсва родната услуга. Мога ли просто да го напиша на C и да го компилирам кръстосано като ARM двоичен файл и да го стартирам на устройството? 10.0.2.2 работи ли като loopback адрес на устройството или е само за емулатори? - person user1118764; 06.06.2012
comment
Става само за емулатори. Android официално не поддържа собствени услуги за добавки - можете да компилирате и стартирате такава, но ще трябва да промените защитените настройки, за да продължи да работи. Понастоящем можете да използвате системата за изграждане на ndk, като промените BUILD_SHARED_LIBRARY на BUILD_EXECUTABLE. - person Chris Stratton; 14.06.2012
comment
Само за да разширим това, въпреки че не можете да използвате псевдонима на специалния емулатор 10.0.2.2 на физическо устройство, можете да използвате 127.0.0.1, който е стандартният адрес за обратна връзка. Въпреки това, както споменах в отговора, може да е за предпочитане да се използва сокет на unix домейн (локален сокет в java-speak), а не IP сокет, тъй като това избягва необходимостта от разрешение за интернет. - person Chris Stratton; 10.12.2015