2012-09-25 24 views
9

Antes de hoy uso Eclipse 3.8 con Sequoyah plugin para Android NDK project. Pero hoy decido refrescar Eclipse a la versión de Juno con SDK y NDK.
Estaba muy contento de ver Android Native Tools en la instalación de ADT, que hará el mismo trabajo como Sequoyah, pero con la función de depuración.
Creé un nuevo Android Project para probarlo.
Añadiendo Android Native Support cree una carpeta jni con Android.mk, archivo .cpp, bien lo mismo que Sequayah. Entonces me sale primero sin resolver a jni.h. Recibo un error similar con Sequoyah, por lo que reconstruyo el índice y reinicio Eclipse. Después de reiniciar, no desapareció.
Voy a Trayectorias y símbolos en propiedades C/C++. Pero hay todo lo que se necesita incluir.
(NDK PATH)/plataformas/android-8/arch-brazo/usr/include - hay jni.h, etc. log.h
He probado a añadir dublicate adicional incluye a jni.h, proyecto de limpieza , reiniciar, reconstruir índice, cambiar .ccp a .c, permanece sin resolver. No obtuve errores en el registro de errores, pero sí errores de sintaxis en el editor de las funciones de jni.Android Añadir soporte nativo - jni.h no resuelto, android/log.h etc.

NativeLib.java

package com.aristarhys.glow; 

public class NativeLib 
{ 
private static final String NATIVE_LIB = "glow"; 
static 
{ 
    System.loadLibrary(NATIVE_LIB); 
} 
    private NativeLib(){}; 
    public static native void test(); 
} 

glow.h

#ifndef GLOW_H_ 
#define GLOW_H_ 

#include <jni.h> //unresolved 
//syntax error 
JNIEXPORT void JNICALL Java_com_aristarhys_glow_NativeLib_test(JNIEnv* env, jclass cls); 
#endif /* GLOW_H_ */ 

log.h

#ifndef LOG_H_ 
#define LOG_H_ 

#include <android/log.h> //unresolved 

#define INFO_TAG "[INFO]" 
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, INFO_TAG, __VA_ARGS__) 

#endif /* LOG_H_ */ 

glow.c

#include "glow.h" 
#include "log.h" 

//syntax error 
JNIEXPORT void JNICALL Java_com_aristarhys_glow_NativeLib_test(JNIEnv* env, jclass cls) 
{ 
LOGI("HI"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := glow 
LOCAL_SRC_FILES := glow.c 
LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY) 
+0

Problema conocido de Eclipse. No evita que compile. –

+0

prueba con este mensaje: [Resuelta NDK] [1] [1]: http://stackoverflow.com/questions/11504258/how-to-remove-native-support-from-an -android-project-in-eclipse-because-eclipse/28313132 # 28313132 –

Respuesta

29

he intentado android-ndk-r8b con C:\Android\android-ndk-r8b en mi PATH variable. Proyecto compilado sin error.
Sin embargo eclipse "dice" que Unresolved inclusion: <jni.h>

resuelto:

NDK Project->New->Folder->Advanced->Link to alternate location(Linked Folder) Navegar la ruta (por ejemplo): C:\Android\android-ndk-r8b\platforms\android-8\arch-arm\usr\include

+0

Quiero crear un proyecto JNI. Quiero usar ** CURL (curl/curl.h) ** include que está disponible en Cygwin. Por lo tanto, creé un proyecto combinado de Android y C/C++ ya que esta biblioteca estaba disponible como encabezados de Cygwin. Pero sigo recibiendo ** error fatal: curl/curl.h: no existe ese error de archivo o directorio **. ¿Cual podría ser el problema? ¿Podemos referirnos a bibliotecas externas de Cygwin en el proyecto Android JNI? – MobiDev

+0

mira aquí: http://code.google.com/p/ra-sqlite/source/browse/ra.sqlite/jni/android/raSqlite.mk Espero que te ayude a resolver un problema ('cf_includes: = $ (addprefix -Ijni/android /, $ (cf_includes_local))') –

3

Puede hacerlo seleccionando Propiedades para el proyecto

Propiedades -> C/C++ General -> Preprocesador Incluir ..-> Entradas -> Configuración de Entradas -> CDT Ajuste del usuario Entradas

Agregar -> Incluir Directorio -> ruta del sistema de archivos, e introduzca la ruta de la incluye

ndk/platforms/android-[version]/[arch]/usr/include 
+0

Buena práctica para usar la variable de entorno NDK_ROOT para que la ruta sea así: $ { NDK_ROOT} \ platforms \ android-5 \ arch-arm \ usr \ include También encontré que esto me funciona solo si marqué la casilla "Contiene encabezados del sistema". –

3

A menudo la solución de problemas similares que es, probablemente, ocurre cuando mueve o cambia el nombre de la carpeta de trabajo del proyecto.

  1. No se requieren variables de entorno, solo apunta a la ubicación NDK en Preferencias> Android> NDK.
  2. Mover el proyecto fuera del área de trabajo. Eliminar del próximo proyecto de archivos/carpetas:

.settings
.classpath
.cproject
.project
project.properties

  1. volver a importar su proyecto. Eclipse> Nuevo> Otro> Android> Proyecto Android de Código existente> luego señale la carpeta con su proyecto, deje que Eclipse lo detecte, marque "Copiar proyecto en el espacio de trabajo" y haga clic en Aceptar/Siguiente, lo que sea.
  2. Proyecto limpio.
  3. Haga clic con el botón derecho en Proyecto> Herramientas Android> Agregar soporte nativo
  4. Reconstruya, posiblemente reinicie el área de trabajo.

También este problema resuelto con Eclipse 4.3 anteriormente ignoró el sistema de compilación y los indicadores de compilación definidos por el usuario. Ahora las macros plegables que dependen de estas banderas funcionan bien.

Si es más general: el plugin NDK puede definir correctamente para usted incluye todas las demás cosas necesarias para funcionar bien, pero necesita limpiar su proyecto de basura rota, y la manera más fácil de hacerlo es reimportar el proyecto.

2

Si está utilizando Eclipse Kepler el camino para añadir el NDK incluyen

Properties-> C/C++ General-> Caminos y símbolos.

en mi versión de NDK la ruta de inclusión necesitaba era:

C: \ Archivos de programa (x86) \ Android \ android-sdk \ NDK \ android-NDK-R10 \ plataformas \ android-L \ arco- arm \ usr \ include.

Le preguntará si desea reconstruir. Luego los errores desaparecen.