Domanda

Il Android NDK è appena stato notevolmente ampliato per includere il supporto per la scrittura di Android applicazioni interamente in codice nativo C / C ++. Si può ora eventi di input di cattura sullo schermo tastiera e touch utilizzando codice nativo, e anche implementare il ciclo di vita dell'applicazione in C / C ++ utilizzando la nuova classe NativeActivity.

Date tutte le funzionalità native ampliato, sarebbe la pena di completamente bypass Java e scrivere Android applicazioni in codice nativo?

È stato utile?

Soluzione

Il NDK non è nativo per-sé. È in gran parte un wrapper JNI intorno l'SDK di Android. Utilizzando NativeActivity ti dà un modo conveniente di trattare con certi eventi del ciclo di app-vita, e aggiungere il proprio codice nativo sulla parte superiore. ALooper, AInputQueue ecc sono tutti i wrapper JNI delle controparti Java SDK, alcune con codice aggiuntivo che è privata e inaccessibile per le applicazioni reali.

Quando si parla di sviluppo Android, non c'è alcuna cosa come si scrive un'applicazione interamente in C ++ nativo - si (in ogni caso reale app che mi viene in mente) sempre necessario utilizzare le API Android: s, che devono un enorme estensione Java puro. Sia che utilizzi questi attraverso involucri forniti dal NDK o involucri che si crea da soli non cambia questo.

Quindi, per rispondere alla tua domanda: no, non sarebbe utile, perché si finirebbe per scrivere wrapper JNI per SDK chiama invece di scrivere wrapper JNI per i propri metodi Java che fanno la stessa cosa, con meno codice, semplice codice e codice più veloce. Per esempio, che mostra una finestra di dialogo con "c puro ++", coinvolge abbastanza molte chiamate JNI. Basta chiamare un metodo Java tramite JNI che fa la stessa cosa che vi darà un codice più veloce (una chiamata JNI), e, probabilmente, il codice che è più facile da mantenere.

Per comprendere appieno che cosa si può fare, è davvero necessario esaminare il codice sorgente di Android. Inizia con native_app_glue.c, che è disponibile in NDK, per poi proseguire con l'implementazione del sistema operativo di AActivity, ALooper, AInputQueue ecc Google Code Search è un grande aiuto in questo. : -)

Se è facile da fare in Java, e include molte chiamate, chiamare un metodo attraverso JNI che fa tutto, piuttosto che scrivere tutto il codice in più per farlo con chiamate JNI multipli. Preservare il più del vostro codice esistente C ++ come è ragionevole .

Altri suggerimenti

No, se si sta solo cercando un'applicazione standard. Il Java SDK è più completa rispetto al suo omologo Native adesso così si sarebbe ancora essere fare le cose più difficili per te stesso.

Se non si sta facendo qualcosa che richiede l'NDK (leggi: prestazioni in tempo reale sensibile). Poi attaccare con Java

Se è possibile, il bastone con le applicazioni in stile java fino versioni di Android a supporto delle attività nativi costituiscono una frazione significativa della base installata.

Per le cose che erano difficili da fare prima - in particolare i porti di codice esistente -. Questo sarà probabilmente un grande aiuto

Non è del tutto chiaro ancora che cosa è cambiato rispetto a solo scrivere il proprio sottile involucro java. Ad esempio, c'è ancora una copia del Dalvik VM in giro?

Solo alcuni spunti di riflessione, ma se si dispone di un app su iOS e Android, un po 'di C / C ++ di codice potrebbe essere condivisibile. Ovviamente l'iOS Obj-C e il codice specifica piattaforma non funzionerebbero altrove. (Idem per la roba specifica Android). Ma si potrebbe essere in grado avere qualche codice condiviso di piattaforma neutrale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top