android jni assets文件路径,android JNI层读取assets目录文件

本文介绍了如何将assets目录下的加密文件通过Java代码实现在Android设备的/data/data/目录下,涉及AAssetManager、AAsset_open和文件操作,适用于对app加固技术感兴趣的开发者。需注意设备需root并引用特定头文件和库。
摘要由CSDN通过智能技术生成

最近在做app加固方面的技术,遇到了一个问题,就是需要把assets目录下加密的文件写到目标app的/data/data/目录,研究了一下发现是可以实现的,下面直接上关键代码:

注:1:用的时候一定要记住修改方法名Java_com_cn_yu_Util

2:用的时候记得把包名和文件名--com.cn.yu/abc.so修改成自己的包名和文件名

3:设备需root

4:需要引用两个头文件和在Android.mk文件中引用相关的库文件。

#include

#include

LOCAL_LDLIBS += -landroid

void Java_com_hsbank_money_NativeUtil_nativeReadFromAssets(JNIEnv* env,jclass tis, jobject assetManager,jstring filename) {    LOGI("ReadAssets");    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);    if(mgr==NULL)    {       LOGI(" %s","AAssetManager==NULL");       return ;    }     /*获取文件名并打开*/    jboolean iscopy;    const char *mfile = (char *)env->GetStringUTFChars(filename,&iscopy);    AAsset* asset = AAssetManager_open(mgr, mfile,AASSET_MODE_UNKNOWN);    if(asset==NULL)    {       LOGI(" %s","asset==NULL");       return ;    }    /*获取文件大小*/    off_t bufferSize = AAsset_getLength(asset);    char *buffer=(char *)malloc(bufferSize+1);   // buffer[bufferSize]=0;    int numBytesRead = AAsset_read(asset, buffer, bufferSize);    LOGI("file size : %d\n",numBytesRead);    FILE * outfile = fopen("/data/data/com.hsbank.money/cache/trsm_so.so","wb+");    LOGI("open file :%s\n", strerror(errno));    fwrite(buffer,numBytesRead,1,outfile);    free(buffer);    fclose(outfile);     /*关闭文件*/    AAsset_close(asset); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值