版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
黑馬程序員傳智播客旗下高端IT教育品牌改變中國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這塊,簡單帶著大家過下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)用者對象)這里生成方法名也可以通過ndk來實(shí)現(xiàn)的分為2步黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國IT教育,我們正在行動(dòng)*通過dos命令使用javac-d.Test.java命令編譯帶有native方法的.java文件,這樣就會在當(dāng)前目錄中生成一個(gè)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目錄中創(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,自己填寫需要的處理器型號,生成不同的so文件APP_ABI:=armeabiarmeabi-v7ax86第五步,將生成的libtest.so放入lib/armeabi目錄(目錄不需要自己建)第六步,java代碼里面,把動(dòng)態(tài)鏈接庫加載到j(luò)vm虛擬機(jī)static{System.loadLibrary("庫文件名稱不帶前綴,后綴名)黑馬程序員濟(jì)南中心編著
黑馬程序員傳智播客旗下高端黑馬程序員傳智播客旗下高端IT教育品牌改變中國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平臺java.lang.UnsatisfiedLinkError:Couldn'tloadhello:findLibraryreturnednull添加多cpu平臺的支持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教育品牌改變中國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教育品牌改變中國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會阻塞進(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教育品牌改變中國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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年房地產(chǎn)公司合作開發(fā)項(xiàng)目聯(lián)營合同模板3篇
- 2024版農(nóng)村宅基地房產(chǎn)抵押流轉(zhuǎn)及買賣合同3篇
- 2024俱樂部溫泉度假村租賃合同3篇
- 2024版?zhèn)}儲設(shè)施租賃及倉儲服務(wù)合同范本24篇
- 2024年度醫(yī)療器械研發(fā)合作合同標(biāo)的2篇
- 2024版體育產(chǎn)業(yè)股權(quán)代持轉(zhuǎn)讓合同3篇
- 2024版XX污水廠污水處理廠污水處理技術(shù)服務(wù)合同范本11篇
- 2024年度新型墻體材料研發(fā)與承包合同3篇
- 2024年度小型飛機(jī)零部件供應(yīng)及維修合同3篇
- 2024年度倉儲物流地產(chǎn)項(xiàng)目合作轉(zhuǎn)讓合同3篇
- 重污染天氣應(yīng)急響應(yīng)“一廠一策”操作方案
- 《人力資源崗必備能力提升課件》
- 《《紅樓夢》中薛寶釵與黛玉的形象分析與人物對比》
- 語文素養(yǎng)與跨學(xué)科學(xué)習(xí)
- 期末沖刺動(dòng)員主題班會課件
- 級畢業(yè)班優(yōu)生勵(lì)志動(dòng)員會-課件
- 2023年政府采購評審專家入庫考試題及答案
- 題庫(大氣科學(xué)基礎(chǔ)(一)-題庫)
- 部編版小學(xué)語文五年級下冊習(xí)作5《形形色色的人》教學(xué)反思共三篇
- 冷庫冷藏庫施工組織及售后服務(wù)投標(biāo)方案
- 子女向父母過戶房屋協(xié)議書
評論
0/150
提交評論