AndroidStudio多模块编译之子模块的调试
我们构建规模较大的Android工程时为了复用和分工协作,会使用到多模块构建应用程序。有时候一个App的编译也依赖于多个子模块,这样的App通常由一个app模块和若干个library模块组成。我们通过compile project(‘:library’)的方式就可以引入子模块供我们所用。但这种情况下有个问题,主模块引入的library默认情况下总是以release方式编译。
子模块无法调试和打印LOG
这就意味着,不管app模块是以debug还是release方式编译,子模块的BuildConfig.DEBUG的值永远是false,且log不得输出,更重要的是release版本中本地代码无法断点调试。
相关现象的英文描述引用:
By default a library only publishes its release variant. This variant will be used by all projects referencing the library, no matter which variant they build themselves. This is a temporary limitation due to Gradle limitations that we are working towards removing.
1.子模块发布debug版本
要解决这个问题,最直接的就是指定子模块固定发布debug版本供其他模块引用,You can control which variant gets published:
1 | android { |
如果有Flavor,也需要指定Flavor:
1 | android { |
这样以后,子模块发布的版本总是被指定为debug版本,调试也可以正常进行了。
2.根据主模块切换编译方式
上一种办法,通过添加 defaultPublishConfig “debug” 解决了调试问题,这样虽然再debug状态下好使了,但是在发release版本的时候会导致DEBUG仍然为true。
除非手动修改defaultPublishConfig “release”,我们想实现其随app模块的切换自动切换呢。
- Library
1 | android { |
- App
1 | dependencies { |
这些配置也很容易理解,就是让子模块生成多个arr包,主模块根据需要来决定编译时引用哪一个。
3.更多参考资料
- https://github.com/akaita/AndroidNativeLibrary
- http://www.akaita.com/post/android-native-library-module-debug/