una studio programacion para móviles link edición desde desarrollo curso app aplicaciones abrir android c++ service native binder

studio - manual de programacion android pdf



¿Cómo crear un servicio nativo de Android y usar un enlace para comunicarse con él? (3)

Mi tarea básica es crear un servicio nativo en Android y luego escribir un programa nativo simple para probarlo. digamos que quiero escribir un servicio simple que me devuelva la suma de 2 enteros. Tengo que usar carpetas para hablar desde el programa, he intentado buscar en Google pero no puedo encontrar un ejemplo preciso. Necesito saber cómo crear un servicio nativo y encontrarlo en el programa y, si es necesario, también en Java.

Por favor, ayúdame. Gracias


Después de estudiar y codificar @ Android NDK, descubrí que la API de enlace no está disponible en Android NDK. E incluso si usa la fuente abierta de Android para invocar la API de la carpeta, quizás obtenga un permiso denegado debido a la verificación de seguridad de la carpeta.

Aquí, si quiero agregar un servicio al servicio del Sistema, necesito un grupo de usuarios de nivel de sistema. Los códigos de detalles que puede encontrar https://github.com/qianjigui/android_system_service_example . Contiene el cliente y el servicio del nivel C y Java, pero necesita el permiso del sistema.


La solución que encontré es usar los Binders en nativo y usar el

defaultServiceManager()->addService( String16("TestService"),new CalcService());

y luego use carpetas y use las siguientes en el lado del cliente.

sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder = sm->getService(String16("TestService"));

Encontré ejemplos aquí sobre cómo hacer esto: https://github.com/gburca/BinderDemo/blob/master/binder.cpp


Si está creando una aplicación Android normal utilizando el NDK, no puede usar Binder porque no forma parte de las API de NDK.

Consulte en los documentos de NDK / STABLE-APIS.html la lista completa de API estables, y este hilo para obtener un comentario explícito de David Turner (el mantenedor de NDK) de que Binder no es una API compatible.

https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/1QmVRrNckfM

Tus opciones son:

  • Utilice alguna otra forma de IPC en código nativo, por ejemplo, un socket de dominio UNIX
  • Hazlo en Java, usando las funciones normales de Service y AIDL del SDK de Android. Si desea combinar esto con código nativo, puede invocar Java desde código nativo utilizando JNI.
  • (No recomendado) Copie las bibliotecas y los encabezados relevantes de un Proyecto de código abierto de Android; incorporarse a su proyecto NDK; y usa las API. Sin embargo, esto no es oficialmente compatible y es muy probable que rompa su aplicación en versiones futuras porque Google no tiene ninguna obligación de mantener la compatibilidad en dichas bibliotecas (y con frecuencia no). También es muy difícil, ya que necesita encontrar una forma de registrar el servicio para que el cliente pueda encontrarlo.