Ive*_*ius 3 android build gradle android-studio
Bakground
我出于各种原因在我的项目中使用Google Play服务.Google Play服务是一个很大的依赖,它会大大增加我的构建时间.所以我想为我的"Debug"版本禁用Google Play服务,这样我就可以更快地编译我的项目.
我所做的 ?
要在我的调试版本中排除Google Play服务,我只需执行以下条件编译:
releaseCompile 'com.google.android.gms:play-services-plus:7.5.+'
releaseCompile 'com.google.android.gms:play-services-ads:7.5.+'
releaseCompile 'com.google.android.gms:play-services-gcm:7.5.+'
Run Code Online (Sandbox Code Playgroud)
因此,Google Play服务仅针对发布版本进行编译,而不包含在Debug版本中.所以非常好.
一个陷阱
我的代码中有一些类依赖于Google Play Services.我可以使用接口轻松地抽象它们,然后加载存根.但问题是,这些类仍在我的"Debug"构建期间编译,即使我不是直接引用它们(事实上我正在使用反射加载它们).
解决方法
要忽略我没有使用的类的编译错误,我只是将它们从调试构建类型的源集中排除,如下所示:
debug {
minifyEnabled false
sourceSets {
main {
java {
exclude '**/tracking/impl/**'
exclude '**/GoogleApiClientWrapper.java'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题解决了,我可以通过"调试"版本编译而没有谷歌播放服务,并且构建时间更快.
问题
即使我只在"Debug"构建类型中指定sourceSets块,我也注意到即使在发布版本类型中也会剥离这些类.为什么?如何仅针对Debug构建类型排除这些类?
注意
如果您希望拥有某些构建类型或产品风格所特有的Java类,请将它们放在该构建类型或产品风格的源集中.
如果您有一个典型的Gradle for Android项目结构,那么您可以src/main/java/
根据包名在适当的目录中使用Java类.源集中的那些类main
用于所有构建.
如果您希望类只在release
构建中使用,请创建一个src/release/java/
目录,并将这些类从中移动src/main/java/
到src/release/java/
.
在debug
构建中,release
类被忽略.在release
构建中,使用release
类.
请注意,您无法使用此技术替换中的类main
.所以,你不能com.ivelius.awesomeapp.Foo
在main
和其他com.ivelius.awesomeapp.Foo
的release
-你会得到某种形式的"重复类"的错误.
归档时间: |
|
查看次数: |
3488 次 |
最近记录: |