安卓应用如何工作 里面都有些什么文件——揭秘app那点事
- 相关推荐
我们生活中使用手机,经常每一天不停的安装或者删除应用。那这些应用都是怎么做出来的呢?到底是怎么运行工作的呢?安装包里面到底有什么文件呢?
今天我给大家揭开这个谜题。说到应用,大家肯定想到是程序员编程出来的。如果从最基础的编程讲起,可能大家感觉太复杂,也太晦涩难懂。所以我今天就从别人做好的应用下手,看看应用有哪些文件?这些文件到底起怎么作用?
下面我们以安卓安装包apk文件作为例子。apk其实就是一个压缩文件,把它的文件扩展名改成zip格式之后可以直接解压,今天,我们拆开一个安卓应用的安装包,看看里面到底都有些什么。
我们随便拿个app做实验,因为apk是个压缩文件,所以直接把它的扩展名改为zip即可。
将安装包解压后,我们可以看到里面的一些文件夹和文件
这些文件有什么用呢?这些应用所有的代码、资源和配置文件都在里面,接下来我主要给大家讲一些主要文件的功能。
1,/assets
通常这个文件夹里存放的是一些静态文件,比如说明文档或者字体文件,我们以上图app安装包为例,它的/assets目录下有个名为fonts的子目录,打开它,我们可以看到两个ttf格式的字体文件。
当然了,不同类型应用的安装包,它/assets里面包含的资源也是不同的,比如有些浏览器应用的/assets目录下有很多html格式的文件,这些文件用浏览器可以直接打开。
2,/META-INF
通常这个文件夹里存放的是安装包的签名证书和安装包中所有文件哈希值的计算结果。
应用程序的安装包在打包的时候,每个文件都会经过校验计算,计算结果就存放在/META-INF里,我们可以直接使用文本编辑器来打开后缀名为MF和SF的记录这些文件校验计算结果的文件。
在我们安装一个应用的时候,系统会首先根据/META-INF里的文件校验结果来核实安装包中文件的正确性和完整性,目的是确保安全,避免用户安装到遭受过病毒感染的或者被恶意篡改过的应用程序。
这个文件夹下的RSA格式的文件是开发者对该应用程序进行签名的签名证书文件,你若玩过塞班系统,那应该对这个词并不陌生,这也是为了保证应用程序和系统的安全,签名文件不是纯文本格式,不过当我们用文本编辑器打开它时,可以在乱码中零散地看到Microsoft Corporation字样。
3,/res
res是resource的缩写,里面存放的是应用程序的资源文件,比如图片素材和布局文件,这个文件夹下有很多子目录,
其中,以anim开头的文件夹,通常里面存放的是应用程序的动画效果资源;
以color开头的文件夹,通常里面存放的是应用程序的各种颜色值;
以drawable开头的文件夹,通常里面存放的是应用程序的图片或图形资源;
有些以drawable开头的文件夹在结尾会跟着诸如hdpi、xhdpi这样表示解析度的字符,目的是适配不同分辨率的屏幕。
我们来进入一个以drawable开头的文件夹,可以看到里面有png和webp格式的图片,其中,webp格式的图片可以用旗鱼浏览器打开:
以layout开头的文件夹,通常里面存放的是应用程序的界面布局文件;
4,/AndroidManifest.xml
AndroidManifest.xml是一个单独的文件,里面包含很多信息,比如应用程序的包名、数据权限、接口权限、版本信息、安装参数等等,另外,它还可以声明应用程序的每一个组件及其属性,声明应用程序所申请的权限、进程,声明显示模式等等,AndroidMainfest.xml里面包含的信息太多了,单独为它开一篇文章都不为过。这是一个非常重要的文件,它的名称是固定的,不能随意修改。
5,/classes.dex
这是可在安卓的Dalvik虚拟机中直接运行的字节码,是由JAVA的源代码经过复杂的编译形成的,和传统的.class文件相比,dex文件的运行效率更高。
6,/lib
通常这个文件夹中会存放一些应用程序依赖的库,一般以.so结尾。
到了这里你可能会问了,你让我们把apk安装包拆开了,可是里面的东西有好多都看不了啊,用记事本打开以后是乱码阿,有什么用啊?大家先不要着急,我们下一期接着讲安卓应用反编译。可能这个大家看得比较枯燥,下一期我带大家去做实战。