当前位置: 首页 > 知识库问答 >
问题:

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

姬安志
2023-03-14

我的项目使用两个第三方库(大小都超过10MB)来实现一些语音处理功能。我一次只需要其中一个(就像插件一样),这是我在构建时做出的决定。到目前为止,我已经在同一个模块中使用了两个库的方法。我的身材。格拉德尔有这样的旗帜:

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();
}

我的问题是:

>

  • 有没有一种方法可以基于构建配置字段有条件地编译LIBRARY_ONE或LIBRARY_TWO?即使我不使用其他库,我的APK也越来越大。

    有没有更干净的方法来设计这样的项目?我的代码库中充满了相同条件的if/ther检查。

    我想gradle产品的口味可能会对这种情况有所帮助,但我对它了解不多。有人能确认一下产品风格是否有助于条件编译吗?

    ServiceLoader在这里有什么帮助吗?在一个非Android项目上,我可能会使用它,但基于一些SO帖子,Android实现听起来有问题。

    我的问题不是这个问题的重复。

  • 共有1个答案

    鲁鹏
    2023-03-14

    目前这里有一个问题需要回答

    但是为了解决这个问题,可以在构建中使用flavor构建类型配置。像这样的渐变

    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'
    }
    
     类似资料:
    • 问题内容: 我不知道如何在不使用或的情况下有效解决以下问题: 当一个元素发生故障时,如何恢复堆不变式? 换句话说,更新中至,并保持工作。您可以假设堆中只有一个。功能定义如下: 这是我的真实情况,如果您有兴趣请阅读。 您可以想象它是一个小的自动完成系统。我需要计算单词的频率,并保持前k个最大数量的单词,这些单词随时准备输出。所以我用在这里。当一个单词计数++时,如果它在堆中,我需要对其进行更新。 所

    • 我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当

    • 从我的main开始,我将启动两个线程,称为producer和consumer。两者都包含循环。生产者循环是UDP服务器,因此不需要Hibernate。我的问题出在消费者方面。使用者循环将对象从链接队列中移除,并将其传递给一个函数进行进一步处理。根据研究,在循环中使用线程Hibernate不是一个好的实践,因为有时O/S在设定时间结束时不会释放。如果我删除线程Hibernate,当应用程序是理想的,

    • 虽然我在构建中集成了库。但当我在设备上运行它时,会发生以下错误。 我的代码是这样的,buidl。格拉德尔 我正在使用Lucence的类 模范班 这一切从哪里开始 }

    • 问题内容: 大家好。我正在为一个学校项目工作,在该项目中,我们获得了.class文件,但没有提供包含在我们代码中的源代码。我正在使用Eclipse,并且希望将文件包含在我的项目中,以便可以从中实例化对象并使用它。 该文件是TokenizerImpl.class,我想这样使用它: 我将文件放在项目文件夹中,Eclipse表示“ TokenizeImpl无法解析为类型”,我认为这意味着它找不到类或源。

    • 问题内容: 在Android Studio中包含iTextG时出现以下错误, 我不知道为什么,但似乎这个库中也有awt。这就是我包括的方式: 从http://sourceforge.net/projects/itextg/下载itextg 提取jar文件 将itextg-5.5.4.jar复制到app目录中的libs文件夹 摇篮清洁 为什么awt仍在库中? 问题答案: 请仔细阅读该异常。它谈论。那