Android NDK开发和JNI开发
- 格式:doc
- 大小:221.50 KB
- 文档页数:17
android开发工程师工作岗位职责说明(通用32篇)android开发工程师工作岗位职责说明篇11. 从事Android平台客户端软件产品设计、开发;2. 负责与其它相关团队技术问题的沟通配合与协调工作;3. 项目管理:项目评估、成本控制、进度控制、质量、风险管理等。
4.公司自有项目android开发工程师工作岗位职责说明篇21、参与O2O平台(PC及移动)及网站的设计与研发2、能根据项目任务计划独立按时完成软件高质量编码和调试工作3、与团队一起解决大数据量,高并发,高可靠性等各种技术问题,不断挑战技术难题,持续对系统进行优化.4、复杂分布式系统的设计、开发及维护,用技术支撑公司O2O业务的快速发展.5、负责解决产品使用中遇到的各种问题,并进行总结与改进,从技术角度对产品设计和体验提出建议android开发工程师工作岗位职责说明篇31、负责安卓平台应用开发和测试。
2、参与APP项目的需求分析、系统设计、性能优化、项目维护。
3、编码设计和代码实现。
4、设计用户交互端口、检查功能完成度、联调。
5、个人代码自测、提交组内测试、进行BUG修改。
android开发工程师工作岗位职责说明篇41、对Android的整体架构有较为深入的了解;2、精通Java开发语言,Eclipse开发工具,熟悉面向对象编程设计;3、熟悉AndroidUI控件编程,熟悉JNI/NDK,有过第三方库平台移植经验,有FFmpeg开发经验者优先;4、熟悉Android下网络通信机制,对Socket、http通信有深刻的理解,熟悉Sqlite数据库;5、熟悉Android多线程开发。
android开发工程师工作岗位职责说明篇51. 负责Android平台的浏览器APP开发;2. 在Android手机上设计并开发应用程序;3. Android平台框架层的维护以及扩展;4. 负责Android项目的架构设计、方案的制定;5. 根据产品功能需求设计并完成软件实现;6. 参与产品需求分析并制定技术实施方案。
2010-12-03用Android NDK编译FFmpeg文章分类:移动开发用Android NDK编译FFmpegPOSTED AT: 2010-07-24 06:38:52 UTC | POSTED IN: Android | 69 COMMENTS| EDITAndroid内置的编解码器实在太少,于是我们需要FFmpeg。
Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。
不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。
我觉得我现在这些方法算是比较简洁的了--下面就尽量詳細的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我。
你得了解JNI和Android NDK的基本用法,若觉得我的文章还不错,可以看之前写的JNI简单入门和Android NDK入门首先创建一个标准的Android项目vPlayerandroid create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView然后在vPlayer目录里mkdir jni &&cd jniwget /releases/ffmpeg-0.6.tar.bz2tar xf ffmpeg-0.6.tar.bz2 &&mv ffmpeg-0.6 ffmpeg &&cd ffmpeg在ffmpeg下新建一个config.sh,内容如下,注意把PREBUILT和PLATFORM设置正确。
另外里面有些参数你也可以自行调整,我主要是为了配置一个播放器而这样设置的。
#!/bin/bashPREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86 /arm-eabi-4.4.0PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm./configure --target-os=linux \--arch=arm \--enable-version3 \--enable-gpl \--enable-nonfree \--disable-stripping \--disable-ffmpeg \--disable-ffplay \--disable-ffserver \--disable-ffprobe \--disable-encoders \--disable-muxers \--disable-devices \--disable-protocols \--enable-protocol=file \ --enable-avfilter \--disable-network \--disable-mpegaudio-hp \--disable-avdevice \--enable-cross-compile \--cc=$PREBUILT/bin/arm-eabi-gcc \--cross-prefix=$ PREBUILT/bin/arm-eabi- \--nm=$PREBUILT/bin/arm-eabi-nm \--extra-cflags="-fPIC -DANDROID"\--disable-asm \--enable-neon \--enable-armv5te \--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$ PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"运行config.sh开始configurechmod +x config.sh./config.shconfigure完成后,编辑刚刚生成的config.h,找到这句#define restrict restrictAndroid的GCC不支持restrict关键字,于是修改成下面这样#define restrict编辑libavutil/libm.h,把其中的static方法都删除。
anativewindow和anativeactivity 参考代码-回复什么是anativewindow和anativeactivity?如何在Android开发中使用它们?在Android开发中,anativewindow和anativeactivity是重要的概念和类。
anativewindow是用于OpenGL ES渲染的抽象类,而anativeactivity 是管理本地代码和Java代码之间交互的类。
本文将详细介绍这两个概念以及它们在Android开发中的应用。
首先,我们来了解anativewindow。
anativewindow是一个代表原生窗口的抽象类,提供与OpenGL ES兼容的图形库进行交互的方法。
它提供了与GPU进行交互的接口,以便使用硬件加速进行渲染。
在Android中,anativewindow一般用于在本地代码中实现OpenGL ES渲染,以提升性能和图形处理能力。
在Java层,通过SurfaceView和TextureView来访问anativewindow。
在Android NDK(Native Development Kit)开发中,使用anativewindow进行OpenGL ES渲染时需要以下步骤:1. 获取Java层SurfaceView或TextureView的surface对象。
2. 将surface对象传递给C/C++本地代码。
3. 在本地代码中,创建一个ANativeWindow对象,通过ANativeWindow_fromSurface方法将surface对象包装成ANativeWindow。
4. 使用ANativeWindow进行OpenGL ES渲染。
下面是一个简单的使用anativewindow进行OpenGL ES渲染的示例代码:c++#include <android/native_window.h>#include <android/native_window_jni.h>JNIEXPORT void JNICALLJava_com_example_MyGLRenderer_init(JNIEnv *env, jobject instance, jobject surface) {ANativeWindow *window = ANativeWindow_fromSurface(env, surface);使用ANativeWindow进行OpenGL ES渲染…}接下来,我们来讨论anativeactivity。
android工作职责(万能18篇)android工作职责篇11、熟悉Java开发语言和环境,熟悉常用的网站开发架构和流程。
2、熟悉UI图形编程、基本算法和数据结构,熟悉基于TCP/UDP/HTTP的网络协议,了解HTML5技术;3、熟悉常用数据库软件的原理和使用,熟悉常用连接池组件,对数据库的优化有一定的理解。
具备良好合作态度及团队精神,并富有工作激情、创新欲望和责任感。
android工作职责篇21、广告前端SDK编程。
2、apk自动化打包工具编写。
职位要求:1、技术功底扎实,有2年及以上Android实际项目编程经验,有大型项目开发经验者优先。
2、理解apk打包原理,了解android工作基本原理,深入理解系统底层机制者优先。
3、了解系统api,对自定义通知栏,桌面悬浮窗口,gps,wifi热点列表抓取等功能实现熟悉并有实战经验。
4、具有良好的编辑风格和习惯,要求结构清晰,逻辑性强,代码冗余低。
5、有良好的沟通能力与理解能力,对工作有责任心。
6、有代码混淆及加密经验者优先。
android工作职责篇31、对Android的整体架构有较为深入的了解;2、精通Java开发语言,Eclipse开发工具,熟悉面向对象编程设计;3、熟悉AndroidUI控件编程,熟悉JNI/NDK,有过第三方库平台移植经验,有FFmpeg 开发经验者优先;4、熟悉Android下网络通信机制,对Socket、http通信有深刻的理解,熟悉Sqlite 数据库;5、熟悉Android多线程开发。
android工作职责篇41.半年以上的全职安卓开发经验2.熟悉安卓市场app上架流程,以及根据驳回理由处理app包问题3.精通安卓四大组件4.对androidui设计有丰富的经验,熟悉自定义控件,有ui优化实践更佳5.熟悉android网络开发,熟悉网络协议,熟悉sqlite数据库6.可以熟练处理各种机型、终端、os版本的适配的问题7.有较强的责任感和良好的团队合作精神及沟通能力android工作职责篇51.计算机相关专业毕业,本科及以上学历;2.熟练掌握java语言,有丰富的java项目开发经验;3.两年以上android软件全职开发工作经验,熟练掌握androidsdk,熟练掌握android 各种ui布局和控件;4.有c/c++使用经验、熟悉androidjni开发的优先。
简历个人资料姓名:性别:男毕业院校:洛阳理工学院学历:本科目前城市:北京市专业:计算机科学与技术工作年限:1年零10个月联系电话:E-mail:应聘方向求职行业:计算机软件应聘职位:安卓软件工程师求职地点:北京市薪资要求:00000综合自评●一年Android开发经验,熟练掌握Android UI/FrameWork ,MVC开发模式●半年J2EE开发经验,熟悉MVC开发模式及SSH框架的使用。
●熟练Eclipse/Myeclipse,SVN开发工具的使用●3个月的C#.NET B/S开发经验,对Winphone开发有一点了解,正在自学中。
●熟悉android 的JNI/NDK 开发,通过JNI实现JAVA与C/C++程序间的调用及回调来开发基于底层应用。
●熟悉Android下的安全机制,实现一些越过系统权限的病毒程序,如木马盗号,静默安装,卸载程序。
●熟悉Android下网络通信机,对Socket通信、TCP、Http有较深刻的了解和经验。
●熟练应用Oracle,Mysql,SQLServer,及安卓下的SQLite数据库操作及编码。
●熟练掌握android下的XML,JSON,HTML的解析,熟练掌握各种数据的存储方式,能独立开发客户端程序。
●熟悉android下的多媒体应用开发,系统安全应用开发,熟悉人脸识别的图像开发。
●熟练掌握HTML,DIV/CSS,熟悉JavaScript/Ajax能实现静态页面的开发。
●对数据结构有所了解,曾开发过基于二叉树的双轨直销管理系统的一部分。
●喜欢接触学习新知识,有良好的编码风格,有很强的学习能力和逻辑分析能力。
●有很强团队合作能力,善于与人沟通交流,无团队,不成长,无竞争,不创新,无挑战,没激情。
喜欢挑战高难度的项目。
工作经历2010/09—2011/03:公司:洛阳艾克科技有限公司职位:JAVA/.NET工程师,实习生主要职责:基于java的B/S 架构的ERP系统的开发,负责系统的需求分析,主要功能的代码实现,后期维护。
Java中JIN机制及System.loadLibrary()的执⾏过程Android平台Native开发与JNI机制详解个⼈认为下⾯这篇转载的⽂章写的很清晰很不错. 注意Android平台上的JNI机制使⽤包括Java代码中调⽤Native模块以及Native代码中调⽤Java模块.众所周知,OPhone平台上的应⽤开发主要基于Java语⾔,但平台完全⽀持且提供了⼀定的Native开发能⼒(主要是C/C++),使得开发者可以借助JNI更深⼊的实现创意。
本⽂主要介绍OPhone平台的JNI机制和Native模块开发与发布的⽅法。
JNI简介Java Native Interface(JNI)是Java提供的⼀个很重要的特性。
它使得⽤诸如C/C++等语⾔编写的代码可以与运⾏于Java虚拟机(JVM)中的 Java代码集成。
有些时候,Java并不能满⾜你的全部开发需求,⽐如你希望提⾼某些关键模块的效率,或者你必须使⽤某个以C/C++等Native语⾔编写的程序库;此时,JNI就能满⾜你在Java代码中访问这些Native模块的需求。
JNI的出现使得开发者既可以利⽤Java语⾔跨平台、类库丰富、开发便捷等特点,⼜可以利⽤Native语⾔的⾼效。
图1 JNI与JVM的关系实际上,JNI是JVM实现中的⼀部分,因此Native语⾔和Java代码都运⾏在JVM的宿主环境(Host Environment),正如图1所⽰。
此外,JNI是⼀个双向的接⼝:开发者不仅可以通过JNI在Java代码中访问Native模块,还可以在 Native代码中嵌⼊⼀个JVM,并通过JNI访问运⾏于其中的Java模块。
可见,JNI担任了⼀个桥梁的⾓⾊,它将JVM与Native模块联系起来,从⽽实现了Java代码与Native代码的互访。
在OPhone上使⽤Java虚拟机是为嵌⼊式设备特别优化的Dalvik虚拟机。
每启动⼀个应⽤,系统会建⽴⼀个新的进程运⾏⼀个Dalvik虚拟机,因此各应⽤实际上是运⾏在各⾃的VM中的。
第1篇尊敬的领导,亲爱的同事们:大家好!在这辞旧迎新的时刻,我有幸向大家汇报过去一年在安卓开发工作中的收获与成长。
回顾这一年,我深知自己在技术能力、团队协作和个人素养等方面都取得了不小的进步。
以下是我对过去一年工作的总结与反思。
一、工作概况过去的一年,我主要负责公司某项目的安卓开发工作,参与了项目的需求分析、设计、编码、测试及上线维护等各个环节。
以下是我在这一年中取得的主要成果:1. 项目需求分析:与产品经理、UI设计师紧密合作,深入理解用户需求,确保开发工作符合产品目标。
2. 模块设计:根据项目需求,设计合理的技术架构,优化代码结构,提高系统性能。
3. 编码实现:熟练运用Java、Kotlin等编程语言,完成功能模块的开发,确保代码质量。
4. 测试与上线:与测试团队紧密配合,确保项目在上线前达到预期的质量标准。
5. 维护与优化:对上线后的产品进行跟踪,收集用户反馈,及时修复bug,优化用户体验。
二、技术成长1. 学习新技术:在过去的一年里,我积极学习Android新特性,如Jetpack组件、Kotlin编程语言等,提高了自己的技术储备。
2. 提升编程能力:通过阅读技术博客、参加技术论坛和分享会,不断提升自己的编程能力和解决问题的能力。
3. 团队协作:与团队成员保持良好的沟通,共同解决项目中遇到的技术难题,提高了团队整体的技术水平。
三、团队协作1. 跨部门协作:与产品、UI、测试等部门的同事保持密切沟通,确保项目顺利进行。
2. 内部培训:积极参与公司组织的内部培训,分享自己的技术心得,为团队的整体提升贡献力量。
3. 技术支持:在团队遇到技术难题时,主动提供技术支持,共同攻克难关。
四、不足与反思1. 代码质量:在开发过程中,有时过于追求速度,导致代码质量不高。
今后,我将更加注重代码的规范性和可维护性。
2. 技术深度:虽然学习了一些新技术,但在某些领域仍需加强深入学习,提高自己的技术深度。
3. 时间管理:在项目紧张的情况下,有时会出现时间管理不当的情况。
JNI 实战全面解析分类:android2014-11-01 09:05 8083人阅读评论(2) 收藏举报目录(?)[+]简介项目决定移植一款C++开源项目到Android平台,开始对JNI深入研究。
JNI是什么?JNI(Java Native Interface)意为JAVA本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。
NDK是什么?Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。
为什么要用NDK?1、安全性,java是半解释型语言,很容易被反汇编后拿到源代码文件,我们可以在重要的交互功能使用C语言代替。
2、效率,C语言比起java来说效率要高出很多。
JNI和NDK的区别?从工具上说,NDK其实多了一个把.so和.apk打包的工具,而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。
从编译库说,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件。
从编写方式说,它们一样。
详解1、JNI 元素1、JNI组织结构JNI函数表的组成就像C++的虚函数表,虚拟机可以运行多张函数表。
JNI接口指针仅在当前线程中起作用,指针不能从一个线程进入另一个线程,但可以在不同的线程中调用本地方法。
2、原始数据Jobject 对象引用类型函数操作域描述符引用类型则为 L + 该类型类描述符 + 。
数组,其为 : [ + 其类型的域描述符 + 。
多维数组则是 n 个[ +该类型的域描述符 , N 代表的是几维数组。
[html] view plaincopy1. String 类型的域描述符为 Ljava/lang/String;2.3.[ + 其类型的域描述符 + ;4.int[ ] 其描述符为[I5.float[ ] 其描述符为[F6.String[ ] 其描述符为[Ljava/lang/String;7.Object[ ]类型的域描述符为[Ljava/lang/Object;8.int [ ][ ] 其描述符为[[I9.float[ ][ ] 其描述符为[[F将参数类型的域描述符按照申明顺序放入一对括号中后跟返回值类型的域描述符,规则如下:(参数的域描述符的叠加)返回类型描述符。
第九章NDK开发与JNI开发9.1 NDK开发我们先来说说Android SDK (Android Software Development Kit), 即Android软件开发工具包。
可以说只要你使用Java去开发Android这个东西就必须用到。
他包含了SDK Manager 和AVD Manage。
对于android系统的一些开发版本的管理以及模拟器管理。
而NDK (Native Development Kit)跟SDK差不多的是他也是一个开发工具包。
用他开发C/C++是很方便的。
他有一个强大的编译集合。
9.1.1 NDK产生的背景Android平台从诞生起,就已经支持C、C++开发。
众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。
但这并不等同于“第三方应用只能使用Java”。
在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。
不过,Google也表示,使用原生SDK编程相比Dalvik虚拟机也有一些劣势,Android SDK文档里,找不到任何JNI方面的帮助。
即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。
比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。
开发者需要自行斟酌使用。
于是NDK就应运而生了。
NDK全称是Native Development Kit。
NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。
NDK将是Android平台支持C开发的开端。
9.1.2 为什么使用NDK1、代码的保护。
由于apk的Java层代码很容易被反编译,而C/C++库反汇难度较大。
2、可以方便地使用现存的开源库。
大部分现存的开源库都是用C/C++代码编写的。
3、提高程序的执行效率。
将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
4、便于移植。
用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
9.1.3 NDK简介1、NDK是一系列工具的集合NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。
这些工具对开发者的帮助是巨大的。
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK提供了一份稳定、功能有限的API头文件声明Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。
从该版本的NDK 中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。
在深入理解之前,暂且就把NDK当成是一种工具,这种工具使得JAVA能够使用C/C++编译出的so 包。
并将此包一起打入apk包中。
9.1.4 NDK开发环境的搭建1、下载安装Android NDK下载地址:/sdk/ndk/index.html如图9-1所示图9-12、下载安装cygwin由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境,cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。
通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。
下载地址:下载,也可以到中文的映像网站下载1)然后双击运行吧,运行后你将看到安装向导界面。
如图9-2所示图9-22)点击下一步,此时让你选择安装方式:●Install from Internet:直接从Internet上下载并立即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。
●Download Without Installing:只是将安装文件下载到本地,但暂时不安装。
●Install from Local Directory:不下载安装文件,直接从本地某个含有安装文件的目录进行安装。
3)选择第一项,然后点击下一步。
4)选择要安装的目录,注意,最好不要放到有中文和空格的目录里,似乎会造成安装出问题,其它选项不用变,之后点下一步:5)上一步是选择安装cygwin的目录,这个是选择你下载的安装包所在的目录,默认是你运行setup.exe 的目录,直接点下一步就可以:6)此时你共有三种连接方式选择:●Direct Connection:直接连接。
●Use IE5 Settings:使用IE的连接参数设置进行连接。
●Use HTTP/FTP Proxy:使用HTTP或FTP代理服务器进行连接(需要输入服务器地址、端口号)。
用户可根据自己的网络连接的实情情况进行选择,一般正常情况下,均选择第一种,也就是直接连接方式。
然后再点击“下一步”。
7)这是选择要下载的站点,选择后点下一步。
8)此时会下载加载安装包列表9)Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包。
那四个单选按钮是选择下边树的样式,默认就行,不用动。
View默认是Category,建议改成full显示全部包再查,省的一些包被隐藏掉。
左下角那个复选框是是否隐藏过期包,默认打钩,不用管它就行,下边开始下载我们要安装的包吧,为了避免全部下载,这里列出了后面开发NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc- g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包10)然后开始选择安装这些包吧,点skip,把它变成数字版本格式,要确保Bin项变成叉号,而Src 项是源码,这个就没必要选了。
11)下面测试一下cygwin是不是已经安装好了。
运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
然后依次输入gcc –version,g++ --version,make –version,gdb –version进行测试,如果都打印出版本信息和一些描述信息,则cygwin安装成功!3、配置NDK环境变量1)首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile,(注意:我安装的时候我的home文件夹下面什么都没有,解决的办法:首先打开环境变量,把里面的用户变量中的HOME变量删掉,在E:\cygwin\home文件夹下建立名为Administrator的文件夹(是用户名),然后把E:\cygwin\etc\skel\.bash_profile拷贝到该文件夹下)。
2)打开bash_profile文件,添加NDK=/cygdrive/<你的盘符>/<android ndk目录>例如:NDK=/cygdrive/e/android-ndk-r5export NDKNDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存3)打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/e/android-ndk-r5信息,则表明环境变量设置成功了。
9.1.5 初试NDK开发在进行NDK开发时,一般需要同时建立Android工程和C/C++工程,然后使用NDK编译C/C++工程,形成可以被调用的共享库,最后共享库文件会被拷贝到Android工程中,并被直接打包到apk文件中1、编写Java代码1)建立一个Android工程TestNDK,创建TestNDK.java文件。
TestNDK.java文件内容如下:package com.blueeagle.example;import android.app.Activity;import android.widget.TextView;import android.os.Bundle;public class TestNDK extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);TextView myTextView = new TextView(this);myTextView.setText( stringTestNdk() );setContentView(myTextView);}public native String stringTestNdk ();public native String stringTestNdk2 ();static {System.loadLibrary("testNDK");}}其中static语句块表明程序开始运行的时候会加载testNDK, static区声明的代码会先于onCreate方法执行。
如果程序中有多个类,而且如果TestNDK这个类不是你应用程序的入口,那么testNDK(完整的名字是lib testNDK.so)这个库会在第一次使用TestNDK这个类的时候加载。
public native String stringTestNdk ();p ublic native String stringTestNdk2 ();可以看到这两个方法的声明中有native 关键字,这个关键字表示这两个方法是本地方法,也就是说这两个方法是通过本地代码(C/C++)实现的,在java代码中仅仅是声明。
用eclipse编译该工程,生成相应的.class文件,这步必须在下一步之前完成,因为生成.h文件需要用到相应的.class文件。
暂时不考虑报错信息。
2)生成.h文件在C/C++文件编写之前,需要利用javah这个工具生成相应的.h文件,然后根据这个.h文件编写相应的C/C++代码。