Android NDK开发简介

Android NDK开发简介

ID:42624491

大小:70.04 KB

页数:5页

时间:2019-09-19

Android NDK开发简介_第1页
Android NDK开发简介_第2页
Android NDK开发简介_第3页
Android NDK开发简介_第4页
Android NDK开发简介_第5页
资源描述:

《Android NDK开发简介》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、AndroidNDK开发简介 最近由于项目的需要,使用到了Android的NDK技术,对项目核心算法跨平台的移植。简答而言,就是使用C对原来的算法进行了改进,并集成到原来的app项目里。   从前的项目一直没有使用NDK进行开发的机会,因而一直仰慕那些技术大牛们关于NDK以及C/C++开发而写的文章,觉得很深奥,因而一直蠢蠢欲动。   其实NDK的开发并不复杂,就入门而言甚至可以说是easyjob,觉得它难是难于C/C++代码的编写与调试。这个是我最近从事NDK开发的一点感受!   首先,我们要弄懂几个概念,何为NDK,它和SDK以及JNI有什么关系?请前看下图:   JNI (Ja

2、vaNativeInterface),Java的本地接口    JNI是Java众多开发技术中的一门,意在利用本地代码,为Java程序提供更高效,更灵活的拓展。应用场景包括:对运行效率敏感的算法实现、跨平台应用移植、调用系统的底层驱动、调用硬件等。尽管Java一贯以其良好的跨平台性而著称,但真正的跨平台之王,应该是C/C++,因为当前世上90%的系统都是基于C/C++编写的。Java的跨平台,是以牺牲效率换来对多种平台的兼容性,因而JNI可以说是Java短板的补充!举一例子说明,当前流行的移动操作系统Android,一直被说系统操作的流畅性不如IOS,原因在于Android的App是

3、基于Java开发的,IOS的是基于Object-C开发的,区别在于同样的操作,在IOS上一条指令完成,在Android上则需要多大三条指令才能完成(数据来自于网络,不一定准确)!于是在AndroidJellyBean版本中,Google为其引入ProjectButter(黄油计划),在应用层大量使用了本地库,并优化了系统的架构,以提升Android系统整体的操作反应!咔咔,JNI的介绍就先说到这里,总之,JNI是一门技术,是JavaCode和C/C++Code联系的桥梁! JNI开发的流程1、编写JavaCode,如下面的例子:Java代码  1.public class MainA

4、ctivity extends Activity {  2.  3.    @Override  4.    protected void onCreate(Bundle savedInstanceState) {  5.        super.onCreate(savedInstanceState);  6.        setContentView(R.layout.activity_main);  7.          8.        Toast.makeText(getApplicationContext(), sayHellow(), Toast.LENGTH_

5、LONG).show();  9.    }  10.      11.    public native String sayHellow();  //调用本地方法  12.      13.    static {  14.              System.loadLibrary("Scgps_Client");  //加载本地共享库  15.        }  1.  2.}   2、编写C/C++Code,如下面的例子:C代码  1.#include   2.#include   3.  4.JNIEXPORT jstring JNICALL Java_com_sc

6、gps_client_MainActivity_sayHellow(JNIEnv* env, jobject thiz)  5.{  6.    const char * ret = "Hellow Form Ndk";  7.        return (*env)->NewStringUTF(env, ret);  8.}   3、编译C/C++Code,成功并得到本地共享库  本地共享库是Linux下的叫法,文件扩展名是.so,windows下叫动态链接库,文件扩展名是.dll。前面说到C/C++才是跨平台之王,这就是其中的道理,面对不同的平台,编译不同的结果。相对于Java

7、的一次编译到处运行的跨平台性牺牲运行效率,C/C++的跨平台性则是牺牲编译时间以及编译的难度。这里的编译难度是指为适应不同平台而做的编译过程的调整,这个活的难度可大可小,还不一定成功,视乎平台的兼容性以及支持。说到这里,难免会有人喷了:说什么跨平台性,这么复杂还不稳定!的确C/C++的跨平台性是有局限性的,但是纵观当前的各种平台和系统,有哪家是不支持C/C++本地开发的?只是各自提供的底层API和编译条件不同而已,只需要调整一下C/C++的编译代码,通过编

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。