![【黑马程序员】卸载app同时删除自定义缓存目录_第1页](http://file4.renrendoc.com/view/e4d3a770baa803fb26ce56288debb1a5/e4d3a770baa803fb26ce56288debb1a51.gif)
![【黑马程序员】卸载app同时删除自定义缓存目录_第2页](http://file4.renrendoc.com/view/e4d3a770baa803fb26ce56288debb1a5/e4d3a770baa803fb26ce56288debb1a52.gif)
![【黑马程序员】卸载app同时删除自定义缓存目录_第3页](http://file4.renrendoc.com/view/e4d3a770baa803fb26ce56288debb1a5/e4d3a770baa803fb26ce56288debb1a53.gif)
![【黑马程序员】卸载app同时删除自定义缓存目录_第4页](http://file4.renrendoc.com/view/e4d3a770baa803fb26ce56288debb1a5/e4d3a770baa803fb26ce56288debb1a54.gif)
![【黑马程序员】卸载app同时删除自定义缓存目录_第5页](http://file4.renrendoc.com/view/e4d3a770baa803fb26ce56288debb1a5/e4d3a770baa803fb26ce56288debb1a55.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动【黑马程序员】卸载app同时删除自定义缓存目录hello,大家好,今天给大家带来点不一样的东西,不知道大家有没有注意过,有些叩p在卸载的时候同时将在sd卡下的缓存目录给删除了,是不是觉得很纳闷?那今天呢,就由我来带大家玩玩这个东西,当然呢,要玩这个其实是需要jni的铺垫的哦〜〜〜先带着大家来了解下如何去做这个功能,首先卸载app的时候app自己能知道么?似乎不行吧?所以咱们没法通过自带的api去实现。那么就废话少说,let'sgo!关于jni这块,简单带着大家过下java调用c吧。第一步,写java代码,,写一个natvie方法publicnativeStringgetServerInfo(Stringpath);第二步。创建jni目录,在目录中创建test.c文件,同时将jni.h文件放入jni目录写c代码,注意方法名,并且引入jni.h#include<jni.h>#include<stdio.h>jstringJava_com_example_untitled_MyActivity_getServerInfo(JNIEnv*env,jobjectthiz,jstringpath){写方法。。。)注意:方法名的写法如下Java_包名发型_方法名(jvm虚拟机的指针,调用者对象)这里生成方法名也可以通过ndk来实现的分为2步黑马程序员济南中心编著
黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动*通过dos命令使用javac-d.Test.java命令编译带有native方法的.java文件,这样就会在当前目录中生成一个class文件会生成com/b3a4a/jnitest/Test.class*通过javah命令来生成例如javahcom.b3a4a.jnitest.Test,会生成.h的头文件生成com_b3a4a_jnitest_Test.h文件,方法名就在.h头文件中JNIEXPORTjstringJNICALLJava_com_b3a4a_jnitest_Test_getServerInfo(JNIEnv*,jobject);第三步,在jni目录中创建文件,andorid.mkLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE:=testLOCAL_SRC_FILES:=test.cLOCAL_C_INCLUDES:=$(LOCAL_PATH)/includeLOCAL_LDLIBS+=-L$(SYSROOT)/usr/lib-lloginclude$(BUILD_SHARED_LIBRARY)第四步进入命令行进入应用程序的包的目录执行ndk-build命令创建Application.mk,自己填写需要的处理器型号,生成不同的so文件APP_ABI:=armeabiarmeabi-v7ax86第五步,将生成的libtest.so放入lib/armeabi目录(目录不需要自己建)第六步,java代码里面,把动态链接库加载到jvm虚拟机static{System.loadLibrary("库文件名称不带前缀,后缀名)黑马程序员济南中心编著
黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动)第7步,java中直接调用native方法JNI开发中的常见错误:写错了load的libraryjava.lang.UnsatisfiedLinkError:Couldn'tloadhell0:findLibraryreturnednullAndroid.mk文件编写错误/jni/Android.mk:4:***missingseparator.Stop.LOCAL_MODULE配置不能有扩展名//jni/Android.mk:hello.so:LOCAL_MODULE_FILENAMEmustnotcontainafileextensionc或者c++的源文件名称配置错误objs/hello/helo.o'.Stop.如果使用了错误的cpu平台java.lang.UnsatisfiedLinkError:Couldn'tloadhello:findLibraryreturnednull添加多cpu平台的支持APP_ABI:=armeabiarmeabi-v7ax86c语言方法名称错误,导致java代码无法寻找到c代码Causedby:java.lang.UnsatisfiedLinkError:Nativemethodnotfound:com.itheima.hellojni.MainActivity.helloFromC:()Ljava/lang/String;ok。jni的东西带着大家回顾完了~那么咱们开始具体实现咯〜关键代码其实就是c这块实现的,先贴代码,再和大家说下实现过程01#include02#include<string.h><jni.h>01#include02#include<string.h><jni.h>03黑马程序员济南中心编著黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动04#include<jni.h>05#include<stdio.h>06#include<stdlib.h>07#include<string.h>08#include<android/log.h>09#include<unistd.h>10#include<sys/inotify.h>1112#include<sys/types.h>13#include<sys/stat.h>14#include<dirent.h>15#defineMAX_PATH10241617/*宏定义begin*/18#defineMEM_ZERO(pDest,destSize)memset(pDest,0,destSize)1920//LOG宏定义21#defineLOG_INFO(tag,msg)__android_log_write(ANDROID_LOG_INFO,tag,msg)22#defineLOG_DEBUG(tag,msg)__android_log_write(ANDROID_LOG_DEBUG,tag,msg)23#defineLOG_WARN(tag,msg)__android_log_write(ANDROID_LOG_WARN,tag,msg)24#defineLOG_ERROR(tag,msg)__android_log_write(ANDROID_LOG_ERROR,tag,msg)2526/*内全局变量begin*/27staticcharc_TAG[]="onEvent";28staticjbooleanb_IS_COPY=JNI_TRUE;293031jstringJava_com_itheima_untitled_MyActivity_init(JNIEnv*env,jobjectthiz,32 jstringpath){jstringtag=(*env)->NewStringUTF(env,c_TAG);3435 〃初始化logLOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),37 (*env)->GetStringUTFChars(env,(*env)->NewStringUTF(env,38"initOK"),&b_IS_COPY));3940 //fork子进程,以执行轮询任务pid_tpid=fork();42 if(pid<0){43 〃出错logLOG_ERROR((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),45 (*env)->GetStringUTFChars(env,46(*env)->NewStringUTF(env,"forkfailed!!!"),&b_IS_COPY));47 }elseif(pid==0){黑马程序员济南中心编著
黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动intfileDescriptor=inotify_init();49 if(fileDescriptor<0){LOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),51 (*env)->GetStringUTFChars(env,52(*env)->NewStringUTF(env,"inotify_initfailed!!!"),&b_IS_COPY));53 exit(1);54 }5556 intwatchDescriptor;watchDescriptor=inotify_add_watch(fileDescriptor,"/data/data/com.itheima.untitled",IN_DELETE);59 if(watchDescriptor<0){LOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),61 (*env)->GetStringUTFChars(env,2(*env)->NewStringUTF(env,"inotify_add_watchfailed!!!"),&b_IS_COPY));6364 exit(1);65 }6667 〃分配缓存,以便读取event,缓存大小=一个structinotify_event的大小,68这样一次处理一个eventvoid*p_buf=malloc(sizeof(structinotify_event));if(p_buf==NULL){LOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),72 (*env)->GetStringUTFChars(env,73(*env)->NewStringUTF(env,"mallocfailed!!!"),&b_IS_COPY));7475 exit(1);76 }77 〃开始监听LOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),79 (*env)->GetStringUTFChars(env,80(*env)->NewStringUTF(env,"startobserver"),&b_IS_COPY));size_treadBytes=read(fileDescriptor,p_buf,sizeof(structinotify_event));8384 //read会阻塞进程,走到这里说明收到目录被删除的事件,注销监听器free(p_buf);inotify_rm_watch(fileDescriptor,IN_DELETE);8788 〃目录不存在logLOG_DEBUG((*env)->GetStringUTFChars(env,tag,&b_IS_COPY),90 (*env)->GetStringUTFChars(env,91(*env)->NewStringUTF(env,"uninstalled"),&b_IS_COPY));黑马程序员济南中心编著
黑马程序员传智播客旗下高端IT教育品牌黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动92939495969798execlp("rm","rm","-rf",(*env)->GetStringUTFChars(env,path,&b_IS_COPY),(char*)NULL);}else{〃父进程直接退出,使子进程被init进程领养,以避免子进程僵死}return(*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光端机项目投资计划书
- 化学与可持续发展-2024-2025学年高一化学人教版2019单元复习测试
- 全球制药行业外包情况分析报告-培训课件外文版2024.5印度仿制药
- 安徽省池州市贵池区2023-2024学年七年级下学期期末数学质量检测试题(原卷+答案解析)
- 2024版混凝土搅拌站劳动合同书
- 2024版餐馆劳动用工合同书范本
- 护理高等教育发展现状研究(3篇模板)
- 红色文化教育中班(3篇模板)
- 红色教育幼儿园主题(3篇模板)
- 实验室搬迁实施方案(2篇)
- 思想道德与法治知到章节答案智慧树2023年咸阳职业技术学院
- 实用摄影技能知到章节答案智慧树2023年黎明职业大学
- 某企业新进员工质量体系及质量管理培训
- 液化气单位主要负责人安全生产职责
- 文化地理学智慧树知到答案章节测试2023年江西师范大学
- 2023俄语四级真题及答案
- GB/T 42177-2022加氢站氢气阀门技术要求及试验方法
- 代际领导力-用90后思维管理90后-完整版
- 预应力计算书
- NaOH水溶液三效并流加料蒸发装置的设计
- 压力管道管理措施4篇
评论
0/150
提交评论