Android组件化

Android组件化架构 - 10.编译优化

2021-01-04  本文已影响0人  今阳说
  1. Android基础编译流程
gradle clean assembleDebug -x lint check –stacktrace

:app:clean  //清理上次编译的遗留,删除module下的build文件夹
:app:preDebugBuild  //debug版本预编译
:app:checkDebugManifest //AndroidManifest检查
:app:prepareDebugDependencies   //检查debug版本的依赖
:app:compileDebugAidl   // 编译debug版本的aidl文件
:app:compileDebugRenderscript   //编译Renderscript文件
:app:generateDebugBuildConfig   //generated/source文件夹下,生成buildConfig文件夹
:app:generateDebugAssets    //生成Assets文件到generated下的asset文件夹
:app:mergeDebugAssets   //在intermediates下生成assets文件夹,将其他module/aar中的assets文件拷贝过来
:app:generateDebugResValues //生成res value文件
:app:generateDebugResources //生成Resources文件
:app:mergeDebugResources    //merge(合并)资源文件
:app:processDebugManifest   //将merge后的Manifest文件放在intermediates/manifests文件夹下
:app:processDebugResources  //处理资源文件,生成R.txt文件,同时也生成对应的multidex文件夹
:app:generateDebugSources   //合成资源文件在generated文件夹下生成对应的R.java文件
:app:compileDebugJavaWithJavac  //使用javac生成java文件
:app:compileDebugNdk    //ndk编译
:app:compileDebugSources    //编译资源文件
:app:transformClassesWithDexForDebug    //将.class文件转换成.dex文件
:app:mergeDebugJniLibFolders    //合并jni(.so)文件
:app:transformNative_libsWithMergeJniLibsForDebug   //转换jni文件
:app:processDebugJavaRes    //处理java资源
:app:transformResourcesWithMergeJavaResForDebug //转换java资源文件
:app:validateSigningDebug    //验证签名
:app:packageDebug   //打包
:app:assembleDebug  //apk编译完成
  1. InstantRun
    AndroidStudio 2.0 推出了InstantRun,意为瞬间编译,在编译开发时减少应用的部署及构建时间
  1. 优化gradle编译
#开启并行编译,相当使用了多线程,仅仅适用于模块化项目(存在多个 Library 库工程依赖主工程)    
org.gradle.parallel=true          
# 使用编译缓存
android.emableBuildCache=true
# 开启构建缓存,Gradle 3.5新的缓存机制,可以缓存所有任务的输出,    
#  不同于buildCache仅仅缓存dex的外部libs,它可以复用任何时候的构建缓存,设置包括其它分支的构建缓存    
org.gradle.caching=true
# 构建初始化需要执行许多任务,例如java虚拟机的启动,加载虚拟机环境,加载class文件等等,
# 配置此项可以开启线程守护,并且仅仅第一次编译时会开启线程(Gradle 3.0版本以后默认支持)    
# 保证jvm编译命令在守护进程中编译apk,daemon可以大大减少加载jvm和classes的时间
org.gradle.daemon=true          
# 最大的优势在于帮助多 Moudle 的工程提速,在编译多个 Module 相互依赖的项目时,
# Gradle 会按需选择进行编译,即仅仅编译相关的 Module    
org.gradle.configureondemand=true           
# 配置编译时的虚拟机大小,加大编译时AndroidStudio使用的内存空间
# -Xmx2048m:指定 JVM 最大允许分配的堆内存为 2048MB,它会采用按需分配的方式。
#-XX:MaxPermSize=512m:指定 JVM 最大允许分配的非堆内存为 512MB,同上堆内存一样也是按需分配的。
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
tasks.whenTaskAdded(new Action<Task>() {
    @Override
    void execute(Task task) {
        if (task.name.contains("lint")//不扫描潜在bug可以使用该项
                || task.name == "clean"
                || task.name.contains("Aidl")//项目中用到Aidl则不可以舍弃这个任务
                || task.name.contains("mockableAndroidJar")//用不到测试时可以先关闭
                || task.name.contains("UnitTest")//用不到测试时可以先关闭
                || task.name.contains("AndroidTest")//用不到测试时可以先关闭
                || task.name.contains("Ndk") || task.name.contains("Jni")//用不到NDK和jni时关闭
        ) {
            task.enabled = false
        }
    }
})
  1. 极速

组件化分发

串行的优化规则是 减少重复操作--缓存,减少重复造轮子
并行的优化规则是 分离业务耦合度--解耦,将注意力放到更小的模块中
分发意味着更深度的解耦,对事物粒度进行更细致的分裂,对组件进行扩展

我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章
上一篇 下一篇

猜你喜欢

热点阅读