zoukankan      html  css  js  c++  java
  • eclipse中android项目的编译过程分析

    本文主要对eclipse中android项目的编译过程进行分析

    本文只做分析,关于加快eclipse下android项目编译速度请见下一篇博客

    Ps:本文中编译过程输出都是以真机(htc g7)作为avd,项目名为AONE,测试项目名为AoneTestProject,api level为8。

    1、查看eclipse下android项目的编译过程

    选择Window > Preferences > Android > Build > Build output > Verbose. 在console窗口的显示类型(一个显示器样式的图标)选择android。

    2、具体编译过程

    2.1 如果一个项目未曾修改,第一次在真机运行(即直接Run)输出为

    [2012-03-19 15:44:54 - AONE] ------------------------------
    [2012-03-19 15:44:54 - AONE] Android Launch!
    [2012-03-19 15:44:54 - AONE] adb is running normally.
    [2012-03-19 15:44:54 - AONE] Performing com.trinea.sns.activity.AccountManageActivity activity launch
    [2012-03-19 15:44:54 - AONE] Automatic Target Mode: using device 'SH135PL00278'
    [2012-03-19 15:44:54 - AONE] Uploading AONE.apk onto device 'SH135PL00278'
    [2012-03-19 15:44:55 - AONE] Installing AONE.apk...
    [2012-03-19 15:45:06 - AONE] Success!
    [2012-03-19 15:45:06 - AONE] Starting activity com.trinea.sns.activity.AccountManageActivity on device SH135PL00278
    [2012-03-19 15:45:07 - AONE] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.trinea.sns.activity/.AccountManageActivity } 

    从中可以看出install apk过程比较缓慢,但这一步优化的难度过高,而且只会第一次耗时较长优化的必要性不大,暂不作优化。

    2.2 对于一般修改,build过程解析

    修改一个java文件后保存(已勾选Build Automatically),build信息输出如下:

    [2012-03-19 15:50:04 - AONE] Refreshing resource folders.
    [2012-03-19 15:50:04 - AONE] Starting incremental Pre Compiler: Checking resource changes.
    [2012-03-19 15:50:04 - AONE] Attribute minSdkVersion (3) is lower than the project target API level (8)
    [2012-03-19 15:50:04 - AONE] Nothing to pre compile!
    [2012-03-19 15:50:04 - AONE] Starting incremental Package build: Checking resource changes.
    [2012-03-19 15:50:04 - AONE] Dx ignored resource D:\Eclipse\google code\AONE\bin\.\.svn\text-base\resources.ap_.svn-base
    [2012-03-19 15:50:04 - AONE] Dx processing D:\Eclipse\google code\AONE\bin\.\com\trinea\sns\view\AccountView.class...
    ……
    [2012-03-19 15:50:19 - AONE] Using default debug key to sign package
    [2012-03-19 15:50:19 - AONE] Using keystore: C:\Users\Trinea\.android\debug.keystore
    [2012-03-19 15:50:19 - AONE] Packaging AONE.apk
    [2012-03-19 15:50:19 - AONE] D:\Eclipse\google code\AONE\bin\resources.ap_:
    [2012-03-19 15:50:19 - AONE] => res/drawable/aone.png
    ……
    [2012-03-19 15:50:19 - AONE] => res/layout/account_manage_list.xml
    ……
    [2012-03-19 15:50:19 - AONE] => AndroidManifest.xml
    [2012-03-19 15:50:19 - AONE] => resources.arsc
    [2012-03-19 15:50:19 - AONE] D:\Eclipse\google code\AONE\bin\classes.dex => classes.dex
    [2012-03-19 15:50:20 - AONE] D:\学习\Coding\Android\lib\signpost-commonshttp4-1.2.1.1.jar:
    ……
    [2012-03-19 15:50:20 - AONE] => javax/servlet/http/LocalStrings.properties
    ……
    [2012-03-19 15:50:20 - AONE] Build Success!
    [2012-03-19 15:50:21 - AONE] Refreshing resource folders.
    [2012-03-19 15:50:21 - AONE] Starting incremental Pre Compiler: Checking resource changes.
    [2012-03-19 15:50:21 - AONE] Attribute minSdkVersion (3) is lower than the project target API level (8)
    [2012-03-19 15:50:21 - AONE] Nothing to pre compile!
    [2012-03-19 15:50:21 - AoneTestProject] Starting incremental Package build: Checking resource changes.
    [2012-03-19 15:50:21 - AoneTestProject] Dx processing D:\Eclipse\google code\AoneTestProject\bin\.\com\trinea\sns\utilImpl\AutoGetDataCacheTest.class...
    ……
    [2012-03-19 15:50:29 - AoneTestProject] Using default debug key to sign package
    [2012-03-19 15:50:29 - AoneTestProject] Using keystore: C:\Users\Trinea\.android\debug.keystore
    [2012-03-19 15:50:29 - AoneTestProject] Packaging AoneTestProject.apk
    [2012-03-19 15:50:29 - AoneTestProject] D:\Eclipse\google code\AoneTestProject\bin\resources.ap_:
    ……
    [2012-03-19 15:50:29 - AoneTestProject] => resources.arsc
    [2012-03-19 15:50:29 - AoneTestProject] D:\Eclipse\google code\AoneTestProject\bin\classes.dex => classes.dex
    [2012-03-19 15:50:29 - AoneTestProject] D:\Eclipse\google code\qqTAndroidSdk\target\QqTAndroidSdk-1.0.0-jar-with-dependencies.jar:
    [2012-03-19 15:50:29 - AoneTestProject] => org/apache/log4j/lf5/config/defaultconfig.properties
    ……
    [2012-03-19 15:50:30 - AoneTestProject] => javax/servlet/http/LocalStrings.properties
    ……
    [2012-03-19 15:50:30 - AoneTestProject] D:\学习\Coding\Android\lib\trinea-sina-weibo.jar:
    ……
    [2012-03-19 15:50:30 - AoneTestProject] Build Success!
    [2012-03-19 15:50:30 - AoneTestProject] Refreshing resource folders.
    [2012-03-19 15:50:30 - AoneTestProject] Starting incremental Pre Compiler: Checking resource changes.
    [2012-03-19 15:50:30 - AoneTestProject] Nothing to pre compile!
    

    以上省略号表示与上一语句类似 

    从上面我们可以发现

    a. 源项目AONE和测试项目AoneTestProject会同时被编译

    b. 源项目和测试项目的编译过程基本包括刷新资源文件、预编译、增量构建、dx class文件、对包进行签名、打包成apk文件

    c. 其中dx class文件过程耗时最长,达到15秒左右。而dx过程不仅编译本项目class文件,同时会编译所有依赖包的class文件,所以会根据项目生成的class文件个数以及依赖个数而变。

    由此可见对于优化的重点可以放在dx过程中,android adt提供的dx工具没有缓存上次dx信息,导致每次都需要重新dx所有class,性能表现实在差劲,具体优化可以见加快eclipse下android项目编译速度

    参考:http://stackoverflow.com/questions/2883635/android-compilation-is-slow-using-eclipse



    已有 0 人发表留言,猛击->>这里<<-参与讨论


    ITeye推荐



  • 相关阅读:
    java如何得到GET和POST请求URL和参数列表
    Java中,当表单含有文件上传时,提交数据的如何读取
    图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
    Multipart/form-data POST文件上传详解(转)
    如何控制微信分享网页时,展示的标题,描述和图片
    微信的分享功能(针对web手机站页面进行的分享功能)
    关于linux下内存使用的一些疑惑[转载]
    【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
    【转】javascript中的LHS与RHS
    [转] linux系统中如何进入退出vim编辑器,方法及区别
  • 原文地址:https://www.cnblogs.com/trinea/p/2420105.html
Copyright © 2011-2022 走看看