Atualizado (para maior clareza e para reduzir a ambiguidade):
Vou começar a mexer em aplicativos para Android. Eu estava planejando escrever em C ++ usando o NDK (já que tenho mais experiência em C ++ e prefiro-o a Java), mas deparei com o seguinte na página Android NDK :
você só deve usar o NDK se for essencial para seu aplicativo - nunca porque você simplesmente prefere programar em C / C ++.
Fiquei com a impressão de que você deveria usar a linguagem de sua preferência, desde que seja adequada ao trabalho. Alguém poderia explicar por que é tão aconselhável não usar C / C ++ para o desenvolvimento do Android?
Original:
Vou começar a mexer em aplicativos móveis, especificamente o Android, que é o sistema operacional do meu telefone atual, e queria saber se escrever o aplicativo em C ++ (ou pelo menos o núcleo, em seguida, embrulhar em Java) era uma opção aceitável.
Com alguma formação, sou formado em ciência da computação, tendo feito 3 cursos C ++ (introdução, intermediário, OOP e estou fazendo um curso STL na primavera) e apenas 1 curso Java (intermediário). Por causa disso, fico mais confortável com C ++ e prefiro-o a Java. Encontrei o seguinte na página Android NDK :
Usar código nativo no Android geralmente não resulta em uma melhoria perceptível de desempenho, mas sempre aumenta a complexidade do aplicativo. Em geral, você só deve usar o NDK se for essencial para o seu aplicativo - nunca porque você simplesmente prefere programar em C / C ++.
- Tive a impressão de que você deveria usar a linguagem que melhor se adeque ao trabalho, assim como aquela que você está familiarizado
- Posso querer portar o aplicativo para outra plataforma móvel, como iOS, que suporta C ++, mas não java
- Embora Java seja uma linguagem de alto nível e, portanto, deva tornar o desenvolvimento mais rápido, eu sinto que o desenvolvimento seria mais lento porque eu teria que reaprender quase tudo (já que só fiz uma aula sobre a linguagem)
Qualquer conselho seria muito apreciado.
ps: muitas das respostas sobre esse assunto são de anos atrás e há muito poucas respostas de acompanhamento que mencionam que o NDK permite o desenvolvimento de aplicativos nativos completos no Android 2.3 e mais recentes.
Respostas:
Pense desta maneira. Você pode usar o Java SDK para construir um aplicativo funcional completo que aproveita 100% das APIs disponíveis para desenvolvedores. Não há nada que você possa fazer com o NDK que não possa ser feito com o SDK (de uma perspectiva de API), o NDK apenas fornece um desempenho superior.
Agora, olhe ao contrário. Se você optar por escrever um aplicativo 100% no NDK, ainda poderá escrever um aplicativo totalmente funcional, mas estará limitado no número de APIs de estrutura que pode acessar. Nem toda a estrutura Android pode ser acessada na camada nativa; a maioria das APIs são apenas Java. Isso não quer dizer que todas as APIs de que você pode precisar não estejam disponíveis no NDK, mas nem de longe TODAS as APIs estão expostas.
Além disso, o NDK apresenta código específico da plataforma que expande o tamanho da sua distribuição. Para cada arquitetura de dispositivo que você pretende oferecer suporte, seu código nativo deve ser integrado em arquivos .so (um para armv5, armv7 e x86) todos empacotados no mesmo APK. Essa duplicação de código executável torna seu aplicativo 3 vezes maior (ou seja, um "binário gordo"), a menos que você assuma a tarefa de criar APKs separados para cada arquitetura ao distribuir o aplicativo. Portanto, o processo de implantação torna-se um pouco mais trabalhoso se você não quiser que seu APK aumente significativamente.
Novamente, embora nada disso o proíba de fazer o que você escolher, ele mostra por que o Google descreve o Java como o método "preferido" para a maior parte do seu código e o caminho de menor resistência. Espero que esclareça por que a documentação está redigida da maneira que está.
fonte
.so
arquivos? Estou ciente de que deve haver uma compilação separada de código nativo para cada arquitetura de hardware com suporte, portanto, cada.so
arquivo tem uma compilação separada..so
para cada arquitetura que você escolheu suportar (isso é controlado por seus makefiles) e todos os arquivos serão colocados no diretório libs / de seu APK. Quando o APK for instalado, apenas o apropriado.so
será selecionado, mas todos eles ainda precisam viver no APK inicial.Se você pretende desenvolver apenas um aplicativo em sua vida, use o NDK.
Se você pretende aprender o desenvolvimento do Android com a intenção de desenvolver mais de um aplicativo durante sua vida - e deseja ser capaz de dar suporte adequado a todos eles - é muito provável que se saia melhor a longo prazo se aprender Java e use o Java SDK do Android.
fonte
Os programadores da King usam C ++ para a lógica do jogo. E eles parecem estar indo bem a julgar pelo volume de negócios.
Na minha experiência, C ++ é para solucionadores de problemas e Java é para evitadores de problemas. Eu amo ambas as linguagens, mas C ++ é bastante recompensador quando você escreve um bom código. No entanto, pode levar alguns momentos de magia para chegar lá.
Você também pode recomendar C ++ para cientistas de dados, que normalmente fariam seu trabalho por, digamos, Python ou R. C ++ pode fazer o mesmo com desempenho tão bom ou não, mas basta ser um gênio na linguagem. É por isso que eu nunca não recomendaria o C ++ para quem quer fazê-lo - eu apenas avisaria sobre o tratamento que eles terão.
fonte
Achei este artigo interessante de: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ foi construído especificamente para independência de plataforma e, como tal, é encontrado em todos os sistemas operacionais existentes. Seu usuário móvel típico pode saber que os aplicativos Android são escritos em Java e iOS em Objective-C, mas o que muitos não sabem é que há mais código C / C ++ na memória de seus dispositivos do que qualquer outra coisa. C / C ++ conduz grande parte da tecnologia de pequenos dispositivos (como o kernel, que interage com o hardware, bem como bibliotecas de tempo de execução típicas) e as redes de telecomunicações que habilitam esses dispositivos. O mais importante para uma equipe de desenvolvimento é que existem interfaces e bibliotecas C / C ++ para tudo o que você precisa fazer em qualquer dispositivo e plataforma. O conjunto de ferramentas Android NDK é um ótimo exemplo de suporte C / C ++ completo que foi adicionado originalmente para equipes de desenvolvimento de jogos para permitir que eles obtenham o melhor desempenho possível do dispositivo evitando Java e o Android Java runtime Dalvik, a máquina virtual na qual O código Java Android é executado em. Ele tem sido melhorado regularmente para habilitar todos os serviços do Android.
fonte
Eu diria que use java para o aplicativo principal. Mas se você tiver algum código c ++ que você precisa portar ou alguma biblioteca que seja implementada de forma eficiente em c ++, use ndk para esses bits
fonte
Não vejo nenhuma razão para não usar C ++ para o desenvolvimento normal do Android. Se você tem vasta experiência em trabalhar em C ++ e com sistemas operacionais complexos como o Windows ou qualquer outro, então você pode entender o Android rapidamente e não é tão complicado quanto o outros sistemas operacionais são. enquanto aprende java ou trabalhando sem aprender, seria mais frustrante e complexo!
fonte
A consideração mais importante é que o código Java compilado será executado em todos os dispositivos Android inalterados, enquanto o código nativo precisará ser compilado para todas as plataformas de destino.
A intenção geral para Java e Android é que você escreva a maioria, senão todo o seu aplicativo em Java, e use coisas nativas apenas quando não houver outra opção ... então, tudo sobre como escrever o aplicativo se prestará a fazê-lo em Java.
Você vai se poupar de muitos aborrecimentos ao fazer a ponte entre os mundos nativo e Java escrevendo em Java.
Além disso, você fará um grande favor a si mesmo se mergulhar e aprender Java. Não apenas seu aplicativo Android será o melhor para isso, mas você se exporá a uma abordagem significativamente diferente para OO e será um programador melhor para isso.
Adicione a isso o fato de que você evitará uma série de riscos de segurança escrevendo em Java.
Em minha mente, isso é um acéfalo - use Java.
fonte