Por que um aplicativo Android não deve ser escrito em C/C++ porque você "simplesmente prefere programar em C/C++"? [fechado]

actualizado (para maior clareza e para reduzir a ambiguidade):

Vou começar a mexer com aplicativos android. Eu estava planejando escrever o em C++ usando o NDK (já que eu tenho mais experiência em C++ e prefiro-o a Java), mas encontrei o seguinte na página NDK do Android :

só deve utilizar o NDK se for essencial para o seu app - nunca porque simplesmente prefere programar em C/C++.

tinha a impressão de que devia usar o linguagem que você prefere, desde que se encaixe no trabalho. Alguém pode explicar porque é tão fortemente aconselhado não usar C / C++ para o desenvolvimento do android?


Original:

Eu vou começar a remendar com aplicativos móveis, especificamente android, que é o SO do meu telefone atual, e eu estava pensando se escrever o aplicativo em C++ (ou pelo menos o núcleo, em seguida, empacotar em Java) era uma opção aceitável.

Um pouco de experiência, sou um especialista em Ciência da computação que fez 3 cursos de C++ (intro, intermediate, OOP e am fazendo um curso STL na primavera) e apenas 1 curso Java(intermediate). Por causa disso, estou mais confortável com C++ e prefiro-o a Java. Encontrei o seguinte na página do Android NDK.:

O uso de código nativo no Android geralmente não resulta em um perceptível melhoria de desempenho, mas sempre aumenta a sua complexidade app. Em geral, você só deve usar o NDK se for essencial sua app - nunca porque simplesmente prefere programar em C/C++.

    Tinha a impressão de que devias usar a linguagem que te serve. tanto o trabalho como o que conhece.
  • eu posso querer portar a aplicação para outra plataforma móvel, tais como como iOS, que suporta C++ mas não java
  • enquanto Java é uma linguagem de alto nível e, portanto, deve fazer o desenvolvimento mais rápido, eu sinto que o desenvolvimento seria mais lento porque eu teria reaprender quase tudo (desde que eu só fiz uma aula sobre a língua)

qualquer conselho seria muito grato.

Ps: muitas das respostas sobre este assunto são de anos atrás e há muito poucas respostas de seguimento que mencionam o NDK permitindo o desenvolvimento de aplicativos nativas completos no android 2.3 e mais recente.

Author: Logan Besecker, 2012-12-08

7 answers

Pensa assim. Você tem a capacidade de usar o SDK Java para construir uma aplicação de trabalho completo que tira vantagem de 100% das APIs disponíveis para os desenvolvedores. Não há nada que você possa fazer com o NDK que não possa ser feito com o SDK (a partir de uma perspectiva API), o NDK apenas fornece maior desempenho. Agora Veja ao contrário. Se você optar por escrever uma aplicação 100% no NDK, você ainda pode escrever uma aplicação totalmente funcional, mas você está limitado no número de APIs de framework que você pode acessar. Nem todo o framework Android pode ser acessado na camada nativa; a maioria das APIs são apenas Java. Isso não quer dizer que todas as APIs que você pode precisar não estão disponíveis no NDK, mas nem perto todas as APIs estão expostas.

Além disso, o NDK introduz um código específico de plataforma que expande o tamanho da sua distribuição. Para cada arquitetura de dispositivo que você pretende suportar, o seu código nativo deve ser incorporado em. So Arquivos (um para armv5, armv7 e x86) todos embalados na mesma APK. Esta duplicação de código executável torna a sua aplicação 3x o tamanho (ou seja, uma binária "fat"), a menos que assuma a tarefa de construir APKs separados para cada arquitetura quando você distribuir a aplicação. Assim, o processo de implantação torna-se um pouco mais trabalho se você não quer que o seu APK para crescer em tamanho significativamente.

De novo, embora nada disto o proíba de fazer o que escolher, indica Por Que Razão O Google descreve Java como o método "preferido" para a maioria de seu código e o caminho de menor resistência. Espero que esclareça por que razão a documentação está redigida como está.

 109
Author: devunwired, 2012-12-09 03:29:00
Se só vais desenvolver uma aplicação na tua vida, usa a NDK.

Se você pretende aprender o desenvolvimento do Android com a intenção de desenvolver mais de uma aplicação durante a sua vida - e quer ser capaz de suportá - los adequadamente a todos-é muito provável que você faça melhor a longo prazo se você aprender Java e usar o SDK Java do Android em vez disso.

 25
Author: Isaac, 2012-12-08 02:03:28

Os programadores do King usam C++ para a sua lógica de jogo. E eles parecem estar bem a julgar pelo seu volume de negócios.

Na minha experiência, C++ é para solucionadores de problemas e Java é para evitadores de problemas. Eu amo qualquer linguagem, mas C++ é muito gratificante quando você escreve um bom código. No entanto, pode levar apenas alguns momentos de magia para chegar lá.

Você poderia recomendar C++ para os cientistas de dados também, que normalmente teriam o seu trabalho feito por, digamos, Python ou R. C++ pode fazer o mesmo com o bom ou não melhor desempenho, mas é preciso ser um gênio na linguagem. É por isso que eu nunca recomendaria C++ para aquele que quer fazer isso - eu só daria um aviso para a surpresa que eles estão esperando.

 8
Author: JAkerblom, 2015-08-10 14:17:38
Encontrei este artigo interessante de: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

O C++ foi construído especificamente para a independência da plataforma e, como tal, encontra-se em todos os sistemas operativos existentes. Seu usuário móvel típico pode saber que aplicativos Android são escritos aplicativos Java e iOS em Objective-C, mas o que muitos não sabem é que há mais código C/C++ na memória em seus dispositivos do que qualquer outra coisa. Unidades C / C++ 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 permitem esses dispositivos. Mais importante para uma equipe de desenvolvimento, é que existem interfaces C/C++ e bibliotecas para qualquer coisa que você precisa fazer em qualquer dispositivo e plataforma. O conjunto de ferramentas NDK Android é um grande exemplo de suporte completo de C/C++ que foi adicionado originalmente para as equipes de desenvolvimento de jogos para permitir-lhes obter o melhor possível o Android Java é uma máquina virtual em que o código Java é executado. Ele tem sido melhorado regularmente para permitir todos os Serviços Android.

 4
Author: Moussa D., 2016-01-17 03:02:52

Eu diria para usares java para a aplicação principal. Mas se tiver algum código C++ que precise de portar ou alguma biblioteca que precise que seja implementada de forma eficiente em C++, então use o ndk para esses bits

 3
Author: Dan, 2013-10-26 10:48:18

Não vejo qualquer razão para não usar o C++ para o desenvolvimento normal do android , se tiver uma vasta experiência em trabalhar em C++ e com sistemas operacionais complexos como o windows ou qualquer outro, então você pode apreender o android rapidamente e não é tão complicado como os outros SO são. aprender java ou trabalhar sem aprender seria mais frustrante e complexo !

 3
Author: stng, 2015-06-19 03:41:50

A consideração mais importante é que o Java compilados código será executado em todos os dispositivos android inalterada, enquanto que o código nativo terá de ser compilado para todas as plataformas alvo.

A intenção geral para Java e Android é que você escreva a maioria, se não todo o seu aplicativo em Java e use coisas nativas apenas quando não há outra opção... então tudo sobre escrever o aplicativo se prestará a fazê-lo em Java.

Vais poupar-te a muitas chatices. em ponte entre os mundos nativo e Java, escrevendo em Java.

Assim como, você vai fazer um grande favor a si mesmo se você tomar o mergulho e aprender Java. Não só o seu aplicativo Android será o melhor para ele, mas você vai se expor a uma abordagem significativamente diferente para OO e você será um melhor programador para ele.

Adicione a isso o fato de que você vai pisar um monte de riscos de segurança escrevendo em Java. Na minha mente, isto é inútil. Hipoteca.
 3
Author: Lawrence Dol, 2019-05-15 17:44:19