android JNI层读取assets目录文件
2015-03-18 18:17
375 查看
最近在做app加固方面的技术,遇到了一个问题,就是需要把assets目录下加密的文件写到目标app的/data/data/目录,研究了一下发现是可以实现的,下面直接上关键代码:
注:1:用的时候一定要记住修改方法名Java_com_cn_yu_Util
2:用的时候记得把包名和文件名--com.cn.yu/abc.so修改成自己的包名和文件名
3:设备需root
4:需要引用两个头文件和在Android.mk文件中引用相关的库文件。
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
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);
}
注:1:用的时候一定要记住修改方法名Java_com_cn_yu_Util
2:用的时候记得把包名和文件名--com.cn.yu/abc.so修改成自己的包名和文件名
3:设备需root
4:需要引用两个头文件和在Android.mk文件中引用相关的库文件。
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
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);
}
相关文章推荐
- Android 读取 assets目录下的文件
- Android开发笔记(二十五)assets目录下的文件读取
- Android读取assets目录下文件数据内容
- Android中assets目录和raw目录的区别及其中properties资源文件的读取
- Android读取assets目录下文件数据内容
- Android从assets目录下读取文件相关
- Android读取assets目录下文件数据内容
- Android中读取assets目录下的文件详细介绍
- Android:读取assets目录下文件(一)
- Android 读取Assets资源文件或目录,并拷贝到其他目录下
- Android 读取assets目录下的文件
- android中需要读取assets目录下a.txt文件并进行解析
- android 读取assets目录中的配置文件信息
- Android中读取assets目录下的文件详细介绍
- QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)
- Android 读取assets目录下的db文件
- Android读取assets目录下所有文件
- Android:读取assets目录下文件(二)
- 读取android项目assets目录下的txt文件.
- Android开发 读取assets目录下的txt文件