Android学习之(一):从零开始学Android

        Android--个人认为是Google的神举之一。打从诞生之初,就以爆炸的形似蔓延全球。直至今日,仍是手机终端系统、移动设备的主导者。而且还不断的发展......

     其人性化的操作方式,清晰的体系结构让无论是使用者还是开发者都觉得很容易入手。目前各类app不断被开发,功能不断丰富,有大举赶上甚至超越PC应用的趋势。还是来看看Android长什么样。(附上经典图)


Android操作系统总体框架如图所示,主要包括:

(1)应用程序层(Application)——各种APK和组件


(2)应用程序框架层(Application Framework)——Java编写,实现Android的系统框架和GUI,应用开发的平台,主要包括:

Activity ManagerActivityAndroid应用程序中最小执行单元。Activity Manager管理每个Activity的生命期及相关行为。

Window ManagerAndroid的应用程序包含有很多WindowsWindow Manager用于管理Windows

Content Provider:支持各应用之间共享数据


(3)LibrariesAndroid Runtim层——采用C/C++语言编写,主要为上层GUI和系统服务(Application Framework )提供一些底层实现。Runtime是Android运行时环境。提供了核心链接库(Core Libraries)和Dalvik VM虚拟系统。采用Java开发的应用编译成apk后交给Android操作系统来执行。开发者用Java编写app时,先是生成了源代码(.Java),编译—>(.class),再编译—>Dalvik VM执行的文件(.dex),包装—>Android可执行的文件(.apk)。


(4)Linux内核层——Linux内核提供系统核心服务,如进程、内存、电源管理,网络连接,驱动与安全等。也是硬件和其他软件程序代码之间的抽象层。


    Java和C/C++能调用衔接很关键的一种技术就是JNI。

        Android上层的ApplicationApplication Framework都是使用Java编写,底层包括系统和使用众多的Libraries都是C/C++编写的。所以上层Java要调用底层的C/C++函数库必须通过JavaJNI来实现。

       从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。

使用JNI的核心是JNINaiveMethod结构体,这个结构是jni.h中定义如下:

Typedef struct {

  Const char* name;           // JNI函数的名称

  Const char* signature;      // 描述JNI函数的参数和返回值

  Void* fnptr;                //JNI函数对应的C语言的函数指针

} JNINATIVEMETHOD;

JNINaiveMethod第一个参数是字符串,JNI函数的名称,对应于JAVA中使用的方法名称;第二个参数也是字符串,表示参数和返回值的类型;第三个参数是JNI函数对应的C语言的函数指针。

       Java通过java JNI调用本地方法,而本地方法是以共享库(*.so)文件的形式存放的,通过调用本地库文件的内部方法,使java可以实现和本地机器的紧密联系,调用系统级的各接口方法。在java语言中,用native关键字声明的方法就是java调用的本地方法,例如:public  native  void hello() ; //java调用本地方法hello

Jni对于应用本身来说,可以看做一个代理模式。对于开发者来说,需要使用c/c++来实现一个代理程序(jni程序)来实际操作目标原生函数,java程序中则是jvm通过加载并调用此jni程序来间接地调用目标原生函数。

                                                     

                                                                            Jni调用过程示意图

需要注意的是,利用C/C++完成的底层代码的安全性较弱,无法防止开发者利用无效的指针来改写内存,这样会导致虚拟机安全性削弱。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机下实现。




   





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值