【问题标题】:How to avoid including unused library in Android (or any Java) project?如何避免在 Android(或任何 Java)项目中包含未使用的库?
【发布时间】:2023-03-10 23:50:01
【问题描述】:

我的项目使用 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 项目上,我可能会使用它,但基于一些 SO 帖子,Android 实现听起来有问题。

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

【问题讨论】:

    标签: java android gradle android-gradle-plugin


    【解决方案1】:

    目前您的问题here有一个问题

    但对于解决方法,您可以像这样在 build.gradle 中使用风味 + 构建类型配置

    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'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2019-07-17
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多