'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.
- Enviar datos a través de wifi (no internet) cuando los datos móviles
- Acceso a WebView desde otra función en la clase MainActivity
- Android socket de programación ... ¿qué da?
- Pérdida severa de paquetes UDP en algunos dispositivos Android
- ¿Cómo puede mi aplicación Android comunicarse con un daemon nativo?
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.
- Conexión HTTP de Android
- ¿Cómo ejecutar el servicio no en el hilo principal?
- Crear SSLSocket por SSLSocketFactory con tiempo de espera de conexión establecido
- Cómo pasar datos del servidor a la aplicación de Android: REST vs Sockets
- Socket Android: java.net.SocketException: No hay ruta para alojar
- Android VpnService - ¿Cómo reenviar el tráfico interceptado de Internet?
- ¿Cómo puedo manejar múltiples clientes conectados a un servidor mediante sockets?
- AsyncTask, doInBackground nunca se ejecuta en android
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.
- Exoplayer vs Vitamio
- Biblioteca, que es depdendency de otra biblioteca, no reconocido en cordova ejecutar android