Android 使用 C (ndk) 从资产文件夹中读取文本文件 [英] Android read text file from asset folder using C (ndk)

查看:31
本文介绍了Android 使用 C (ndk) 从资产文件夹中读取文本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从 android 的资产文件夹中读取文本文件,通过互联网搜索,我发现从 android 2.3 开始有可用的 asset_manager api.因为我只针对平板电脑设备,所以这很有用.但由于我不是 C 语言专家,我无法找到有关如何使用文件描述符读取/写入文件的任何示例.我发现了很多使用 FILE*(文件指针)的例子

I need to read text file from asset folder in android, by searching through internet I found that there is asset_manager api available from android 2.3 onwards. As I am targeting only tablet devices this is useful. But as I am not expert in C language I am not able to find any example on how to read/write files using file descriptor. I found many examples using FILE* (file pointers)

我的目标是从加密的资产文件夹中解密一个js文件使用 C(用于保护代码),因为如果最终用户,js 代码是可见的反编译了我的apk.因为资产文件夹在 zip 文件中,所以可以这样做吗?

My goal is to decrypt a js file from asset folder which is encrypted using C (for securing the code), as js code is visible if end user decompiled my apk. Because asset folder is inside zip file is it possible to do?

推荐答案

这里是我使用asset_manager ndk lib从android assets文件夹中读取文件的代码

Here is the code I used to read file from android assets folder using 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);

在我的 Android.mk 中添加了以下行

Added following line to my Android.mk

# for native asset manager
LOCAL_LDLIBS    += -landroid

不要忘记包含在源文件中

And don't forget the include in source file

#include <android/asset_manager.h>

这篇关于Android 使用 C (ndk) 从资产文件夹中读取文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆