zoukankan      html  css  js  c++  java
  • android项目构建过程

    平时开发过程中我们通过android studio编写完成android项目之后直接点击 Run ‘app’就可以在build/outputs/apk生成可以在android设备中安装的apk文件了,那么整个android源码的构建过程是怎么样的呢?

    我们可以根据Google官方提供的流程图来具体了解构建的过程:
    这里写图片描述

    通常的构建过程就是如上图所示,下面是具体描述:

    1.AAPT(Android Asset Packaging Tool)工具会打包应用中的资源文件,如AndroidManifest.xml、layout布局中的xml等,并将xml文件编译为二进制形式,当然assets文件夹中的文件不会被编译,图片及raw文件夹中的资源也会保持原来的形态,需要注意的是raw文件夹中的资源也会生成资源id。AAPT编译完成之后会生成R.java文件。

    2.AIDL工具会将所有的aidl接口转化为java接口。

    3.所有的java代码,包括R.java与aidl文件都会被Java编译器编译成.class文件。

    4.Dex工具会将上述产生的.class文件及第三库及其他.class文件编译成.dex文件(dex文件是Dalvik虚拟机可以执行的格式),dex文件最终会被打包进APK文件。

    5.ApkBuilder工具会将编译过的资源及未编译过的资源(如图片等)以及.dex文件打包成APK文件。

    6.生成APK文件后,需要对其签名才可安装到设备,平时测试时会使用debug keystore,当正式发布应用时必须使用release版的keystore对应用进行签名。

    7.如果对APK正式签名,还需要使用zipalign工具对APK进行对齐操作,这样做的好处是当应用运行时减少内存的开销。

    补充: 关于改善android性能工具zipalign的介绍

    什么是Zipalign? 
         Zipalign是一个android平台上整理APK文件的工具,它首次被引入是在Android 1.6版本的SDK软件开发工具包中。它能够对打包的Android应用程序进行优化, 以使Android操作系统与应用程序之间的交互作用更有效率,这能够让应用程序和整个系统运行得更快。用Zipalign处理过的应用程序执行时间达到最低限度,当设备运行APK应用程序时占更少的RAM(Random Access Memory)随机访问内存,我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本--即使你的程序是在老版本的Android平台下开发的

    Zipalign如何优化?

      Zipalign对apk文件中未压缩的数据在4个字节边界上对齐,当资源文件通过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。4字节对齐后,android系统就可以通过调用mmap函数读取文件,进程可以像读写内存一样对普通文件的操作,系统共享内存IPC,以在读取资源上获得较高的性能。 如果资源本身没有进行对齐处理,它就必须显式地读取它们——这个过程将会比较缓慢且会花费额外的内存。  

      mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作.

      程序中大量运用mmap,用到的正是mmap的这种“像访问普通内存一样对文件进行访问”的功能。当要对一个文件频繁的进行访问,并且指针来回移动时,调用mmap比用常规的方法快很多  

      在4个字节边界上对齐的意思就是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。     

          android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。

      从未对齐的apk中读取资源比较慢且花费较多内存。最好的情况是,Home程序和未对齐的程序启动得比对齐后的慢(这也是唯一可见的效果)。最坏的情况是,安装一些未对齐资源的应用程序会增加内存压力,并因此造成系统反复地启动和杀死进程。最终,用户放弃使用如此慢又耗电的设备。

    Zipalign如何使用?

    使用ADT:

    • 如果你使用导出向导的话,Eclipse中的ADT插件(从Ver. 0.9.3开始)就能自动对齐Release程序包。使用向导,右击工程属性,选择“Android Tools” > “Export Signed Application Package…”。当然,你还可以通过AndroidManifest.xml编辑器的第一页做到。

    使用Ant:

    • Ant编译脚本(从Android 1.6开始)可以对齐程序包。老平台的版本不能通过Ant编译脚本进行对齐,必须手动对齐。
    • 从Android 1.6开始,Debug模式下编译时,Ant自动对齐和签名程序包。
    • Release 模式下,如果有足够的信息签名程序包的话,Ant才会执行对齐操作,因为对齐处理发生在签名之后。为了能够签名程序包,进而执行对齐操作,Ant必须知道 keystore的位置以及build.properties中key的名字。相应的属性名为key.store和key.alias。如果这些属性为空,签名工具会在编译过程中提示输入store/key的密码,然后脚本会执行签名及apk文件的对齐。如果这些属性都没有,Release程序包不会进行签名,自然也就不会进行对齐了。 

    手动:

    • 为了能够手动对齐程序包,Android 1.6及以后的SDK的tools/文件夹下都有zipalign工具。你可以使用它来对齐任何版本下的程序包。你必须在签名apk文件后进行,使用以下命令:zipalign -v 4 source.apk destination.apk
    • 验证对齐:
      • 以下的命令用于检查程序包是否进行了对齐:zipalign -c -v 4 application.apk
  • 相关阅读:
    C# 数据处理——(包括但不限)浮点数设置小数点后位数 (转)
    c#下怎么判断一个字符串是否可以转换为double类型(转)
    C++ string字符串按分隔符分割成一个数组(转)
    C#浮点数保留位(转)
    linq与lambda写法对照(转)
    C# DataTable 和List之间相互转换的方法(转)
    c#写入Mysql中文显示乱码 解决方法(转)
    微博营销之企业微博运营方案实用篇
    “最美店主”走红网络,或成国内欧美第一店
    月饼西施PK愤怒的小鸟,这个中秋狂掀DIY风
  • 原文地址:https://www.cnblogs.com/zhongle/p/10414214.html
Copyright © 2011-2022 走看看