Android Ndk: 如何从native层直接获取 assets文件夹下的文件
来源:互联网 发布:蜜蜡优化是什么意思 编辑:程序博客网 时间:2024/06/01 22:47
这篇博文写的特别好 http://androgeek.info/?p=275
从Native层 直接读取 Android 工程目录 下 Asserts目录下的文件
具体思路如下:
Android工程 会被打包成一个 apk文件,具体存储在 data/app下
apk文件是一种 类似于 zip的压缩文件,因此,我们需要 用unzip的开源库,调用该库的 api来 读取 apk文件,将apk解压,从而找到 Asserts目录。
具体做法如下:
首先,下载unzip开源库: http://pan.baidu.com/s/1mg8MfZq
其次,建立jni工程, 默认已经会了
再次,将下载下的unzip文件拷贝到jni目录下:
Android.mk 添加如下语句:
1 LOCAL_STATIC_LIBRARIES : = libzip
2 LOCAL_LDLIBS += -lz
3 include $(call all-makefiles-under, $(LOCAL_PATH))
第一句表示 下载下来的 libzip(unzip开源库)文件夹 下的 源文件 最终会根据 其 Android.mk规定语句编译成 一个 静态库,将这个静态库添加进来
第二句 表示添加 系统的 压缩库, 涉及到文件压缩,图片压缩 一般都会添加它
第三句 表示执行完当前目录 源文件编译后,会继续跟进该目录下的子目录,编译。
最后, 在jni层写相关读取,代码的语句:
相关 语句如下:
//Read APK Path and unzip the apk zip *ApkArchive = zip_open(path, 0, NULL); if (ApkArchive == NULL) { return ; } //Just for debug, print APK contents int numFiles = zip_get_num_files(ApkArchive); LOG_INFO( "ParseText" , " num to parse: %d" , numFiles); for (int i = 0; i< numFiles; i++) { const char *name = zip_get_name(ApkArchive, i, 0); LOG_INFO("ParseText", "string is assigned by char*");*/ if (name == NULL) { return ; } LOG_INFO( "ParseText" , "File: %i: %s\n" , i, name); }
注意 :
以上 zip_open读取的path ,是从 java层传下来的 apk安装在android机上的路径名,有了这个路径名我们才能解压
final ApplicationInfo applicationInfo = this.getApplicationInfo();start(applicationInfo.sourceDir);
applicationInfo.sourceDir 即为 apk的安装路径
读取的结果如下:
之后 就能继续 对 assets下面的 文件进行读取 操作了。
0 0
- Android Ndk: 如何从native层直接获取 assets文件夹下的文件
- 如何利用android访问assets下的文件或文件夹
- Android读取Assets文件夹下的文件
- android 获取 assets 下的文件
- Android开发中获取assets文件夹下Xml文件的问题。
- Android开发中获取assets文件夹下Xml文件的问题
- Android获取assets文件夹下的json数据,并解析!
- Android assets文件夹下资源获取
- Android: 如何打开assets or raw文件夹下的数据库文件
- Android 中 Assets目录下 文件或文件夹的复制
- Android Studio中读取assets文件夹下的文件
- 【Android】判断assets文件夹下的某个文件是否存在
- android 读取assets文件夹下的文件资源
- android studio 读取assets文件夹下的文件
- Android获取assets文件夹的路径
- 获取Android的assets目录下的文件
- android assets文件夹下的数据库应用
- 获取Assets文件夹下内容
- 053-14 You have a very large table that your users access frequently. Which of the following advisor
- Redis 起步
- 错误日志记录
- centos 安装 protobuf
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- Android Ndk: 如何从native层直接获取 assets文件夹下的文件
- 定制UIButton中文字和图片的位置
- Ⅰ.10 如何创建测试失败和出错时的自动化截屏
- linux centos目录结构(一)
- python 收email实例 -解决标题和正文的中文显示
- 使用 VMware Player 创建适合封装的虚拟机(转自IT天空Skyfree)
- lambda高级进阶--返回函数
- activity生命周期的onPause和onStop
- Excel文件的上传下载(一)