AndroidStudio环境下的jni调用NDK的方法_第1页
AndroidStudio环境下的jni调用NDK的方法_第2页
AndroidStudio环境下的jni调用NDK的方法_第3页
AndroidStudio环境下的jni调用NDK的方法_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、注意:如果要在AndroidStudio里面使用terminal(终端)的话,必须先配置环境变量。AS中的terminal其实和windows带的中断是一样的,只不过内嵌到了AS上。1、配置java环境变量(可以百度,配置元成必须重启terminal才能运行javac、javah等命令)。2、写好如下HelloNDK.java文件(这个文件演示了jni的调用)packagecom.lcjkndk_deno_2;publicclassHelloMJKstatic!Systerr.Lootfiitrary(11HeLlciNDK");publicnativeString3、然后执行在An

2、droidStudio中执行Build->MakeProject,生成class文件。生成class文件放在了Project的目录ndk_demo_2buildintermediatesclassesdebugcomlcjndk_demo_2中,并且是隐藏的。(不查看这个文件也没关系,当然前提是执行没有错误)“ndk_demci_2buildintermediatesclassesdebugcomIgndk_demci_J名称修改日期大小?(Maiim(MBuildConfig.classHelloNDK.dass2015/5/315:252015/5/315:25CLASS文件1KBM

3、ainActivHy.class2015/5/315:25CLASS文件GLASS文件1KB2KB4、生成h文件4.1在AS的terminal输入javah,然后回车。-这一步可以省略,我这里将javah怎么使用。Terminal+MiercEia-ftTindlMrs:靛t0.3.9600u>(e)2口13MmoftCwpwtion。保背斫有枳利。输出文件(只能使用-d或-D之一)输出目录启用详细输出输出11匕肖恩输出版本信息生成JUI样式的标头文件陛,认值,始隆舄入输出文件从中加教类的路径从中加裁类的路径从中加载引导类的路径出现如下帮助文档。Terminal十C-'硬盘And

4、rqidStudiqPtejectsGUK_HEI(Q>jrvsh用法j&vah_options.<classes>其中,入ptTons包括:一0<file>:-ddirrr«rb。”TtTiolp-?!-ersidu-jE"classpith<p*th>aCpCpatli>bootclasspath<patli>小1r3品是使用其全限定名稀指定的(例加.javaluic,Objact)eE1、硬盘AndraiilStudiaPrOJCCtSTQDOg:Android'Terminal这里出现了ja

5、vah的使用帮助。我们要用的命令是javah-d<dir>-classpath<path>javah是生成jni头文件的命令;-d是生成的头文件存放的目录(这个目录如果事先没有建立,那么运行成功会自动新建);<dir>是前面-d选项的目录名称,如果目录是src的话,不要写成<src>!,直接写src就好;-classpath从中加载类的路径命令;<path>是需要生成头文件的class文件的目录。4.2、 进入到使用cd命令进入HelloNDK.java的文件夹main。I.NDK.PRJ.DEMO 口jdea 口build亡grad

6、Hendk_demo_lndk_demo_2口build口libs 口srcandroidTestt曰main口javaEncom.lcj.ndkdemQ_2匚电HelloNDK1-1bMainActivityresnAndroidManikstxml.gitignore6buildigradle91ndllc_demo_2Jmil1=1ornnijard-niIarncd<dir>如下的第一行。如果不进入这个目录等会运行javah的时候会提示:错误:找不到'com.lcj.ndk_demo_2.HelloNDK'的类文件。Temninal+HierO5a£

7、;tTindops版本.3.9600,v(c)2013Microsoft匚orp.fsi保留所有权利o,电,.CAjidroidStudiorkSpace.KDK_PRJ_DEND>cdndc_denifl_2srcbainC,VAjidrcidStudicorkSpice,tiI)K_F,RJ_DEMOridk_d8mo_25rcraain>j»vdi-djni-classpath.buildint«rmediat«Eclas5e3debucomlejndk_dfnio_2HelloLIDKC'AndroiJStudi0arkSpace

8、9;,1UK_PRJ_DEMOndk_demc_2srcnain>>4:RunTODO6:AndroidbTerminal0:MesaaesEventLoq4.3、 运行javah命令:上图第二行。javah-djni-classpath.buildintermediatesclassesdebugcom.lcj.ndk_demo_2.HelloNDK如上图第二行。只要什么错误都不提示说明运行成功!这时就可以去查看main目录下是不是多了一个jni文件夹,里面就是生成的头文件了。jni是生成的头文件需要存放的文件夹(一般取名jni才对).buildintermediatesclas

9、sesdebug是class所在目录(Build>MakeProject生成的class文件都在这里,这是一个相对路径)com.lcj.ndk_demo_2.HelloNDK是class文件的文件名(根据之前的java文件生成的)使用jni作为输出目录后的截图如下:口androidTestt口main 亡javatEcom.lcj.ndk_demc_2匚qHelloNDK_k%MainActivity 口而臼8mcj_ndk_dum0_2jHllDhJDK,h 6re&gAndroidManifest.xml=1.gitinore头文件出现了!下图是头文件内容。里面有一个函数声明

10、,它是自动生成的,名字不要改动!Kjavm乂IScom_lcj_ndk_demo_2_HellcNDKkhx国«>mJcj_r>dk_demo_2_HelloNDKxJ;/*00*NUTEQ工Tt打工与FILE0x5f0匚hiheg把r口tcd*/#include<ni.h>i/*HeaderforcLoseco/n_Lcj_ndk_demo_2_HffLLDDK*/-#ifndef_Included_co<_lcj_ndk_de(no_2_HelloNDK#defineIncludedcomlejndkdem2HelloWDK#ifdefcpluspl

11、usfiextern"C"#enriif*"TflKI门rhgr"a-r1JTflI/jTjfj打fj/,十F"-"!EE-LufjFLiLrr匚hI,了Lrii,L>Lsil_fLiffLIsKIf.妻彳K犀nNIEXPORTjstring1NICALLJavacomlejndkIdemo12HelloNDKsayHeilo(JNIEnv*,Jobje,qt);#ifdefcplusplus11#endif#endif5、编写C源文件com_lcj_ndk_demo_2_HelloNDK.c。注意这里的函数名称一定要从之前生成

12、的h文件里面复制过来-IellaNDK.javaXicHelloNDK.java,QcomJq_ndk_derro_2_HelIoNDK.hxcom_lcj_ndk_deino_2_HelloNDK.cX /札"T-c.丁丁丁丁,T3二了rc,(口仁k门qgT"B曰jrto堂, #include<jni+h>#include<android/log.h>:#ifridefLOG_TA6#defineLOG_TAG"flNDROIO.LAB"AdelineL0GE3,*)_andrQid_log_print(AnDROID_lOG.

13、ERRORjLOG舶'_VA_ARGS_)#endif以免出错。JtindefIncludcd_labsoctinojnitest.r.3inActivity#defineIncludedLabsodlirio_jniitestHainActivity:#ifdefcplusplusRextern'C"#endifPiJNIEXPORTistringJNICALLlJavacomlejrdkIdemo12HelloNDK5ayHello(JNIEnv*erivTpbjettjObjLOGE("logstringfrcwindk+,F);return(*env

14、)->NewStringUTFCeiWj"HelloFromINI!");甲了#ifdefcplusplusAxMX:#entlif.#endif6、配置build.gradle文件,加入下图中的语句。moduleName就是将来生成的so文件名称的一部分,修改它可以修改ldLibs目前不知道是什么abiFilters是生成os文件的平台,这里选择了3种。so的文件名。ndk_d#mo_2"perties«applypliisin;cc«iihandroididpplicationandroidcompi1eSck

15、Version22buildT&olsVersion"22.0.1defaultConfigapplicationld"com.Lcj.ndk_denw_2,nminSdkVersion15targetSdkVersian22versionCode1versicnName"1.&'rfhdk<moduleHame"HelLoNDK11IdLibShlOER,T2"m"abiFiltersIrEEbi。"armeabi-v7a,F,"x86""1一buildTypes

16、releaseminifyEnabiedfalseproguardFiles-et-muItFBRuardFileC1proguard-android.txt1),17、配置ndk路径。打开perties,加入NDK的路径(ndk需要单独下载,我在网上下载ndk后放在了和sdk相同的路径下)尸ndk_demo_2'而pertiesxi#T力fileisautaifroticatLygeneratebyAndroidStudiosdk.dir=C:U5ErsLClAppDataXLocalftndroicfsdknd

17、k,dir=C:UsersLCJAppOataL)calXAndroicindlc-rl0d8、生成os文件。8.1、 Build->MakeProject生成so文件,这时如果只有一个c文件,就会报错,这是一个bug,解决办法很简单,随便新建一个空的c文件就行了。图中bugUtil.c就是我建的空文件。再次运行,没有出错。WGIVIdiriMLUVIiy口j吊bugUtil.cLlcomcj_ndk:_demo_2_HelIoNDK.c-comleindkdemo2HelloNDK-htSres<>AndroidManifest.xmI11nitinrrnr8.2、 查看工程目录ndk_demo_2buildintermediatesndkdebuglib目录里面各有一个os文件“NDKPRJ_DEMOndk_demo_2buildintermediatesndkdebuglib修改日期2015/5/316:082015/5/316:082015/5/316:08名称armeabiarmeabi-v7ax86位置9、调用jni。>publicclassMainActivityextendsActionB日Activity(OverrideprotectedvoidonCreate(BundlesavedlnstanceStat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论