NDK包含的API函数和支持的c语言pow函数?

君,已阅读到文档的结尾了呢~~
基于tms320dm642的嵌入式视频处理系统设计,arm9嵌入式系统设计,嵌入式系统设计师,嵌入式系统设计,嵌入式系统,嵌入式操作系统,嵌入式系统开发技术,什么是嵌入式系统,嵌入式系统开发,嵌入式系统的特点
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于tms320dm642的嵌入式视频处理系统设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口NDK_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢当前位置: >>>
android常见问题之jni读取assets资源文件
assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取的。这里介绍下怎么在jni内使用 ndk自带api的接口函数读取assets资源文件,和libzip库函数的使用,可以用来读创建修改压缩文档,这里也是以读取apk安装包内的资源
assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取的。这里介绍下怎么在jni内使用 ndk自带api的接口函数读取assets资源文件,和libzip库函数的使用,可以用来读创建修改压缩文档,这里也是以读取apk安装包内的资源文 件为例。
1 用ndk自带的接口函数读apk包
从2.3开始提供这些接口函数,具体看头文件assert.h
android/asset_manager.h
android/asset_manager_jni.h,可以参考ndk自带例子中samples/native-audio/
jni/native-audio-jni.c。
&&&&&&&&void&&Java_com_fontlose_ReadAssets_readFromAssets(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&&&&&const&char&*mfile&=&(*env)-&GetStringUTFChars(env,&filename,&&iscopy);&&&&AAsset*&asset&=&AAssetManager_open(mgr,&mfile,AASSET_MODE_UNKNOWN);&&&&(*env)-&ReleaseStringUTFChars(env,&filename,&mfile);&&&&if(asset==NULL)&&&&{&&&&&&&LOGI(&&%s&,&asset==NULL&);&&&&&&&return&;&&&&}&&&&&&&&off_t&bufferSize&=&AAsset_getLength(asset);&&&&LOGI(&file&size&&&&&&&&&:&%d\n&,bufferSize);&&&&char&*buffer=(char&*)malloc(bufferSize+1);&&&&buffer[bufferSize]=0;&&&&int&numBytesRead&=&AAsset_read(asset,&buffer,&bufferSize);&&&&LOGI(&:&%s&,buffer);&&&&free(buffer);&&&&&&&&&AAsset_close(asset);&}&
在应用程序内使用定义和使用如下
public&native&void&&readFromAssets(AssetManager&ass,String&filename);&&
readFromAssets(getAssets(),&log.txt&);
logcat测试结果
12-15 15:27:33.290: INFO/ReadAssets(3570): ReadAssets
12-15 15:27:33.290: INFO/ReadAssets(3570): file size&&&&&&&& : 138
12-15 15:27:33.290: INFO/ReadAssets(3570): : 。。。。。。。。。。。。。。。。
12-15 15:27:33.290: INFO/ReadAssets(3570): 这个例子从jni读取assets内文件
12-15 15:27:33.290: INFO/ReadAssets(3570): 。。。。。。。。。。。。。。。。
2 使用libzip库读apk包
&&&& libzip 使用 C 库来 读创建修改压缩文档,关于libzip在andorid的移植可以参考老外做的这个工程,已在NDK下可以编译了,修改下编译生成libzip.so,利用libzip.so和zip.h建立工程,使用libzip还可以读取apk包内其他压缩文件如Manifest.xml布局xml等。
&&&&&&&&void&&Java_com_fontlose_ReadAssets_readFromAssetsLibzip(JNIEnv*&env,jclass&tis,jstring&assetpath,jstring&filename)&{&&&&LOGI(&ReadAssets&);&&&&int&i=0;&&&&jboolean&&&&&const&char&*mpath&=&(*env)-&GetStringUTFChars(env,&assetpath,&&iscopy);&&&&struct&zip*&apkArchive=zip_open(mpath,&0,&NULL);;&&&&(*env)-&ReleaseStringUTFChars(env,&filename,&mpath);&&&&&struct&zip_stat&&&&&zip_stat_init(&fstat);&&&&&int&numFiles&=&zip_get_num_files(apkArchive);&&&&LOGI(&File&numFiles&%i&\n&,numFiles);&&&&for&(i=0;&i&numF&i++)&{&&&&&&const&char*&name&=&zip_get_name(apkArchive,&i,&0);&&&&&&&&&&&if&(name&==&NULL)&{&&&&&&&LOGE(&Error&reading&zip&file&name&at&index&%i&:&%s&,&zip_strerror(apkArchive));&&&&&&&return;&&&&&}&&&&&&&&&zip_stat(apkArchive,name,0,&fstat);&&&&&LOGI(&File&%i:%s&Size1:&%d&Size2:&%d&,&i,fstat.name,fstat.size&,p_size)&&;&&&&}&&&&&const&char&*fname&=&(*env)-&GetStringUTFChars(env,&filename,&&iscopy);&&&&struct&zip_file*&file&=&zip_fopen(apkArchive,&fname,&0);&&&&&&if&(!file)&{&&&&&&LOGE(&Error&opening&%s&from&APK&,&fname);&&&&&&return;&&&&&}&&&&&zip_stat(apkArchive,fname,0,&fstat);&&&&(*env)-&ReleaseStringUTFChars(env,&filename,&fname);&&&&char&*buffer=(char&*)malloc(fstat.size+1);&&&&buffer[fstat.size]=0;&&&&int&numBytesRead&=&&zip_fread(file,&buffer,fstat.size);;&&&&LOGI(&:&%s\n&,buffer);&&&&free(buffer);&&&&zip_fclose(file);&&&&zip_close(apkArchive);&}&
在应用程序内使用定义和使用如下
public&native&void&&readFromAssetsLibzip(String&apkpath,String&filename);&
readFromAssetsLibzip(getPackageResourcePath(),&assets/log.txt&);
logcat测试结果
12-15 15:28:03.430: INFO/ReadAssets(3570): ReadAssets
12-15 15:28:03.440: INFO/ReadAssets(3570): File numFiles 14
12-15 15:28:03.440: INFO/ReadAssets(3570): File 0:assets/log 2.txt Size1: 138 Size2: 55
12-15 15:28:03.440: INFO/ReadAssets(3570): File 1:assets/log.txt Size1: 138 Size2: 55
12-15 15:28:03.440: INFO/ReadAssets(3570): File 2:res/layout/main.xml Size1: 956 Size2: 337
12-15 15:28:03.440: INFO/ReadAssets(3570): File 3:AndroidManifest.xml Size1: 1348 Size2: 531
12-15 15:28:03.440: INFO/ReadAssets(3570): File 4:resources.arsc Size1: 1480 Size2: 1480
12-15 15:28:03.440: INFO/ReadAssets(3570): File 5:res/drawable-hdpi/icon.png Size1: 3966 Size2: 3966
12-15 15:28:03.440: INFO/ReadAssets(3570): File 6:res/drawable-ldpi/icon.png Size1: 1537 Size2: 1537
12-15 15:28:03.440: INFO/ReadAssets(3570): File 7:res/drawable-mdpi/icon.png Size1: 2200 Size2: 2200
12-15 15:28:03.440: INFO/ReadAssets(3570): File 8:classes.dex Size1: 3468 Size2: 1680
12-15 15:28:03.440: INFO/ReadAssets(3570): File 9:lib/armeabi/libzip.so Size1: 217246 Size2: 46140
12-15 15:28:03.440: INFO/ReadAssets(3570): File 10:lib/armeabi/libreadres.so Size1: 3820 Size2: 1779
12-15 15:28:03.440: INFO/ReadAssets(3570): File 11:META-INF/MANIFEST.MF Size1: 852 Size2: 443
12-15 15:28:03.440: INFO/ReadAssets(3570): File 12:META-INF/CERT.SF Size1: 905 Size2: 487
12-15 15:28:03.440: INFO/ReadAssets(3570): File 13:META-INF/CERT.RSA Size1: 776 Size2: 606
12-15 15:28:03.440: INFO/ReadAssets(3570): : 。。。。。。。。。。。。。。。。
12-15 15:28:03.440: INFO/ReadAssets(3570): 这个例子从jni读取assets内文件
12-15 15:28:03.440: INFO/ReadAssets(3570): 。。。。。。。。。。。。。。。。
上面例子使用android.mk如下
LOCAL_PATH&:=&$(call&my-dir)&
include&$(CLEAR_VARS)&
LOCAL_MODULE&&&&:=&readres&
LOCAL_SRC_FILES&:=&readres.c&&
LOCAL_C_INCLUDES+=&/opt/android-ndk-r5/platforms/android-9/arch-arm/usr/include&
LOCAL_LDLIBS&&&&+=&-L/opt/android-ndk-r5/platforms/android-9/arch-arm/usr/lib/&-llog&
LOCAL_LDLIBS&&&&+=&-landroid&
LOCAL_LDLIBS&&&&+=&-lz&&
LOCAL_LDLIBS&&&&+=&-L$(LOCAL_PATH)&-lzip&
include&$(BUILD_SHARED_LIBRARY)&
log.txt内容如下
。。。。。。。。。。。。。。。。
这个例子从jni读取assets内文件
。。。。。。。。。。。。。。。。
jni工程和测试工程源码我已上传到我的资源 有兴趣的童鞋可以下来看下
(责任编辑:落鹤生)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 []
本文出处:CSDN博客 作者:fontlose
------分隔线----------------------------
将本文分享到微信
Last time I looked at the processes involved with initialising the Android Java f...
用户触摸屏幕产生一个触摸消息,系统底层将该消息转发给Vie...
编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护...
很早之前研究了android下的硬解码后,由于涉及到高分辨率的比如...
在ndk的demo程序hello-jni修改 在assets目录中添加文件log.txt,里面随便...
因为相关的omx spec还没有仔细阅读过,所以在这里只是对这个文...

我要回帖

更多关于 c语言函数 的文章

 

随机推荐