检查Android应用程序中是否使用了Library

2023-12-23

我收到了一些应用程序的遗留代码(不是由我开发的,而是由其他团队开发的,没有文档),它有近 20 多个依赖项,在build.gradle.

现在,我想清理未使用的库/依赖项,方法是将它们从build.gradle

我在谷歌上搜索并发现了这个project http://tools.android.com/tech-docs/new-build-system/resource-shrinking为资源萎缩。但它似乎用于在构建时删除打包应用程序中未使用的资源,并且这还会从您所依赖的库中删除资源(如果您的应用程序实际上不需要它们)。

另外,我用ProGuard,用于混淆和收缩shrinkResources true in build.gradle

我的目的是从 build.gradle 本身中删除未使用的库/依赖项,而不破坏应用程序功能。

有没有一种方法或工具可以显示哪个库可以安全删除而不破坏应用程序功能?


通过 20 多个依赖项,您不需要任何工具并且可以进行手动检查。

我会这样进行:

  1. 注释掉所有依赖项并检查失败的内容(见下文)
  2. 取消注释导致失败的依赖项
  3. Repeat

这样,您可能还会注意到很少使用或可以用标准库或项目中使用的其他库替换的依赖项。

以下内容将表明您需要依赖项(按照减慢反馈循环的顺序):

  • 编译错误
  • 单元测试错误
  • 集成/系统/端到端/设备测试错误(无论您使用和称呼它们)
  • 运行时的应用程序功能
  • 运行时的应用程序性能

运行时依赖关系可能特别棘手。例如,您的代码可能不依赖于某个库,但该库为您依赖的某些其他库提供了运行时实现。删除此类依赖项只会在运行时表现为缺少功能或性能问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查Android应用程序中是否使用了Library 的相关文章

随机推荐

  • 在 Linux 上用 C++ 移动鼠标指针失败

    我使用以下代码来隐藏和显示鼠标光标 XDefineCursor m display m window show None m hiddenCursor XFlush m display 效果很好 但是 当我运行这个时 XWarpPointe
  • 如何将 Joomla recaptcha 插件与我的自定义模块一起使用?

    我为我的联系表格创建了一个自定义模块 现在我想在这个模块中使用 Joomla recaptcha 插件 知道如何完成这件事吗 为了使用 joomla 默认的 recaptcha 插件 请按照以下步骤操作 1 从以下位置获取验证码http w
  • WPF:如何根据 XAML 中另一个文本框的 Text 属性更改文本框的前景色?

    我想将 WPF 文本框的 Foreground 属性设置为红色 只要其 Text 属性与窗体上另一个文本框的 Text 属性不匹配 我可以在后台代码中并通过与转换器的绑定来完成此操作 但是有没有办法只用 XAML 来实现呢 我正在考虑某种触
  • SkipWhile 失败并显示“LINQ to Entities 无法识别该方法...”

    我找不到发生以下异常的原因 非常感谢任何帮助 EdcsEntities is derived from System Data Objects ObjectContext EdcsEntities db new EdcsEntities v
  • Tensorflow 对象检测 API 中的精确召回曲线

    有没有办法在 Tensorflow 对象检测 API 中可视化精确召回曲线 我知道 mAP 代表曲线下面积的绝对值 但我认为实际曲线更适合我的应用程序 我已经在 utils metrics 中找到了一些精度和召回值1 https githu
  • 在 QMenuBar 的另一侧堆叠 QPushButton

    我想堆一些QPushButton我另一边的物体QMenuBar This is how my window looks now And this is how I want it to look like I ve photoshopped
  • Laravel 没有 Eloquent 和数据库迁移?

    我已经是一名 PHP 程序员 12 年了 几乎多次重新发明轮子 为我们的闭源 Web 应用程序构建了自己的框架 该框架作为托管解决方案提供 为所有应用程序使用相同的共享数据库顾客 现在我正在尝试 Laravel 5 并注意到几乎每个示例都使
  • 如何从 PHP 执行 PhantomJS

    我想在本地主机上从 PHP 执行 PhantomJS 任何人都可以解释如何从 PHP 执行 PhantomJS 以及我应该从 phantomjs org 下载什么包 下载PhantomJS 二进制文件 http phantomjs org
  • for 循环中的 __getitem__ 调用

    我正在学习Python 但我什么都不懂 考虑这段代码 class Stack def init self self items def push self item self items append item def pop self r
  • 在两个数据库表中进行循环引用是一个好习惯吗

    在我们的数据库中 我们有两个表 A B 主键为 A id 和 B id 将 B id 作为表 A 中的外键 将 A id 作为表 B 中的外键是否被认为是一个好的做法 这将允许我们在表中拥有多对多关系 另一种方法是使用仅包含两列 A id
  • Hive Flutter 的权限和路径

    我目前正在构建一个应用程序 在其中存储数据并借助 flutter 包 hive 进行增删改查操作 所以我的问题是 我是否需要请求有关存储数据的权限 如果是 那么哪些权限以及存储数据的理想路径应该是什么 谢谢 对于 hive 您不需要添加任何
  • 在c中制作共享数据结构

    我在我的 C 程序中创建了一个数据结构 如下所示 typedef struct int array size t used size t size Array void initArray Array a size t initialSiz
  • 实时验证和复选框、单选、选择组

    Livevalidation 脚本非常适合验证表单 但您应该如何处理复选框 单选和选择组 参见网站 http www livevalidation com http www livevalidation com 这是可以做到的 尽管 Liv
  • 我该如何解决这个问题,res.json不是一个函数

    我的问题如下 我用 guzzle 发送数据 并收到错误 类型错误 res json 不是函数 client new GuzzleHttp Client response client gt request get http localhos
  • 引起:java.lang.NoClassDefFoundError:org/apache/log4j/Logger

    我有一个有趣的问题 在运行时找不到 org apache log4j Logger 类 我正在尝试获得授权 但这就是失败的地方 OAuthAuthorizer oauthAuthorizer new OAuthAuthorizer OAUT
  • 了解协程的执行

    我在 Unity 中工作 但这实际上只是一个 C 问题 所以我希望这是发布此问题的正确部分 无论如何 我仍然很难在脑海中想象脚本的执行情况 特别是当有多个脚本正在运行并且它们都有不同的功能时 最近它变得更加复杂 因为我将 Update Fi
  • 如何使用 Websocket 发送旧消息

    我有一个有效的 Websockets 示例 其中客户端从服务器接收消息 我不确定当客户端连接时应该如何向客户端发送旧消息 Example 每个客户端在连接时提供他们的名字 服务器响应 名称 刚刚连接 对所有客户端 任何新客户都不会收到这些消
  • JSF t:datatable 和 c:forEach 看起来有冲突

    I have
  • 将新的简单 javascript 注入到 magento 后端(作为模块)

    我想在 magento 产品管理后端的一些描述和元字段上添加简单的字符计数器功能 就像下面的屏幕截图一样 我通过将简单的原型脚本添加到在 magento 管理 HTML 上加载的 JS 文件之一来做到这一点 我选择 browser js j
  • 检查Android应用程序中是否使用了Library

    我收到了一些应用程序的遗留代码 不是由我开发的 而是由其他团队开发的 没有文档 它有近 20 多个依赖项 在build gradle 现在 我想清理未使用的库 依赖项 方法是将它们从build gradle 我在谷歌上搜索并发现了这个pro