Escreva aplicativos em C ou C ++ para Android? [fechadas]
286
Estou tentando desenvolver / portar um jogo para o Android, mas é em C, e o Android suporta Java, mas tenho certeza de que deve haver uma maneira de obter um aplicativo em C, alguém sabe como fazer isso?
O G1 não permite acesso root por padrão, e existem muitas restrições em relação ao que pode ser executado fora do ambiente 'Android'. Eu não teria muita esperança de encontrar uma maneira de executar código nativo no Android.
Cogy
2
mas baixei o DOOM para Android no mercado. Por isso, deve ser factível
para .net / c # código e verificação android fora Xamarin
bbqchickenrobot
41
O NDK do Android é um conjunto de ferramentas que permite implementar partes do seu aplicativo no código nativo, usando idiomas como C e C ++. Para certos tipos de aplicativos, isso pode ajudá-lo a reutilizar bibliotecas de códigos escritas nesses idiomas.
Para mais informações sobre como começar o desenvolvimento nativo, siga este link .
Exemplos de aplicativos podem ser encontrados aqui .
A posição oficial parece ser que isso não é algo que você "queira fazer". Veja este tópico na lista de desenvolvedores do Android. O Google prevê que o Android seja executado em uma variedade de dispositivos diferentes (CPUs, telas, etc.). A melhor maneira de habilitar o desenvolvimento é, portanto, usar código gerenciado (portátil) que tenha como alvo a Dalvik VM. Por esse motivo, o Android SDK não suporta C / C ++.
O Android inclui um conjunto de bibliotecas C / C ++ usadas por vários componentes do sistema Android. Esses recursos são expostos aos desenvolvedores por meio da estrutura de aplicativos Android.
A estrutura do aplicativo gerenciado parece estar em camadas no topo dessas bibliotecas. A página continua listando as bibliotecas C / C ++: biblioteca C padrão, mídia, 3D, SQL Lite e outras.
Portanto, tudo que você precisa é de uma cadeia de compiladores que compile C / C ++ na CPU apropriada (ARM, no caso do G1). Algumas breves instruções sobre como fazer isso estão aqui .
O que não sei é onde encontrar descrições das APIs que essas bibliotecas fornecem. Eu acho que pode haver arquivos de cabeçalho enterrados no SDK em algum lugar, mas a documentação pode estar incompleta / faltando. Mas acho que pode ser feito!
Espero que seja útil. Para constar, não escrevi nenhum aplicativo Android nativo - apenas alguns aplicativos gerenciados simples.
Espero que esse método seja obsoleto pelo NDK, mas talvez não seja assim, se algumas redes ou algo não permitirem que as pessoas atualizem seus telefones.
O link é 404 não encontrado. É sempre uma boa idéia colocar algum conteúdo da postagem original na resposta, caso o proprietário do site ganhe na loteria, se divorcie da esposa e se mude para Bahamas.
"o fato é que apenas a linguagem Java é suportada não significa que você não pode desenvolver aplicativos em outros idiomas. Isso foi comprovado por muitos desenvolvedores, hackers e especialistas em desenvolvimento de aplicativos para dispositivos móveis. Os funcionários da Elements Interactive BV, empresa por trás da Edgelib biblioteca, conseguiu executar aplicativos C ++ nativos na plataforma Android, mesmo que ainda haja muitos problemas na exibição e no som ... etc. Isso inclui o jogo S-Tris2 e uma demonstração de animação 3D do Edgelib. "
Observe que o NDK não permite que você desenvolva aplicativos somente nativos. O tempo de execução principal do Android continua sendo a máquina virtual Dalvik.
Não conheço um tutorial, mas uma boa ferramenta de desenvolvimento: Airplay SDK do Ideaworks Labs. (Recentemente renomeado como " Marmelade "). Usando C / C ++, você pode criar aplicativos para Windows Mobile, iPhones, Android. O único componente de que não gostei foi o compositor da GUI - um de buggy, mas você sempre pode substituí-lo pelo bloco de notas.
Você pode baixar o c4droid, instalar o plug-in GCC e instalar no seu SD. A partir do shell, apenas atravesso para o diretório em que o binário do GCC está e chamo-o para tornar um executável a bordo.
Os arquivos nativos C / c ++ libstdc ++. * Do Ubuntu são binários x86 (ou x86_64), mas os dispositivos e emuladores Android são o ARM. Obviamente, isso não funcionará de qualquer maneira, mesmo se você definir o soname correto. Esta é uma maneira muito ingênua que não leva a lugar nenhum. O Android tem suporte muito limitado ao C ++, o que significa que não há exceções, biblioteca C ++ padrão (incluindo STL) e RTTI. Se você precisar dessa funcionalidade, use minha distribuição NDK personalizada de
Há um plano para permitir bibliotecas C / C ++ na próxima versão do Android SDK (nome de código Eclair?) Até o momento, isso não é possível por meio do Android Java SDK. No entanto, você pode pegar o projeto de código aberto ENORME, rolar suas próprias bibliotecas e, em seguida, atualizar seu próprio dispositivo ... mas quem quiser usar sua biblioteca também precisará atualizar sua compilação personalizada.
@ Backslash17: Examinando o artigo e o link a seguir com as instruções de instalação, toda a empresa trabalhou para lançar um executável auto-compilado no emulador, ignorando a estrutura do Android. Depois de ter o emulador, você pode fazer o telnet e ter um shell linux. A execução de um programa Linux é trivial, é claro. Mas isso não funciona para telefones sem jailbreak (também conhecido como acesso root) e não pode ser entregue no mercado.
A menos que o Google abra outras oportunidades ou alguém escreva um compilador personalizado que compila o idioma X no bytecode Dalvik (Dalvik é a VM que executa programas Android), você não poderá escrever código nativo.
Respostas:
Para quem vem a isso pelo Google, observe que a partir do SDK 1.6 Android agora possui um SDK nativo oficial.
Você pode baixar o NDK do Android (Native Development Kit) aqui: https://developer.android.com/ndk/downloads/index.html
Também há uma postagem no blog sobre o NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
fonte
O NDK do Android é um conjunto de ferramentas que permite implementar partes do seu aplicativo no código nativo, usando idiomas como C e C ++. Para certos tipos de aplicativos, isso pode ajudá-lo a reutilizar bibliotecas de códigos escritas nesses idiomas.
Para mais informações sobre como começar o desenvolvimento nativo, siga este link .
Exemplos de aplicativos podem ser encontrados aqui .
fonte
Normalmente, você precisa:
Se você deseja vender um aplicativo:
fonte
O Google lançou um Kit de desenvolvimento nativo (NDK) (de acordo com http://www.youtube.com/watch?v=Z5whfaLH1-E às 00:07:30).
Esperamos que as informações sejam atualizadas na página de grupos do Google ( http://groups.google.com/group/android-ndk ), pois diz que ainda não foram divulgadas.
Não sei ao certo onde obter um download simples, mas ouvi dizer que você pode obter uma cópia do NDK do repositório Git do Google, na seção de donuts.
fonte
A posição oficial parece ser que isso não é algo que você "queira fazer". Veja este tópico na lista de desenvolvedores do Android. O Google prevê que o Android seja executado em uma variedade de dispositivos diferentes (CPUs, telas, etc.). A melhor maneira de habilitar o desenvolvimento é, portanto, usar código gerenciado (portátil) que tenha como alvo a Dalvik VM. Por esse motivo, o Android SDK não suporta C / C ++.
MAS, dê uma olhada nesta página :
A estrutura do aplicativo gerenciado parece estar em camadas no topo dessas bibliotecas. A página continua listando as bibliotecas C / C ++: biblioteca C padrão, mídia, 3D, SQL Lite e outras.
Portanto, tudo que você precisa é de uma cadeia de compiladores que compile C / C ++ na CPU apropriada (ARM, no caso do G1). Algumas breves instruções sobre como fazer isso estão aqui .
O que não sei é onde encontrar descrições das APIs que essas bibliotecas fornecem. Eu acho que pode haver arquivos de cabeçalho enterrados no SDK em algum lugar, mas a documentação pode estar incompleta / faltando. Mas acho que pode ser feito!
Espero que seja útil. Para constar, não escrevi nenhum aplicativo Android nativo - apenas alguns aplicativos gerenciados simples.
Andy
fonte
Você pode usar o nestedvm para converter C (ou outras linguagens GCC) em código de bytes Java e usá-lo como base da sua porta. Por exemplo, veja a porta Android da coleção de quebra-cabeças portáteis Simon Tathams .
Espero que esse método seja obsoleto pelo NDK, mas talvez não seja assim, se algumas redes ou algo não permitirem que as pessoas atualizem seus telefones.
fonte
O Google já lançou a sessão Google I / O 2011: Trazendo jogos C e C ++ para Android , disponível em http://www.youtube.com/watch?v=5yorhsSPFG4
o que é bom para entender o uso do NDK para escrever aplicativos em c e c ++ para android.
Se você quiser apenas compilar qualquer jogo nativo baseado em console e executá-los no Android, este artigo mostrou 3 métodos para o mesmo.
1: Compilação estática usando cadeia de ferramentas autônoma
2: Compilação cruzada usando a cadeia de ferramentas do Android NDK
3: Compilação cruzada usando o código-fonte AOSP
fonte
Talvez você esteja procurando por isso?
http://www.mosync.com/
É uma camada intermediária para o desenvolvimento de várias plataformas móveis usando c ++.
fonte
Olhando para isso, parece que é possível:
fonte
Desde 2009, há um desenvolvimento sobre este assunto.
Necessitas - Qt (framework C ++) para Android Vídeo de
introdução .
fonte
Dê uma olhada no grupo google ndk que parece promissor, a primeira versão do NDK estará disponível no 1S2009.
Atualização: E é lançado http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
fonte
Não tenho certeza se o NDK fornece cobertura completa da API Java oficial.
Em http://developer.android.com/sdk/ndk/index.html#overview :
fonte
O Google acabou de lançar o NDK, que permite exatamente isso.
http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html
Pode ser encontrado aqui: http://developer.android.com/sdk/ndk/1.5_r1/index.html
fonte
Esta postagem no blog pode ser um bom começo: http://benno.id.au/blog/2007/11/13/android-native-apps Infelizmente, muitas coisas importantes são "deixadas como exercício para o leitor".
fonte
Não conheço um tutorial, mas uma boa ferramenta de desenvolvimento: Airplay SDK do Ideaworks Labs. (Recentemente renomeado como " Marmelade "). Usando C / C ++, você pode criar aplicativos para Windows Mobile, iPhones, Android. O único componente de que não gostei foi o compositor da GUI - um de buggy, mas você sempre pode substituí-lo pelo bloco de notas.
fonte
Você pode baixar o c4droid, instalar o plug-in GCC e instalar no seu SD. A partir do shell, apenas atravesso para o diretório em que o binário do GCC está e chamo-o para tornar um executável a bordo.
encontre / -name gcc
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
cat> test.c
./arm-linux-androideabi-gcc test.c -o teste
./teste
olá braço!
fonte
Essas três etapas são boas para ter e armazenar neste post.
1) Como portar código c nativo no android
2) http://www.integratingstuff.com/2010/12/12/calling-native-c-code-through-jni-in-android-applications/
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
fonte
Os arquivos nativos C / c ++ libstdc ++. * Do Ubuntu são binários x86 (ou x86_64), mas os dispositivos e emuladores Android são o ARM. Obviamente, isso não funcionará de qualquer maneira, mesmo se você definir o soname correto. Esta é uma maneira muito ingênua que não leva a lugar nenhum. O Android tem suporte muito limitado ao C ++, o que significa que não há exceções, biblioteca C ++ padrão (incluindo STL) e RTTI. Se você precisar dessa funcionalidade, use minha distribuição NDK personalizada de
http://crystax.net/android/ndk.php - suporta recursos completos do C ++ listados acima.
Por que existe um erro: referência indefinida ao erro de link '__cxa_end_cleanup'. Android stlport
Tempo. Porque não há link para libstdc + +. A. Tão errado.
Como ele usa alguma biblioteca estática, é necessário vincular o libstdc + + completo. Uma lata
http://crystax.net/android/ndk.php aqui para baixar o pacote
diretório sources \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.
O Android em seu próprio suporte ao libstdc + + é limitado; ele deve estar vinculado a um libstdc + + completo. Um trabalho.
Adicionar arquivo no Android.mk
LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
E
LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
pode ser compiladofonte
Há um plano para permitir bibliotecas C / C ++ na próxima versão do Android SDK (nome de código Eclair?) Até o momento, isso não é possível por meio do Android Java SDK. No entanto, você pode pegar o projeto de código aberto ENORME, rolar suas próprias bibliotecas e, em seguida, atualizar seu próprio dispositivo ... mas quem quiser usar sua biblioteca também precisará atualizar sua compilação personalizada.
fonte
Resposta curta: você não pode.
@ Backslash17: Examinando o artigo e o link a seguir com as instruções de instalação, toda a empresa trabalhou para lançar um executável auto-compilado no emulador, ignorando a estrutura do Android. Depois de ter o emulador, você pode fazer o telnet e ter um shell linux. A execução de um programa Linux é trivial, é claro. Mas isso não funciona para telefones sem jailbreak (também conhecido como acesso root) e não pode ser entregue no mercado.
A menos que o Google abra outras oportunidades ou alguém escreva um compilador personalizado que compila o idioma X no bytecode Dalvik (Dalvik é a VM que executa programas Android), você não poderá escrever código nativo.
fonte