2010-11-07 12 views
7

Ho bisogno di alcune operazioni che devono essere eseguite su lunghi lunghi [] s per essere molto veloci. L'unica opzione che posso vedere è utilizzare l'NDK di Android. Qualcuno può dare un riassunto su cosa utilizza l'NDK per la mia app in termini di quali dispositivi possono utilizzare l'app e quali sono le implicazioni per il mantenimento della mia app?Quali sono le implicazioni sulla portabilità dell'utilizzo di NDK?

Ho visto che è necessario specificare l'architettura per la quale si desidera compilare il codice C, come ARM e Intel. Cosa succede quando appaiono nuove architetture per Android? Dovrò aggiornare la mia app ogni volta che viene visualizzata una nuova architettura?

+0

Sì, è necessario un eseguibile per ogni architettura.Probabilmente puoi semplicemente includerli tutti e caricare quelli che ti servono, ma non ho mai usato l'NDK. Cosa stai facendo esattamente per i lunghi? Sei sicuro che questo è un collo di bottiglia nel tuo codice? Lo hai implementato e profilato? – Falmarri

+0

La lunga operazione comporta il mascheramento dei primi 8 bit, l'esecuzione di alcune aggiunte e moltiplicazioni, il ripristino dei bit e il completamento dei bit rimanenti. È terribilmente lento in Java (e..g 1s da eseguire quando voglio circa 0,1 s) e sembra il candidato ideale per NDK. Il codice è semplice e funzionerà su tutti gli arch. – RichardNewton

risposta

7

Qualcuno può dare una sintesi su ciò utilizzando l'NDK fa per la mia applicazione in termini di quali dispositivi possono utilizzare l'applicazione

Solo i dispositivi in ​​esecuzione su una CPU per il quale si dispone di un NDK .so saranno in grado di eseguire la tua app.

e quali sono le implicazioni per il mantenimento della mia app?

Il test su più architetture CPU può richiedere hardware per ogni architettura. Dico "può" perché ...

Cosa succede quando vengono visualizzate nuove architetture per Android?

... non ne abbiamo idea. Oltre all'aggiunta del supporto ARM7, NDK non ha cambiato i suoi obiettivi.

In questo momento, ci sono due principali piattaforme non-ARM per Android che mi viene in mente:

  • Intel Atom, di essere utilizzati dai dispositivi di Google TV. Al momento della stesura di questo, NDK non supporta questo. Tuttavia, non puoi ancora spedire app per Google TV. Pertanto, è possibile che NDK venga aggiornato non appena arriviamo a scrivere app di Google TV.
  • MIPS. Al momento della stesura di questo, NDK non supporta questo. Non ho idea di quali potrebbero essere i piani in quest'area.

È concepibile che gli emulatori sembrino emulare tali CPU. Dopo tutto, l'emulatore Android esistente emula ARM5. Tuttavia, a meno che e fino a quando ciò non accada, avrai bisogno di hardware di test per ogni architettura che intendi supportare.

Devo aggiornare la mia app ogni volta che viene visualizzata una nuova architettura?

Solo se si desidera supportare la nuova architettura. Finché non ci sarà una massa critica di dispositivi che possono accedere alla tua app, qualsiasi nuova architettura non sarà molto importante. La "massa critica" potrebbe provenire dalle vendite generali di dispositivi, oppure potrebbe essere perché si ottiene un accordo OEM per far sì che l'app si impacchetta sul dispositivo di qualcuno.

Il codice è semplice e funzionerà su tutti gli arch.

Guarda la tua endianità.

+0

Fantastico, grazie per il tuo post. L'ultima cosa, se qualcuno dice, ha un nuovo telefono basato su Intel Atom e la mia app non ha un .so per quella CPU, la mia app sarà nascosta da loro sul mercato? – RichardNewton

+1

@RichardNewton: lo spero. Suppongo che potresti creare un'app solo per ARM7 e vedere se i dispositivi ARM5 lo vedono sul mercato, per testare la teoria prima che i dispositivi compatibili con il mercato basati su Atom vengano visualizzati. Tuttavia, dal momento che ci sono così poche architetture supportate oggi, è tutto un po 'nebuloso al momento. – CommonsWare

+0

Lo prendo Google avrà qualche strategia per gestire tutto questo però. Non sono riuscito a trovare alcuna statistica, ma l'NDK viene utilizzato dagli sviluppatori e Google ne incoraggia l'utilizzo in modo che non sembri rischioso creare un'app che utilizza NDK per quanto posso vedere. – RichardNewton

Problemi correlati