Este é um tutorial sobre como criar um projeto “Hello World” no Android usando o NDK. Ele pressupõe que você está usando o Eclipse-ADT (do Google). O objetivo não é detalhar como funciona o JNI, mas apenas dar um exemplo.
Crie um novo projeto Android no Eclipse-ADT
Crie uma pasta chamada ” jni ” no projeto (no mesmo nível que ” src ” ou ” res “). Esta pasta conterá todos os arquivos C / C ++
Crie ” jni / Android.mk ” com o seguinte conteúdo. Na verdade, é o makefile usado pelo Android para compilar seu código nativo
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloJNI
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)(Opcional, mas necessário, por exemplo, com OpenCV): Crie ” jni / Application.mk ” com o seguinte conteúdo:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := allEm sua atividade (arquivo Java), inclua a biblioteca C ++ que você vai criar
public class MainActivity extends Activity {
static {
System.loadLibrary("helloJNI");
}
[…]Declare um protótipo nativo que será usado para chamar a função C / C ++ correspondente na biblioteca ” helloJNI “, como:
private native void debugMessage();
Na verdade, chame essa função do Java seu código, por exemplo:
@Override
protected void onResume() {
super.onResume();
debugMessage();
}Crie a “cola” JNI entre o código Java e sua equivalência C / C ++:
- Vá para <your_project> / bin / classes
- Execute o seguinte comando: javah -o ../../jni/mainActivity.h com.example.hellojni.MainActivity
Agora você tem um novo arquivo – mainActivity.h – em <your_project> / jni (pode ser necessário atualizar no Eclipse).
Crie <seu projeto> /jni/mainActivity.cpp ( NOTA: os protótipos já são gerados em mainActivity.h por javah_)
#include "mainActivity.h"
#include <android/log.h>
//==============================
// Declarations
//==============================
#define LOG_TAG "mainActivity.cpp"
#define DPRINTF(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define IPRINTF(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define EPRINTF(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
JNIEXPORT void JNICALL JNICALL Java_com_example_hellojni_MainActivity_debugMessage
(JNIEnv *, jobject)
{
DPRINTF( "%sn", __FUNCTION__ );
DPRINTF( "This is a debug message coming from my C++ code!n");
}Adicione o novo arquivo cpp que você criou ao Android.mk:
LOCAL_SRC_FILES := mainActivity.cpp
Android.mk agora se parece com:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloJNI
LOCAL_SRC_FILES := mainActivity.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)Adicione C / C ++ Nature ao seu projeto:
Clique com o botão direito em seu projeto> Ferramentas Android> Adicionar suporte nativo …Execute seu aplicativo