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?

Robert Gould
fonte
somente se você desbloquear o telefone AFAIK.
Cogy
64
O jailbraking não é para iPhones?
Robert Gould
1
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
Robert Gould
4
DOOM para Android é escrito em Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Respostas:

247

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

Andy Johnson
fonte
5
OK, então agora como sobre C # e .Net -?)
Avi
4
Não pode ver o suporte .net sempre acontecendo
vickirk
16
@Avi mono-android.net
Tomas Andrle
2
Por favor, consulte este link androidsnippets.wordpress.com/2012/08/30/…
KK_07k11A0585
2
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 .

MannyNS
fonte
1
ou 2009, 2010, 2011, 2012 ou 2013
Christopher Berman
19

Normalmente, você precisa:

  1. Instale o NDK do Google Android. Ele contém bibliotecas, cabeçalhos, exemplos de makfile e gcc toolchain
  2. Crie um executável a partir do seu código C para ARM, otimize e vincule-o às bibliotecas fornecidas, se necessário
  3. Conecte-se a um telefone usando a interface adb fornecida e teste seu executável

Se você deseja vender um aplicativo:

  1. Crie uma biblioteca a partir do seu código C
  2. Crie código Java simples que usará esta biblioteca
  3. Incorporar esta biblioteca ao arquivo do pacote de aplicativos
  4. Teste seu aplicativo
  5. Venda ou distribua gratuitamente
psihodelia
fonte
Eu sou um novo no NDK e quero executar o C lan no Android. tem algum link ref?
Parag Chauhan
14

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.

Marc
fonte
12

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 :

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.

Andy

Andy Johnson
fonte
4
Downvoting. O NDK parece ser um compilador oficial para o código nativo do Android agora. Tornando esta resposta obsoleta.
precisa saber é o seguinte
8

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.

rjmunro
fonte
1
+1 para uma alternativa ao NDK, mesmo que o NDK o torne obsoleto.
tobsen
O nestedvm não é compatível com mais dispositivos?
charo
8

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

Jeegar Patel
fonte
7

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 ++.

joepal
fonte
2
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.
Zuzlx 8/09/2015
7

Olhando para isso, parece que é possível:

"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. "

backslash17
fonte
6

Desde 2009, há um desenvolvimento sobre este assunto.
Necessitas - Qt (framework C ++) para Android Vídeo de
introdução .

zkunov
fonte
Bom ponto. Apenas como uma nota extra, o Necessitas usa o Android NDK.
Jaime Ivan Cervantes
5

Não tenho certeza se o NDK fornece cobertura completa da API Java oficial.

Em http://developer.android.com/sdk/ndk/index.html#overview :

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.

Android Eve
fonte
2

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.

zergius
fonte
2

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

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./arm-linux-androideabi-gcc test.c -o teste

./teste

olá braço!

elahtrebor
fonte
2

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 \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

E LOCAL_CPPFLAGS + =-lstdc + +-fexceptionspode ser compilado

ZhangXuelian
fonte
1

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.

haseman
fonte
-7

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.

imbecil
fonte
Certo, foi por isso que escrevi "Parece ...". Veja para acreditar!
backslash17