版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、我們看一下如何在Android環(huán)境下引用/system/lib下的.so文件(若您也對(duì)此有所了解,還望不吝賜教后面的問(wèn)題,先謝為避免講得混淆,先將我的代碼的結(jié)構(gòu)貼出來(lái)Andr&idJniT&st音5rc由,JAndrciellniTestActivity.j;TCaEIMative.javaaMfe&fegen.Litdt+L:-已二jAndroid2.2m砧eUbin匕二include-telephony國(guó)cit_cdma_sm&rh國(guó)ril.h&librilmoek-rilreferEnce-nl&riId.秒Andraid.mkl_cjma
2、rsccm-CallNativc.h國(guó)testx包Hbt日amneabipr;libtest,so&objfe®旦AndroidManifest.xmlQguwd.cfg鑿project,propertiesThninflrnid-JImiTcrtH首先,新建Android工程:AndroidJniTest,在AndroidJniTestActivity.java中的代碼如下:javaviewplaincopyprint?1. ;2. importandroid.app.Activity;3. importandroid.os.Bundle;4. publicclassAnd
3、roidJniTestActivityextendsActivity5. /*Calledwhentheactivityisfirstcreated.*/6. Override7. publicvoidonCreate(BundlesavedInstanceState)8. super.onCreate(savedInstanceState);9. setContentView(R.layout.main);10. System.loadLibrary("test");11. CallNativecallnative=newCallNative();12. bytecmd=
4、(byte)'u004c'13. inta=callnative.writeCmd(cmd,"/system/lib");14.15. 16. ;importandroid.app.Activity;importandroid.os.Bundle;publicclassAndroidJniTestActivityextendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(sav
5、edInstanceState);setContentView(R.layout.main);System.loadLibrary("test");CallNativecallnative=newCallNative();bytecmd=(byte)'u004c'inta=callnative.writeCmd(cmd,"/system/lib");再在包下建立文件:CallNative.java代碼:javaviewplaincopyprint?1. ;2. publicclassCallNative3. publicnativebyt
6、ereadCmd(Stringpath);4. publicnativeintwriteCmd(bytecmd,Stringpath);5. ;publicclassCallNativepublicnativebytereadCmd(Stringpath);publicnativeintwriteCmd(bytecmd,Stringpath);利用javah工具創(chuàng)建本地庫(kù)文件的頭文件mars_com_CallNative.h代碼:cppviewplaincopyprint?1. /*DONOTEDITTHISFILE-itismachinegenerated*/2. #include<j
7、ni.h>3. /*Headerforclassmars_com_CallNative*/4. #ifndef_Included_mars_com_CallNative5. #define_Included_mars_com_CallNative6. #ifdef_cplusplus7. extern"C"8. #endif9. /*10. *Class:mars_com_CallNative11. *Method:readCmd12. *Signature:(Ljava/lang/String;)B13. */14. JNIEXPORTjbyteArrayJNICA
8、LLJava_mars_com_CallNative_readCmd15. (JNIEnv*,jobject,jstring);16. /*17. *Class:mars_com_CallNative18. *Method:writeCmd19. *Signature:(BLjava/lang/String;)I20. */21. JNIEXPORTjintJNICALLJava_mars_com_CallNative_writeCmd22. (JNIEnv*,jobject,jbyteArray,jstring);23. #ifdef_cplusplus24. 25. #endif26. #
9、endif/*DONOTEDITTHISFILE-itismachinegenerated*/#include<jni.h>/*Headerforclassmars_com_CallNative*/#ifndef_Included_mars_com_CallNative#define_Included_mars_com_CallNative#ifdef_cplusplusextern"C"#endif/*Class:mars_com_CallNative*Method:readCmd*Signature:(Ljava/lang/String;)B*/JNIEXP
10、ORTjbyteArrayJNICALLJava_mars_com_CallNative_readCmd(JNIEnv*,jobject,jstring);/*Class:mars_com_CallNative*Method:writeCmd*Signature:(BLjava/lang/String;)I*/JNIEXPORTjintJNICALLJava_mars_com_CallNative_writeCmd(JNIEnv*,jobject,jbyteArray,jstring);#ifdef_cplusplus#endif#endifcppviewplaincopyprint?1.&l
11、t;pre><pre>javaviewplaincopyprint?1.<preclass="cpp"name="code"><pre><preclass="cpp"name="code"><pre>至于如何生成此頭文件,可自行學(xué)習(xí),這里不多講了第二,在工程目錄下建立文件夾:jni,將文件mars_com_CallNative.h拷貝到此目錄下,再在此目錄下建立文件test.c代碼:#include"mars_com_CallNative.
12、h"#include<jni.h>#include<stdio.h>#include<string.h>#include<assert.h>#include<android/log.h>#include<dlfcn.h>#include<unistd.h>#include<sys/types.h>#include"include/telephony/ril.h"#defineLOGD()_android_log_print(ANDROID_LOG_DEBUG,"
13、;keymatch",_VA_ARGS_)JNIEXPORTjbyteArrayJNICALLJava_mars_com_CallNative_readCmd(JNIEnv*evn,jobjectobj,jstringjstr)exit(0);JNIEXPORTjintJNICALLJava_mars_com_CallNative_writeCmd(JNIEnv*evn,jobjectjobj,jbyteArrayjba,jstringjstr)return56;jintJNI_OnLoad(JavaVM*vm,void*reserved)LOGD("JNIONLOADsu
14、ccess!");char*path="/system/lib/libril.so"void*filehandle0=dlopen(path,RTLD_LAZY|RTLD_GLOBAL);/引用path指向的庫(kù):/system/lib/libril.sochar*ll;intpid;if(filehandle0)LOGD("opensosuccess!");char*(*requesttostring)(int);if(0=pid)sleep(1);/子進(jìn)程睡眠一秒requesttostring=(char*(*)(int)dlsym(file
15、handle0,"requestToString");pid=fork();if(requesttostring)LOGD("callfunctionrequesttostringOK!");ll=requesttostring(RIL_REQUEST_GET_NEIGHBORING_CELL_IDS);RIL_REQUEST_GET_NEIGHBORING_CELL_IDS定義在include/telephony/ril.h中LOGD("thevalueofrequesttostringis%s",*ll);elseLOGD(&qu
16、ot;callfunctiongetinformation!ERROR!");LOGD("ok");elseif(0<pid)LOGD("intheparent%s'n",getpid();elseLOGD("forkerror");將Android源碼hardware/ril下的include文件夾也拷貝到j(luò)ni文件夾下(因?yàn)樵趓equesttostring(RIL_REQUEST_GET_NEIGHBORING_CELL_IDS)中使用的RIL_REQUEST_GET_NEIGHBORING_CELL_ID
17、S在include文件夾下的ril.h中定義了)在jni文件夾下新建Android.mk文件,內(nèi)容如下:plainviewplaincopyprint?1. LOCAL_PATH:=$(callmy-dir)2. include$(CLEAR_VARS)3. LOCAL_MODULE:=test4. LOCAL_SRC_FILES:=test.c5. LOCAL_LDLIBS:=-llog6. LOCAL_CERTIFICATE:=platform7. include$(BUILD_SHARED_LIBRARY)LOCAL_PATH:=$(callmy-dir)include$(CLEAR_V
18、ARS)LOCAL_MODULE:=testLOCAL_SRC_FILES:=test.cLOCAL_LDLIBS:=-llogLOCAL_CERTIFICATE:=platforminclude$(BUILD_SHARED_LIBRARY)第三,接下來(lái)就是編譯的時(shí)候了。在cygwin下$ndk/ndk-build卅$ndk/nd!tJbuildGompllatliumb=test<=testSJiaredLibrarji;lil)tcst,soInstall:lihtestiso=>libe/apmeahi/libtest.so顯示編譯通過(guò)了,F(xiàn)5刷新工程,發(fā)現(xiàn)在工程目錄下多了一
19、下文件夾:libs,其中就包含了生成的文件:libtest.so最后,運(yùn)行。發(fā)現(xiàn)在Logcat下有這些信息:Trnep©AppJisyrtipnT叼"dt33<335:33:4;,f-OL皿士二:業(yè)ktITEBUTE:&tLKh:fthreadT5ioderThreadI31failedM-1325d3:4*.337郎cfara.30£dalvifcT:tiding1cj.lLit-daa-da-a,iran,zge/life,libtez*j3£«IjiH'fei£SSzQ3-1?05:31:4.337439M
20、I9.Z0Lda.vusrADlzZlcMTSZlit二寸E.狙二3.二H_1二:LtitiSt.m。'.I4e2EZjJ3-1305:33;l7jr139際九犯tEyialch皿I超口匯M二M曰!3311QfrnilT.TT酬曜北.“工Ikisutdh型券ka'jcccai"oa-u05:u:4£.m9出邈u±ulircitticirtqi:*flt:.csc£jM:03-1105:33:蛾跑03-1355:33:473以9le;Tat2tcallfciDtdCLrexzttDstriLj總!31Q3-U06:封:tt:.m3jDEEK
21、Etaild:iL3er;run:1gEDoic/idk/fsneric即皿91b"E:eogte=z-ttjf103-19G5:U:4L72731二EG雷pil:4W,忖上439»>as:*,:x«<第-110S±13:41.71731EEEDC六聲二11|£I:SE?;iiPfaultC:200i:r03-13'5:33:,.737ILJ(K二乂丁工:-:-128nK3D13DCJDCZ0M335:33:4:,73731:'EE7?Mmfffifr5UK我Zre«£1D254r5C30C:20
22、03-1931DEEDSrE301300r9OCOOccto:IDilJcMSe邙DC300:00JJ-HQ5:U:«J3T31ZEEU5LI式曰,尤:耀«5xL.:._±.J*.icC;5£.JIJ.1Ln<-0S:33:tt.E5731而E明匚甘士三三3Y3:EL-lli;'13hc.SD03-1335:33:463731WEEKMl際口二巾限斫爾:加1必田03-L3Q5:33iUaE9E31nEOE和I陽(yáng)口門(mén)底旗。/syj:a/iw/ii£c+35J-1S35J3:4;,S383:叫ee|網(wǎng)解工箱:.,m0二皿以出:品配n-
23、ia詠刪蛇數(shù)?31二dt。&ecfIiata.'zHta/iiiisrr,.111-.2:J3-1SJ5:33:4:.S-JT孑DEKE和15pcL2J42tl:"3yJ3EB/.llXii,iltxr-Tl.SC03-105;J3;tt,fr31EE79f0C5t,:3S3y3:K,lJj/:;tcn.3CQS-U峰:3:二墨重FTg0:l:nUggfWL加'35:33:41.91711:和1卜一二:_L,;U二,3l注二注3三:亞.算f11困H)9pcd或第:Lsc03-1305:33:tt.m幻2EEJ3fclCpeENG:E三ayrzra'li
24、h,111ibri.ac0J-138門(mén)3:4隊(duì)KTZEE7SQLpC口力遼噬工,彈工門(mén)空F11W3U割G3-L906:33:«rDOOOOOt:2pc£:lietl4SYCttH.-'iJsc.atIOMi眥虺5Lb412033beBUMIO:D;:;OJI陣小曲昭顯.81111_1Z.rbtflMM帆捌BQ卜盟N;眥$1削,fl:嫻ICfl-15的眥5LMT31TMG星匯正兼燈,二工:二一止二:二2OJ-1506:0J!52.0r髓瓦:7H睽*慰?em«!bh+uiipid1bidied-I(13-H岫眥峪.謝ffyf:!ajTCK3!飛卿電討式RJJI
25、E:fRL刑util*1X&WXE!:J<:0£I03r13g§;06;5£JQ?寸斜Fna4/"*白事:iiTPTni:邛:OH%Ol:«iwjrCt附如電州,馳上,.ummMJSLirnftttl1!7JUSN址1果”3(IMS>0空凡涯出CLHT3Irfi:-r«dN7也芳,口:1MX匕七弟itE?喈:OJ-1:g匚跖圖馨fy:;Esjr:K!j女工豺匚能":*上":1門(mén);JT%湍:,";1式漢3丹:小;七:注:??。?G:;H=7好了,問(wèn)題來(lái)了。問(wèn)題一、從綠色部分的內(nèi)容來(lái)看,應(yīng)該是成功引用了/system/lib/libril.so的,但為什么在上面只輸出了TimePIDApplicctiGnTag7erf:C0-13053:15.477UU7E:a?aAat£"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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é)生流感預(yù)防
- 大學(xué)點(diǎn)評(píng)班費(fèi)管理制度
- 選擇合適的長(zhǎng)度單位 說(shuō)課稿-2024-2025學(xué)年人教版數(shù)學(xué)二年級(jí)上冊(cè)
- 【導(dǎo)與練】2021高考地理總復(fù)習(xí)配套學(xué)案:大規(guī)模的海水運(yùn)動(dòng)
- 2024版孕婦離婚協(xié)議書(shū)樣式3篇
- 2024版瓊臺(tái)師范學(xué)院校園無(wú)線電管理服務(wù)合同
- 二零二五年度基礎(chǔ)設(shè)施建設(shè)拆遷補(bǔ)償合同模板3篇
- 2024版委托代理銷售合同
- 【每日一練】《晨讀晚練》英語(yǔ)高三年級(jí)上學(xué)期第四周參考答案及解析4
- 【全程復(fù)習(xí)方略】2020年高考化學(xué)課時(shí)提能演練(七)-2.3-氧化劑和還原劑(魯科版-福建專供)
- Unit 5 Music Listening and Talking 說(shuō)課稿-2023-2024學(xué)年高一英語(yǔ)人教版(2019)必修第二冊(cè)
- 快樂(lè)讀書(shū)吧:中國(guó)民間故事(專項(xiàng)訓(xùn)練)-2023-2024學(xué)年五年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版)
- 車間主任個(gè)人年終總結(jié)
- 2024年甘肅省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 職業(yè)技術(shù)學(xué)院《工程力學(xué)》課程標(biāo)準(zhǔn)
- 消防工程技術(shù)專業(yè)畢業(yè)實(shí)習(xí)報(bào)告范文
- 2024年高等教育法學(xué)類自考-00229證據(jù)法學(xué)考試近5年真題附答案
- 安徽省合肥市一六八中2025屆高二生物第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 醫(yī)院后勤管理作業(yè)指導(dǎo)書(shū)
- 六年級(jí)下冊(cè)心理健康教育教案-8 男女生交往小鬧鐘遼大版
- 【課件】第五單元化學(xué)反應(yīng)的定量關(guān)系新版教材單元分析九年級(jí)化學(xué)人教版(2024)上冊(cè)
評(píng)論
0/150
提交評(píng)論