luckybilly / CC

业界首个支持渐进式组件化改造的Android组件化开源框架,支持跨进程调用。Componentize your android project gradually.
https://luckybilly.github.io/CC-website/
Apache License 2.0
4.04k stars 636 forks source link

对于是否排除组件App打包 local.properties不生效 #92

Closed yhxxxbl closed 5 years ago

yhxxxbl commented 5 years ago

您好,当前使用的是CC最新版本 我通过addComponent方式依赖的组件在打包时不参与编译 导致最后生成的包内容缺失,不包含组件App

def curModuleIsBuildingApk = taskIsAssemble && (mainModuleName == null && isMainApp(project) || mainModuleName == project.name) project.ext.addComponent = { dependencyName, realDependency = null -> //不是在为本app module打apk包,不添加对组件的依赖 if (!curModuleIsBuildingApk) return;

我运行时应该是在最后一行return了 麻烦您能给个思路吗,可能遇到的情况

luckybilly commented 5 years ago

是点击android studio上的Run按钮打包吗? 还是通过命令行执行打包命令?命令内容贴一下吧

yhxxxbl commented 5 years ago

具体的命令是这样的 @echo off call adb shell rm /sdcard/testplugin/host_classes.dex call gradle ^ host_main:clean ^ host_main:assembleOnlineDebug

yhxxxbl commented 5 years ago

就是我在local.properties中设置组件App=false后 执行上述命令后打包仍会排除组件App 编译时我手动打印出来的组件App的runAsApp为true

luckybilly commented 5 years ago

打包日志的这一段截图看一下 image

yhxxxbl commented 5 years ago

这段log没打印出来过,所以才会有疑问在上面代码那里就return了T.T

luckybilly commented 5 years ago

主要是这段log的上半部分:我截图中的第3行日志

yhxxxbl commented 5 years ago

麻烦您了! 场景是:我需要将一个组件独立编译App且需要灵活切换 前置条件:local文件中设置为false且addComponent project 但打包流程中并没有出现该组件的configure project 所以3、4是非常规流程截取的log(3\4中的模块即为被漏掉的组件) 第一个是主工程的: hostmain 第二个是依赖了CC但是没有独立编译成App的组件: bi-build 第三个是使用gradle build命令编译的 独立运行且需要切换是否隔离的组件: crm-gradle 第四个是去掉addcomponent 改成combile/implementation project的log crm-combile

yhxxxbl commented 5 years ago

通过我自己打日志发现就是在if (!curModuleIsBuildingApk)这句return了

luckybilly commented 5 years ago

在cc-register插件在ProjectModuleManager.groovy中通过当前执行的task来判断是否正在为某个module打包

通过你的截图日志看来,是由于task列表中包含了其它module的build task,并且fsprobuf:build在第一个,导致在initByTask()方法中第一个被匹配到。从而使得mainModuleName=fsprobuf, 导致host_main的curModuleIsBuildingApkfalse

image

解决问题的思路是:需要确保打包命令的task列表中不包含其它能匹配正则表达式TASK_TYPES的task,如果实在不行,也要确保host_main:assembleOnlineDebug在task列表中所有匹配该正则表达式的第一个,例如:[host_main:clean, host_main:assembleOnlineDebug, fsprobuf:build, ......]

yhxxxbl commented 5 years ago

最后问题得到解决,十分感谢!

63 这个问题和是类似的情况,都是在initByTask()中正则无法匹配到正确的moduleName导致的

遇到这种问题可以参考楼上billy的回答 或者修改TASK_TYPES正则的参数都是可行的办法!