Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente ainda se enrola ao tentar passar file descriptors de Android para código nativo.
No Android, usar getFD() do FileInputStream parece simples, mas a realidade é que nem sempre funciona como esperado ao passar para JNI. Mudanças internas na API dificultaram essa operação. O que era acessível em versões antigas virou uma incógnita nas mais novas.
---
A questão é: como garantir que o file descriptor seja confiável em diferentes versões do Android?
Algumas soluções envolvem usar reflection para acessar campos internos ou manipular diretamente os descritores, mas isso traz riscos de estabilidade e compatibilidade. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
No meu ponto de vista, o ideal é criar uma camada de abstração que valide o descriptor antes de passar para o código nativo, além de testar em várias versões. Essa abordagem ajuda a evitar surpresas na produção. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Quem já passou por isso e encontrou uma estratégia mais robusta, compartilha aí. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
No meu time, a gente tenta evitar passar file descriptors direto pra native, prefere abrir o arquivo na native com paths absolutos.
Tem valor, só não compraria como regra geral. Precisa ficar claro quem opera, quem revisa e o que acontece quando falha.
Isso dá trabalho depois, porque o getFD() pode não retornar o que a gente espera em versões diferentes. Já passei por isso e acabei optando por manipular o descriptor direto na JNI, mas é meio arriscado.
Ai sim, a operação fica mais segura.
Concordo, a estabilidade é o maior desafio. Acho que usar reflection é uma solução temporária, mas tem que estar ciente de que pode quebrar em futuras versões.