tutorial studio ndk español ejecutar cppdroid codigo c encryption android-ndk

studio - Android lee el archivo de texto de la carpeta de activos usando C(ndk)



cppdroid tutorial español (3)

Necesito leer el archivo de texto de la carpeta de activos en Android, al buscar a través de Internet encontré que hay api asset_Manager disponible desde android 2.3 en adelante. Como me estoy enfocando solo en tabletas, esto es útil. Pero como no soy experto en lenguaje C, no puedo encontrar ningún ejemplo sobre cómo leer / escribir archivos usando el descriptor de archivo. Encontré muchos ejemplos usando FILE * (punteros de archivo)

Mi objetivo es descifrar un archivo js de la carpeta de activos que se cifra con C (para proteger el código), ya que el código js está visible si el usuario final descompila mi aplicación. Porque la carpeta de activos está dentro de un archivo zip ¿es posible hacerlo?


Es bastante similar a las funciones regulares fread / fseek. Aquí está la función de lectura declaraton:

ssize_t read(int fd, void *buf, size_t count);

Lee del descriptor de archivo fd en bytes de count búfer buf . Si piensas en fread, entonces en lugar de:

fread(buf, count, size, file);

Llamarás a:

read(fd, buf, count*size);

Y eso es. Es tan simple

La búsqueda también es similar. Simplemente busque la declaración de la función y lea los nombres / descripción del argumento. Será obvio.


Prácticamente las descripciones FILE * y ''int'' son equivalentes y fread / fwrite / fopen / fclose son las contrapartidas de las funciones abrir / cerrar / leer / escribir (las funciones no son equivalentes, sin embargo, las últimas no son de bloqueo).

Para obtener ''int'' de ''FILE *'' puede usar

int fileno(FILE* f);

en el encabezado y para hacer el inverso puede usar fdopen ()

FILE *fdopen(int fd, const char *mode);

Entonces, reemplace todo usando el ARCHIVO * a int o simplemente tome una de las muestras e inserte este código de conversión antes de leer el archivo.


Aquí está el código que solía leer el archivo de la carpeta de activos de Android usando asset_manager ndk lib

AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); AAsset* asset = AAssetManager_open(mgr, (const char *) js, AASSET_MODE_UNKNOWN); if (NULL == asset) { __android_log_print(ANDROID_LOG_ERROR, NF_LOG_TAG, "_ASSET_NOT_FOUND_"); return JNI_FALSE; } long size = AAsset_getLength(asset); char* buffer = (char*) malloc (sizeof(char)*size); AAsset_read (asset,buffer,size); __android_log_print(ANDROID_LOG_ERROR, NF_LOG_TAG, buffer); AAsset_close(asset);

Se agregó la siguiente línea a mi Android.mk

# for native asset manager LOCAL_LDLIBS += -landroid

Y no te olvides de incluir en el archivo fuente

#include <android/asset_manager.h>