Android使用C(ndk)从资产文件夹中读取文本文件

San*_*nne 10 c encryption android-ndk

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

我的目标是解密资产文件夹中的js文件,该文件使用C加密(用于保护代码),因为如果最终用户反编译我的apk,则js代码可见.因为资产文件夹在zip文件里面是可以的吗?

San*_*nne 33

这是我用来使用asset_manager ndk lib从android资源文件夹中读取文件的代码

    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);
Run Code Online (Sandbox Code Playgroud)

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

# for native asset manager
LOCAL_LDLIBS    += -landroid
Run Code Online (Sandbox Code Playgroud)

并且不要忘记源文件中的include

#include <android/asset_manager.h>
Run Code Online (Sandbox Code Playgroud)