'Permiso denegado' al conectarse al socket unix abstracto

Sistema operativo: Android L
Servidor: un servidor de sistema de nivel nativo, servicio a través de socket abstracto.
Cliente: jni en normal 3º APK
Obtenga un 'permiso denegado' mientras usa APK para conectar el socket.
¡Creo que el socket abstracto no tiene permisos !

Y, el mismo código funciona cuando se ejecuta en un shell de adb, shell con raíces.

La pregunta es: ¿ dónde está la permision ?

el código:

char *target_socket_name = "@mobilelogd"; int sock_id = 0; struct sockaddr_un sun; int address_len; sock_id = socket(AF_UNIX, SOCK_STREAM, 0); if (sock_id < 0) { LOG("in %s: Unable to create socket: %s\n", __func__, strerror(errno)); return -1; } else { LOG("socket created!\n"); } memset(&sun, 0, sizeof(sun)); sun.sun_family = AF_UNIX; strncpy(sun.sun_path, target_socket_name, strlen(target_socket_name)); sun.sun_path[0] = 0; address_len = offsetof(struct sockaddr_un, sun_path) + strlen(target_socket_name); if (connect(sock_id, (struct sockaddr *)&sun, address_len) == -1) { LOG("in %s: Connect to socket failed: (%d),%s\n", __func__, errno, strerror(errno)); close(sock_id); return -1; } 

— EDIT 1 — : agregar un código de inicialización, y cambiar '0' a 0. El mismo resultado.

Bueno, aquí está la cuchara que cambió en L por un error introducido .. la corrección de errores es la tubería:

https://android.googlesource.com/device/moto/shamu/+/b2db40f

Hasta que las pipas de java o las pipas nativas en lugar de otro

Puesto que Android manipuló el kernel de Linux y agregó la red Paranoid a él, así que usted debe agregar el permiso siguiente a su archivo del manifiesto.

 <uses-permission android:name="android.permission.INTERNET" /> 

Android agrega una opción de "red paranoide" al kernel de Linux, que restringe el acceso a algunas funciones de red dependiendo del grupo del proceso de llamada.

Por lo tanto, el uid tu aplicación (identificador de usuario, a cada aplicación se le asigna un uid único una vez que se instala) se debe otorgar ese permiso para realizar tareas de red.

  • Socket para servidor Android
  • ¿Cuál es el tiempo de espera predeterminado de java.net.Socket en android?
  • Comunicación de socket cliente / servidor de Android mediante Service o IntentService
  • Servicio de Android para sockets TCP
  • Socket - Cliente Java, Servidor C #
  • Cómo enviar el archivo binario y el texto usando el mismo socket
  • ¿Cómo ejecutar el servicio no en el hilo principal?
  • Cómo pasar datos del servidor a la aplicación de Android: REST vs Sockets
  • DatagramSocket.bind (); Socket excepción: no se puede asignar la dirección solicitada. Emulador de Android
  • Conexión entre Python Server y la aplicación Android
  • Socket Android: java.net.SocketException: No hay ruta para alojar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.