版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng)【黑馬程序員】卸載app同時(shí)刪除自定義緩存目錄hello,大家好,今天給大家?guī)睃c(diǎn)不一樣的東西,不知道大家有沒有注意過,有些叩p在卸載的時(shí)候同時(shí)將在sd卡下的緩存目錄給刪除了,是不是覺得很納悶?那今天呢,就由我來帶大家玩玩這個(gè)東西,當(dāng)然呢,要玩這個(gè)其實(shí)是需要jni的鋪墊的哦???先帶著大家來了解下如何去做這個(gè)功能,首先卸載app的時(shí)候app自己能知道么?似乎不行吧?所以咱們沒法通過自帶的api去實(shí)現(xiàn)。那么就廢話少說,let'sgo!關(guān)于jni這塊,簡(jiǎn)單帶著大家過下java調(diào)用c吧。第一步,寫java代碼,,寫一個(gè)natvie方法publicnativeStringgetServerInfo(Stringpath);第二步。創(chuàng)建jni目錄,在目錄中創(chuàng)建test.c文件,同時(shí)將jni.h文件放入jni目錄寫c代碼,注意方法名,并且引入jni.h#include<jni.h>#include<stdio.h>jstringJava_com_example_untitled_MyActivity_getServerInfo(JNIEnv*env,jobjectthiz,jstringpath){寫方法。。。)注意:方法名的寫法如下Java_包名發(fā)型_方法名(jvm虛擬機(jī)的指針,調(diào)用者對(duì)象)這里生成方法名也可以通過ndk來實(shí)現(xiàn)的分為2步黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng)*通過dos命令使用javac-d.Test.java命令編譯帶有native方法的.java文件,這樣就會(huì)在當(dāng)前目錄中生成一個(gè)class文件會(huì)生成com/b3a4a/jnitest/Test.class*通過javah命令來生成例如javahcom.b3a4a.jnitest.Test,會(huì)生成.h的頭文件生成com_b3a4a_jnitest_Test.h文件,方法名就在.h頭文件中JNIEXPORTjstringJNICALLJava_com_b3a4a_jnitest_Test_getServerInfo(JNIEnv*,jobject);第三步,在jni目錄中創(chuàng)建文件,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)第四步進(jìn)入命令行進(jìn)入應(yīng)用程序的包的目錄執(zhí)行ndk-build命令創(chuàng)建Application.mk,自己填寫需要的處理器型號(hào),生成不同的so文件APP_ABI:=armeabiarmeabi-v7ax86第五步,將生成的libtest.so放入lib/armeabi目錄(目錄不需要自己建)第六步,java代碼里面,把動(dòng)態(tài)鏈接庫加載到j(luò)vm虛擬機(jī)static{System.loadLibrary("庫文件名稱不帶前綴,后綴名)黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng))第7步,java中直接調(diào)用native方法JNI開發(fā)中的常見錯(cuò)誤:寫錯(cuò)了load的libraryjava.lang.UnsatisfiedLinkError:Couldn'tloadhell0:findLibraryreturnednullAndroid.mk文件編寫錯(cuò)誤/jni/Android.mk:4:***missingseparator.Stop.LOCAL_MODULE配置不能有擴(kuò)展名//jni/Android.mk:hello.so:LOCAL_MODULE_FILENAMEmustnotcontainafileextensionc或者c++的源文件名稱配置錯(cuò)誤objs/hello/helo.o'.Stop.如果使用了錯(cuò)誤的cpu平臺(tái)java.lang.UnsatisfiedLinkError:Couldn'tloadhello:findLibraryreturnednull添加多cpu平臺(tái)的支持APP_ABI:=armeabiarmeabi-v7ax86c語言方法名稱錯(cuò)誤,導(dǎo)致java代碼無法尋找到c代碼Causedby:java.lang.UnsatisfiedLinkError:Nativemethodnotfound:com.itheima.hellojni.MainActivity.helloFromC:()Ljava/lang/String;ok。jni的東西帶著大家回顧完了~那么咱們開始具體實(shí)現(xiàn)咯?關(guān)鍵代碼其實(shí)就是c這塊實(shí)現(xiàn)的,先貼代碼,再和大家說下實(shí)現(xiàn)過程01#include02#include<string.h><jni.h>01#include02#include<string.h><jni.h>03黑馬程序員濟(jì)南中心編著黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng)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/*內(nèi)全局變量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子進(jìn)程,以執(zhí)行輪詢?nèi)蝿?wù)pid_tpid=fork();42 if(pid<0){43 〃出錯(cuò)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){黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng)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,緩存大小=一個(gè)structinotify_event的大小,68這樣一次處理一個(gè)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 〃開始監(jiān)聽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會(huì)阻塞進(jìn)程,走到這里說明收到目錄被刪除的事件,注銷監(jiān)聽器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));黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端IT教育品牌黑馬程序員傳智播客旗下高端IT教育品牌改變中國(guó)IT教育,我們正在行動(dòng)92939495969798execlp("rm","rm","-rf",(*env)->GetStringUTFChars(env,path,&b_IS_COPY),(char*)NULL);}else{〃父進(jìn)程直接退出,使子進(jìn)程被init進(jìn)程領(lǐng)養(yǎng),以避免子進(jìn)程僵死}return(*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河道疏浚防洪排水施工合同
- 果蔬采摘翻斗車租賃合同
- 走近心理咨詢學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 娛樂場(chǎng)所場(chǎng)地平整服務(wù)合同
- 電子產(chǎn)品堆場(chǎng)租賃協(xié)議
- 臨時(shí)醫(yī)療電腦租賃合同模板
- 停車場(chǎng)標(biāo)線改造合同
- 沙灘安全護(hù)欄建設(shè)合同
- 2024廣州辦公寫字樓租賃合同
- 2024年城市河道綠化苗木種植項(xiàng)目合同
- 《如何說孩子才會(huì)聽 怎么聽孩子才肯說》讀書分享PPT
- #1機(jī)組整套啟動(dòng)前質(zhì)量監(jiān)督檢查匯報(bào)材料
- 園林植物花卉育種學(xué)課件第5章-雜交育種
- 新人教版部編版二年級(jí)上冊(cè)語文期中復(fù)習(xí)課件
- 配電室綜合監(jiān)控系統(tǒng)完整方案
- 2022校園運(yùn)動(dòng)會(huì)主題課件
- 異丙醇MSDS職業(yè)危害告知卡
- 六年級(jí)上冊(cè)數(shù)學(xué)課件-6. 百分?jǐn)?shù)(一)1-人教版(共11張PPT)
- 2022年電力企業(yè)安全教育培訓(xùn)制度
- HSK5級(jí)100題看圖寫作練習(xí)
- 地下建筑結(jié)構(gòu):第3章 地下建筑結(jié)構(gòu)及設(shè)計(jì)1
評(píng)論
0/150
提交評(píng)論