android-cn / android-discuss

Android 问题交流讨论坛, 微信公众号:codekk, 网站:
https://github.com/android-cn/android-discuss/issues
Apache License 2.0
4.08k stars 535 forks source link

android studio module 过多 #666

Open kangdawei opened 6 years ago

kangdawei commented 6 years ago

20几个module,运行或打包过慢的问题怎么解决?

biaomingzhong commented 6 years ago

调试看看哪里花的时间最长

assembleDebug --profile

常用 配置 Gradle cache、Android build cache 、xmx:

org.gradle.jvmargs=-Xmx8192m -XX\:MaxPermSize\=1024m
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
android.enableBuildCache=true

启动的gradle 任务的时候选择性的 --configure-on-demand--offline

以及 更新到最新的 Android plugin for Gradle

jp1017 commented 6 years ago

楼上说的很好, 补充一下:

  1. module稳定后生成aar, 主项目引用aar
  2. 屏蔽掉一些无用task: http://www.jianshu.com/p/0d67f68beb38
biaomingzhong commented 6 years ago

@jp1017 引用 aar 是需要稳定的 module 不经常改变,非业务模块,例如:第三方库的包装 module ,若有修改的时候,需要手动生成

赞一个屏蔽task

biaomingzhong commented 6 years ago

@jp1017 有个非常麻烦的是 module 之间如果存在资源 res 互相调用的情况

借此贴提出来,希望有大神解答下:

tianshaokai commented 6 years ago

根目录 gradle.build 添加如下配置

allprojects {

gradle.taskGraph.whenReady {
    tasks.each { task ->
        if (task.name.contains("Test")
                || task.name.contains("mockableAndroidJar")
                || task.name.contains("Lint")
                || task.name.contains("Aidl")
           || task.name.contains("Ndk")
            || task.name.contains("Jni")) {
            task.enabled = false
        }
    }
}

}

去掉没有用的gradle task,可以减少很多时间

csbz17027 commented 6 years ago

@biaomingzhong 既然A、B、C模块资源需要互相调用,那么这些资源直接放到大家都引用的support模块去不就可以了吗?

biaomingzhong commented 6 years ago

@csbz17027 普通资源图片之类的可以这样处理,若是自定义 View 需要 attrs 属性这些的引用就尴尬了,现在是按照官方推荐的使用 implementation,不能使用 compileOnly

biaomingzhong commented 6 years ago

就算不是自己的模块,引入一个第三方库,第三方库包含了一些自定义 view 的 attrs 配置,也是只能使用 implementation,不能使用 compileOnly