Em alguns casos quando é necessário um controle fino de alocação e desalocação de memória, por exemplo, em trechos com estruturas de dados específicas e onde o desempenho através do controle do uso de memória é essencial, o Android oferece o mesmo recurso que o Java SE (JNI) para chamadas de código nativo na plataforma. Esse tipo de recurso deve ser utilizado com cautela, pois aumenta a complexidade do projeto e nem sempre aumenta o desempenho da aplicação. Caso você saiba o que está fazendo e as implicações do uso da linguagem C/C++ com o uso de ponteiros e alocação e desalocação de memória você poderá utilizar o Android NDK para isso.
Baixe o Android NDK no site: http://developer.android.com/sdk/ndk/index.html. Descompacte em uma pasta e coloque-o no seu PATH modificando o arquivo ~/.bashrc
export PATH=${PATH}:$ANDROID_NDK
Substitua $ANDROID_NDK pelo diretório onde você descompactou o NDK.
Para configurar no Eclipse com o plugin da MOTOROLA (instruções de instalação nesse post). Clique em MOTODEV, Download Components..., Native Support e clique no checkbox "Enable native support". Informe o caminho do JDK. Aguarde a instalação e clique OK. Da próxima vez que acessar você deverá ter a seguinte tela.
Vá em Window, Preferences, Android, Native Development e informe a localização do NDK e clique OK.
Para adicionar suporte à programação nativa no seu projeto, é só ir clicar com o botão direito no projeto, Android Tools e Add Native Support... Informe os dados do projeto e clique em Finish.
Ele poderá pedir pra você trocar para a perspectiva Android Native para facilitar o desenvolvimento. Para testar, utilizei o exemplo que vem na pasta samples do NDK, que consiste em exibir uma String via JNI. Podemos programar em C/C++ normalmente, sendo apenas necessário utilizar o include jni.h para utilizar as estruturas necessárias para a comunicação com o Java. O código em C/C++ é o seguinte.
#include <string.h> #include <jni.h> jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI !"); }
E a chamada no Activity em Java
package com.example.hellojni; import android.app.Activity; import android.widget.TextView; import android.os.Bundle; public class HelloJni extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); } public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); } }
Na linha 21 a biblioteca nativa é carregada. Na linha 18 declaramos o método native e na linha 14 invocamos ele. Verifique também o nome da função em C/C++ com o pacote da classe Java. Agora é só começar a codificar.
Use com moderação :).
Amigo, minha dúvida é a seguinte, eu estudei C/C++ e queria criar um aplicativo simples e que usasse somente o microfone , quero cria-lo para me celular android, eu posso programa todo o aplicativo em C++ e que seja para o Android ?. Obrigado
tenho a mesma duvida!!! e tb quero usar o mic....