alibaba / freeline

A super fast build tool for Android, an alternative to Instant Run
https://www.freelinebuild.com/
BSD 3-Clause "New" or "Revised" License
5.48k stars 623 forks source link

编译类型使用applicationIdSuffix的场景,增量编译后必现IDE报错R文件找不到 #832

Open biyeshengplay opened 7 years ago

biyeshengplay commented 7 years ago

为方便测试,需要实现debug版和release版安装在同一设备上,于是在build.gradle里面使用applicationIdSuffix,为debug的applicaionId添加后缀

defaultConfig { applicationId "com.xx.xx" ... }

buildTypes { debug { applicationIdSuffix ".debug" ... } release { ... } }

通过Run和freeline全量编译时一切正常,但是一旦freeline增量编译,AS就会报R文件找不到。

观察编译后的R文件,均正常生成 projectDir/build/generated/source/r/debug/com.xx.xx/R.java

Run和freeline全量编译时生成的R.java 包名为 package com.xx.xx; 但是freeline增量编译以后R.java 包名被修改为 package com.xx.xx.debug;

增量编译后R文件的包名添加了后缀,导致项目内所有 import com.xx.x.R; 的地方都报错

jinsen47 commented 6 years ago

productFlavor suffix也会有同样的问题

jinsen47 commented 6 years ago
--- a/freeline_core/gradle_tools.py
+++ b/freeline_core/gradle_tools.py
@@ -967,6 +967,8 @@ class BuildBaseResourceTask(Task):
                 aapt_args.append(adir)

         base_resource_path = get_base_resource_path(self._config['build_cache_dir'])
+        aapt_args.append('--custom-package')
+        aapt_args.append(self._config['package'])
         aapt_args.append('-m')
         aapt_args.append('-J')
         aapt_args.append(self._finder.get_backup_dir())

@biyeshengplay