手记

安卓运行原理初探

这几天对自己的生活节奏进行了一个比较大的调节,我想这是必要的。。 回归生活,回归现实,回归本真。。

   虽然有很多的知识想去触碰,但是目前而言,自己还是必须迫切的今昔安卓的学习,虽然自己在学习之初最想进行的也是app开发,没啥原因,因为可以自己用自己的产品,cool~~

   但是事实是,需要学习的内容过多。。  其中尤为关键的是web开发技术。。  确实,互联网的成功web技术可以说是居功至伟。。 从它的时间发展来看,也确实是这些其它技术的根源,并且十分健壮,发展了好几十年,1993  至今,不断有新的技术进行更新迭代。。   

    后端:编程语言基础知识,服务器,框架(ssh,ssm,springboot,springcloud  等等,内容就多了去了),安全(加解密,传输安全等),优化(负载均衡等)

    前端:html,css,js(学习不难,但是要结合起来做产品,没有充足的经验是万万不能的,并且也没有涉及到理解原理的层次,因为它太普遍了,普遍到不需要去问为什么),静态页面,动态页面(php,jsp,asp,这应该是一种叫做cgi的技术做的事情吧,辅以js就形成了web2.0),大概在2012年左右,前端三大mvvm框架:angular,vue,react被称之为下一代前端框架开始出现,并且迅速发展。。  之后,node神器出现,时间应该是2014年左右,当然这中间发展的不只是这些产品,es标准也在逐步的更新迭代,5.0,6.0,7.0。  它们迭代的速度之快以至于一些较早的浏览器甚至不能实现它们。。  也就是不能兼容。。

    硬件以及一些技术的外延:移动互联网中的3g标准(当然已经是陈年往事),4g标准,以及将要实现商用的5g标准,移动设别的更新迭代,大概2015年左右,国内的很多手机就打起了价格战,当然最终受益的是消费者。。   andorid与ios,分别于2009与2008推出的移动端的系统,这途中还有微软的一个windows phone最后死掉。。   至今作为移动端的可以说是人机接口的这么一个操作系统应用已经接近10年。  至于电脑的发展,那当然要从硬件说起,如果要从硬件说起,那最早可能就要追溯到算盘了,起了一个实质性的硬件推动作用的一共就是电学物理的发展。。  之后势如破竹,世界上第一台电子计算机距今:2018-1942=76 年,比我父亲的年龄都大,但是比我祖母的年龄还是要小一些的。 。    1970年左右,软件语言开始走入正轨,之后的1971年好像,unix发明了。  然后在1992年linux发明了,作为操作系统,算是人机交互的最伟大的一个贡献了吧。  当然与之同时发展的有苹果,微软的windows帝国。 更别提与之同时网络硬件的一些进步,标准的一些迭代,语言的兴衰。。 总之吧,一路发展,创造了很多辉煌,从1990年至今,几乎每年都有那么一些企业起落,其中就包括了如今让人如雷贯耳的: 谷歌啦,脸谱啦,youtube啦,百度,腾讯,阿里,等等。   2010年左右,又产生了一些新词汇或者说新技术:大数据,云计算,人工智能。(但是人工智能貌似图灵时代就有相关的概念,只不过硬件不达标,实现不了,还有个有名的图灵测试)。    如今人工智能也是被炒的不要不要的。   未来如何发展,我们如何立足,我也很迷茫,对于如此庞大的技术洪流,我们怎么办! 

     所以还是回归生活,回归现实,回归本真!  生活,生下来活下去。

     算是对生活的一丝丝抱怨或者说总结吧。 whatever,今天记录下安卓一些运行原理,后面毕竟还是有计划学习安卓的,或者说系统的学习安卓。  事实上很多的知识都是同时在学的,但是不能达到一个十分扎实的效果。 

    

参考的是网上大牛给的总结,然后用自己的话总结,志不再抄袭,只是为了学习。。 

      安卓的apk文件:  程序运行文件,由dex,资源文件,so 等组成。

      dex:包括R.class,class,jar文件组成

      jar: java中的依赖包,里面放的一些字节码文件,编译时会将其中的一些内容进行链接,类似于库文件。 

     过程如图:    

步骤详解


步骤中提到的工具如下表:

名称功能介绍在操作系统中的路径
aaptAndroid资源打包工具${ANDROID_SDK_HOME}/platform-tools/appt
aidlAndroid接口描述语言转化为.java文件的工具${ANDROID_SDK_HOME}/platform-tools/aidl
javacJava Compiler${JDK_HOME}/javac或/usr/bin/javac
dex转化.class文件为Davik VM能识别的.dex文件${ANDROID_SDK_HOME}/platform-tools/dx
apkbuilder生成apk包${ANDROID_SDK_HOME}/tools/opkbuilder
jarsigner.jar文件的签名工具${JDK_HOME}/jarsigner或/usr/bin/jarsigner
zipalign字节码对齐工具${ANDROID_SDK_HOME}/tools/zipalign

    可以知道它编译时用的是java的编译器,换言之,能不能将andorid理解为java呢?  那么为什么前不久sun会将google告上法庭呢?说它侵权来着。    此外,我们是不是可以区分下android与编程的一点点区别呢?

    这里想表明的是: android是一个操作系统,类似于windows,linux(而且它好像就是Liunx)。 或者说它是一个虚拟机,类似于Java 的 jvm呢?   那么将android与java进行比较会不会有一种 牛头不对马嘴的感觉。。  从它android开发过程中,应该是可以断言它使用java语言来开发的,但是运行的虚拟机不再是jvm了。  是这么个意思吧。。

   打包资源文件:  会根据:resource文件夹,assets文件夹,AndroidManifext.xml文件夹,Android.jar    生成: Resource.ap_  以及 R.java。  

                      执行该动作需要插件的支持,即aapt文件,通常位于 {%ANDROID_SDK_HOME%}/platform_tools/aapt

   adil文件处理:  根据:源码文件,aidl文件,framework.adil文件夹  生成:   .java文件。   需要 aidl工具的支持。

   编译java文件: 生成.class。   对于母语为 java的人来说,这里再熟悉不过了。 

   将.class转化为 Davik VM 能识别的.dex文件:   直觉告诉过这是关键。   根据 .class文件,生成 .dex 文件。  需要dx工具的支持。

   打包生成未签名的apk:  将所有的.dex文件,.so文件(好像是c/c++开发编译后的文件,应该是可重定位的文件,由于linux也是用c开发的,并且这个所谓的Davik VM 虚拟机应该是能够支持.so文件,因此并没有像java的字节码文件那样再进行一次转化,从这个意义来讲,android开发与java又是解耦的,并不一定需要java来开发。)   当然,需要apkbuilder工具的支持,位于:  ${ANDROID_SDK_HOME}/tools/apkbuilder

   对未签名的apk进行签名:  顾名思义,其作用就是签名,需要 Jarsigner工具的支持。 

   对签名后的apk进行对其处理,否则不能发布到谷歌市场: 作用就是对齐,需要工具 zipalign的支持。。 


     最后,总结一下这几个工具:  只有两个工具不是androidSDK提供的,那就是:javac  以及 jarsigner。   androidSDK提供的工具中,分别有三个位于: platform-tools下,可见其是平台性的,它们提供的功能分别是: 资源打包,语言转化。  另外有两个位于tools下,一个是用来生成apk的,一个是用来字节码对齐的。   so ,学习安卓,我认为以下一些内容比较关键: Davik VM 的基本原理,.dex文件的构成。

原文出处

1人推荐
随时随地看视频
慕课网APP