O Android não pode executar o processo para Android API 29 (Android 10) de / lib / <arch>

Sep 09 2020

Na API 29 do Android, não podemos executar um processo da pasta de dados devido à violação de W ^ X. O Google parece recomendar que devemos executá-los da pasta / lib / [arch]. No entanto, apenas arquivos no formato lib [nome] .so serão instalados, mesmo se incluídos no APK. Além disso, ao tentar executar um arquivo que por acaso foi nomeado com esse formato, ele apenas retorna o código de saída 1 sem exceção ao fazer isso. O programa não é executado.

Esta resposta indica algo semelhante, mas não menciona um arquivo com "nome incorreto" em execução: https://stackoverflow.com/a/62394766/449722

Pelo que eu posso dizer, executar executáveis ​​nativos incluídos com um APK agora é impossível, em vez de apenas chamar bibliotecas compartilhadas ao direcionar a API 29. Isso está correto ou há algo específico que precisamos fazer.

Respostas

1 AlexCohn Sep 10 2020 at 02:43

O Google está ciente de que precisamos renomear de forma não intuitiva nossos executáveis ​​para corresponder ao lib….sopadrão, mas eles parecem se sentir confortáveis ​​com isso e, em várias ocasiões, expressaram determinação em não interromper o suporte à execução de executáveis ​​nativos Runtime.exec(). Na verdade, provavelmente é tarde demais para esperar que eles mudem a convenção de nomenclatura que foi promulgada desde o Android Cupcake.

Dito isso, existem alguns extras para cuidar:

  • Certifique-se de que os arquivos sejam extraídos (por padrão, android:extractNativeLibs="false"ao construir um pacote).

  • Certifique-se de que o executável não tenha dependências insatisfeitas (por exemplo, c ++ _ shared ).

  • Se o seu executável precisar de bibliotecas não pertencentes ao sistema (durante o carregamento ou por meio dlopen()), você deve fornecer o LD_LIBRARY_PATHao seu diretório lib (ao contrário System.loadLibrary(), isso não é resolvido para você).

  • Não codifique o caminho para exec(), use getApplicationInfo().nativeLibraryDir.