Pergunta

Eu estou especificamente interessada em como portátil é entre vários telefones. Nós temos uma aplicação com algum código pesado computação gostaríamos de compartilhar entre Android e iPhone. Se pudéssemos escrever em C, teríamos uma única base de código, mas se o NDK suporta apenas um subconjunto dos processadores que fabricantes de telefone estão criando, ou se temos que recompilar para cada processador, isso não é uma solução viável .

Obrigado por todas as experiências com ele.

Foi útil?

Solução

Sobre o assunto de se toda Android (versão 1.5+) telefones apoiará a saída do NDK atual:

Tudo o que posso dizer é que não há nada na documentação sugerir o contrário (a não ser, talvez, se você ler uma implicação em " esta versão suporta o conjunto de instruções ARMv5TE"), e eu segui notícias Android bem de perto e não ter ouvido falar de todos os telefones Android a ser lançado usando uma arquitetura não-ARM (embora algumas pessoas hackeado juntos uma compilação para EeePC ). Olhando para o Android fonte , há vestígios de apenas uma outra plataforma, x86. Quanto aos planos para o futuro do Google e do OHA ? Você teria que perguntar a eles. Eles anunciaram recentemente alguns desenvolvedor dias , mas provavelmente, todos os pontos são ido agora (o primeiro é hoje). Registei-me muito cedo para o dia de Londres (17) por isso, se eu entrar Vou tentar obter uma resposta lá (eu sou interessado em saber definitivamente também).

Outras dicas

Eu não estou muito familiarizado w desenvolvimento / Iphone, mas se você olhar para o android ndk página , na seção de ferramentas de desenvolvimento, ele lista os cabeçalhos garantidos disponíveis na plataforma, então se o iphone suportar estas funções, ou você pode criar interfaces entre o seu código e as bibliotecas nativas em ambas as plataformas que Eu não vejo por que ele não iria funcionar.

O NDK é basicamente uma implementação do Java Native Interface para Android. Dá-lhe GCC 4.2.1 (o conjunto completo de ferramentas, tanto quanto eu posso dizer) com arm-eabi alvo. Se o código resultante seria executado em um iPhone ou outros dispositivos que não conheço; Eu nunca codificado para o iPhone. Aqui está o que file tem a dizer sobre algo que eu construído com o NDK então talvez você pode comparar:

libpuzzles.so: ELF 32-bit LSB objeto compartilhado, ARM, a versão 1 (SYSV), ligado de forma dinâmica, não descascada

(. strip está incluído, eu só não executá-lo aqui) Aqui está gcc -v ou g++ -v (eles são idênticos):

Usando o built-in especificações.

alvo: arm-EABI

Configurado com: /opt/digit/android/git/android-ndk/out/arm-eabi-4.2.1/toolchain/src/gcc-4.2.1/configure --prefix = / opt / dígito / android /git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --target = armar-EABI --host = x86_64-unknown-linux-gnu --build = x86_64-unknown-linux gnu --enable-línguas = C, C ++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc __- v3 --disable-sjlj-exceções - -disable-compartilhada --with-float = macio --with-fpu = vfp --with-arch = ARMv5TE --enable-target-optspace --with-abi = AAPCS --disable-nls --prefix = / opt /digit/android/git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --with-sysroot = / opt / dígito / android / git / android-ndk / build / plataformas / queque / arch-braço --program-transform-name = s, ^, braço-EABI -,

modelo Tópico: single

gcc versão 4.2.1

Assumindo que o código será executado, gestão deste ao nível API é uma questão separada e interessante. Android só vai deixar você chamar código nativo por meio da API JNI. Eu não estou familiarizado com a abordagem iPhone, mas eu sei que não é Java, então eu acho que é mais parecido com a ligação dinâmica padrão ou dlopen()? O que quero dizer é, você teria que quer fazer suas funções JNI (por exemplo Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) lidar com sendo chamado de algo que não é uma JVM (ter seu código falso iPhone um JNI_Env por exemplo?) Ou, muito menos horrivelmente, começar, fornecendo uma API nativa adequado para iPhone e, em seguida, incluir um invólucro JNI, que plataformas não-JNI pode ignorar com segurança, que I se reunir é uma abordagem comum para este tipo de coisa. Espero que ajude.

Eu tive uma experiência agradável de escrever cross-pão JNI / C aplicativo com o processamento framebuffer em NDK e renderização em Java.

Pitty, seu uma solução apenas de android

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top