Použij Javu proboha, NDK se používá jen když de o každou kapku výkonu (některé hry obvykle), jinak nemá smysl.
NDK se používá také pro aplikace, které mají být multiplatformní. Javu na iOSu či Windows Phone nespustíte. Existuje sice GCJ, ale je s ním výrazně víc práce, než s použitím NDK v Androidu.
To je přesně názor těch kteří neumí ani jedno pořádně, NELZE přepsat z C do Javy ani obráceně, pokud se má daný jazyk použít správně, tak se musí s každým pracovat jinak.
To záleží, jak v tom C píšeš. Z Javy do C to jde celkem snadno, třeba GTK funguje v podstatě stejně (ono tam není moc co vymýšlet). Z C do Javy záleží na způsobu psaní v C, třeba linuxové ovladače (ne celý kernel, ten používá hodně divoký kód, ale API pro ovladače) nebo ty aplikace pro GTK (pokud nedělají nějakou složitou ukazatelovou aritmetiku) by se daly přepsat docela snadno.
Java, manipuluješ s objekty, z C-pohledu s komplexními datovými struktůramy o kterých nesmíš mít ponětí o jejich vnitřní struktůře. To že k datům je přibaleny i kód, (metody tříd), to s tím právě souvisí.
Java má velmi jasnou specifikaci toho, jak uvnitř funguje, a pokud pracuješ s JNI, tak pracuješ právě s tímhle formátem.
C, manipuluješ se z Java-pohledu velice primitivními datovými strukturami, o jejichž vnitřní reprezentaci máš neustále povědomí.
Obzvlášť když se často používají pointery na forward-declarované struktury jako třeba
FILE či
pthread_mutex_t Tento rozdíl implikuje návyky jak myslet při programování v daném jazyce. Tak že ten kdo je rozepsaný v C nikdy nemůže efektivně psát v javě a obráceně a ten kdo umí oboje, tak určitě neefektivně !
To, že nedokážeš efektivně psát ve více jazycích ty, ještě neznamená, že by to nezvládl někdo jiný
Programuju low- i high-level kód pro Android, takže denně dělám v Javě i C++, a nemám nějaké problémy psát v každém jinak. Občas mě štve, že některé skvělé vlastnosti z jednoho dost chybí ve druhém (hlavně anotační preprocersory a šablony), ale to je tak všechno. Mimochodem pokud člověk dělá hodně do hloubky s C++, tak se stejně musí naučit dobře programovat imperativně i funkcionálně (šablony jsou čistě funkcionální), což je mnohem větší rozdíl než mezi C a Javou.