Por que não consigo executar executáveis do Android x86 no Linux?

5

Estou tentando portar aplicativos Android para o Linux (não ria :) e eu me deparei com um problema. Ao tentar executar um executável do Android ( app_process ) depois de adicionar a permissão executável com ./app_process , ele diz que não existe, embora cat ./app_process funcione.

Além disso, no gerenciador de arquivos (Pantheon Files), o executável mostra o ícone da biblioteca compartilhada.

Existe alguma maneira de obter essas execuções no Linux?

    
por Suici Doga 20.05.2016 / 16:13

1 resposta

10

O Android e o Linux são dois sistemas operacionais diferentes . Você não pode simplesmente pegar um executável de um e executá-lo do outro.

O primeiro obstáculo é o kernel. O Android e o Linux são baseados no mesmo kernel, mas eles possuem alguns recursos diferentes. Em particular, o Android fornece fichários , que só existem no kernel principal (aquele encontrado nas distribuições Linux) desde a versão 3.19. Um aplicativo de código nativo puro pode não usar fichários, mas a maioria dos aplicativos Java.

O segundo obstáculo são as bibliotecas dinâmicas. Se você tiver um executável vinculado dinamicamente, ele chama o vinculador dinâmico. Android e Linux têm diferentes vinculadores dinâmicos e, se o vinculador dinâmico não estiver presente, você recebe o mesmo erro como se o próprio executável não estivesse presente .

Se você copiar o vinculador dinâmico e os arquivos de configuração necessários e as bibliotecas nativas, poderá executar a maioria dos programas nativos. Você precisará copiar a maior parte de /system e a cópia precisa estar localizada em /system .

Se você deseja executar aplicativos Java, é mais complicado. Você precisa do ambiente de tempo de execução Java (Dalvik / ART), e a maioria dos aplicativos também requer alguns daemons do Android (alguns aplicativos de código nativo também exigem esses demônios).

O resultado é que enquanto os dois sistemas podem coabitar em um kernel, este precisa ser um kernel recente o suficiente, ou um kernel Android (um kernel Android pode rodar a maioria dos aplicativos Linux), e ambos os sistemas operacionais precisam ser instalado - você não pode simplesmente executar um aplicativo de um no outro.

Não tenho conhecimento de nenhum instalador pronto para Android sobre o Linux. No entanto, existem instaladores para o inverso, em particular LinuxonAndroid .

Se o objetivo é rodar um aplicativo Android em um sistema Linux, então a maneira mais fácil é rodá-lo dentro do emulador que é parte do Ferramentas de desenvolvimento para Android .

    
por 21.05.2016 / 01:24