如何避免在Android(或任何Java)项目中包含未使用的库?

时间:2015-12-24 01:43:53

标签: java android gradle android-gradle

我的项目使用2个第三方库(大小超过10 MB)来处理某些语音处理功能。我一次只需要其中一个(几乎像plugin),这是我在构建期间做出的决定。我已经在同一个模块中使用了两个库的方法。我的 build.gradle 包含以下标志:

  

buildConfigField" boolean"," USE_LIB_ONE"," true"
  buildConfigField" boolean"," USE_LIB_TWO"," false"

在我的Java代码中,我有这样的检查:

if (BuildConfig.USE_LIB_ONE) {
    A.method();
} else if(BuildConfig.USE_LIB_TWO) {
    B.method();
}

我的问题是:

  1. 有没有办法根据buildConfigField有条件地编译LIBRARY_ONE或LIBRARY_TWO?即使我不使用其他图书馆,我的APK也会变得笨重。

  2. 是否有更简洁的方法来设计此类项目?我的代码库膨胀,if / else检查相同的条件。

  3. 我认为gradle产品口味在这种情况下可能有所帮助,但我对此并不了解。有人可以确认产品口味是否对条件编辑有帮助吗?

  4. ServiceLoader可以在这里有任何帮助吗?在一个非Android项目中,我可能会使用它,但Android实现听起来很麻烦,基于一些SO帖子。

  5. 我的问题不是this one的重复。

1 个答案:

答案 0 :(得分:0)

目前您的问题here

存在问题

但是对于解决方法,您可以在build.gradle中使用flavor + build类型配置,就像这样

configurations {
  libOneReleaseCompile
  libTwoReleaseCompile
}

dependencies {
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:support-annotations:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'

    libOneReleaseCompile 'lib.one.speech'
    libTwoReleaseCompile 'lib.two.speech'
}