2011-06-08 6 views
10

¿Hay alguna manera de hacer que el directorio de la aplicación guarde datos privados en un archivo para mi aplicación directamente desde el NDK? En otras palabras, necesito un equivalente de la función Java mContext.getFilesDir().GetFilesDir() de NDK?

he notado que otros mensajes como éste: Android NDK Write File

mencionar lo que es el 'habitual' lugar para este directorio para ser. Pero para que sea correcto en todas las versiones y todos los dispositivos, seguramente se necesita una llamada al sistema equivalente.

Actualmente estoy usando NativeActivity y no tengo Java.

Gracias por su tiempo.

Respuesta

5

Si está utilizando NativeActivity entonces tienen acceso a código nativo a una instancia ANativeActivity (ver/plataformas/android-9/arch-brazo/usr/include/android/native_activity.h) que tiene miembros internalDataPath y externalDataPath.

+1

Gracias, esto es exactamente lo que estaba buscando. Desafortunadamente, tanto internalDataPath como externalDataPath son NULL durante el tiempo de ejecución ...? ¿Alguna idea? Esto es cuando se ejecuta en un dispositivo de Google nexus S. – DJPJ

+1

De acuerdo con este enlace: http://groups.google.com/group/android-ndk/browse_thread/thread/e250fc392fb0e145?pli=1 es un error conocido con Android 2.3.x y se corrigió en 3.0. ¡Genial! Así que tendré que buscar la implementación de jni solo para esto ... – DJPJ

+0

Bajé por la misma ruta y, después de observar la extensión de las versiones instaladas del sistema operativo del dispositivo, me di cuenta de que simplemente co no ignore v2.1. Así que NativeActivity no se convirtió en un problema. Como resultado, implementar una versión completa de JNI es bastante sencillo, y tiene la ventaja adicional de que cada vez que encuentras algo que NativeActivity ha omitido, ya estás configurado para agregarlo. – jimkberry

5

que tienen clase de ayuda personalizada para acceder a diversos caminos, para el directorio de datos hago esto:

  1. Leer /proc/self/cmdline o /proc/MyPID/cmdline
  2. Anexar los resultados de # 1 a/datos/datos/

Ejemplo de resultados:
/data/data/com.yourcompany.yourproduct/

+0

Para aquellos que se preguntan cómo obtener el 'MyPID', simplemente pueden sustituirlo por" self ", es decir, leer'/proc/self/cmdline' y eso les ahorrará un poco de molestia extra – MultiColourPixel

+0

@MultiColourPixel Buen punto , He actualizado la respuesta para mostrar ambos. – NuSkooler