是否建议在 Android/Dalvik 上使用 ProGuard 合并类?

2023-12-28

我突然想到,我们使用的 ProGuard 代码优化之一,即合并类层次结构,可能根本不是一个好的选择。

我的预感是,合并类以减少 ClassLoader 的调用是有益的,这至少在 JVM 上是一个特别慢的操作,并且在我们的代码中,我们选择了许多较小的(通常是内部的)类,而不是大的神对象类,所以ClassLoader会运行得比较频繁。

然而,考虑到极端(可能不太可能)的情况,即所有类都将合并为一个类,那么即使加载器只会被调用一次,我们最终也会将大量代码加载到内存中,而这些代码很可能永远不会被使用(我猜 80/20 规则也适用于此)。

这让我想知道:

1)Dalvik 中的类加载实际上有多快?这是一个值得通过使用类合并来减少的操作吗?

2) 也就是说,您会建议在 Android 上使用类合并吗?


当类/接口被不必要地分割时,垂直类合并会折叠类/接口及其扩展/实现。这应该始终是一种改进(尺寸和性能)。

对于水平类合并,我无法提供一般性答案。代码库会更小,但可以想象,某些代码可能会很快加载,或者在极端情况下,加载是不必要的。

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

是否建议在 Android/Dalvik 上使用 ProGuard 合并类? 的相关文章

  • 尝试在 WebView 中加载时“使用完成操作”

    我正在测试 Android 应用程序中的内置 WebView 我的问题是下面的代码 WebView webView WebView findViewById R id webView1 webView loadUrl http google
  • Android 键盘调整大小

    我正在开发一个应用程序 其中包含 Activity 和Fragment 在片段布局中 我使用相对布局作为父布局 底部和滚动视图之间的一个按钮 Scrollview包含编辑文本框 如果我点击最后一个editTextBox在滚动视图中我的键盘隐
  • 如何每分钟运行一次BroadcastReceiver?

    我正在开发一个应用程序来每分钟监控网络 我正在为此使用广播接收器 我想每分钟后执行一次 BroadcastReceiver 我该怎么做 我可以在 BroadcastReceiver 中使用 Thread sleep 吗 在android中持
  • ScrollView 与relativelayout 不能很好地配合

    所以我有一个 ScrollView 作为布局中的最高级别 在我的 ScrollView 中我有一个包含其他视图的相对布局 问题在于 RelativeLayout 没有按应有的方式覆盖整个布局 它会在大约一半的屏幕处被截断 它的宽度是屏幕的整
  • 将 HTML5 转换为独立的 Android 应用

    我有一个动态HTML5不包含任何外部资源的文档 文档内没有编码图像 CSS 和脚本 这个 HTML5 应用程序在互联网浏览器上运行良好 我想知道是否有可能convert this HTML5 应用程序转换成独立的 Android 应用程序
  • 无法将 LocalBroadcastManager 添加到 Android Studio 中的项目

    我想我现在已经尝试了一切 我一直在堆栈溢出 我什至咨询过android文档 这里的大多数帖子都展示了如何在 Eclipse 中添加 jar 文件 android 工具 gt 添加支持库 或其他内容 所以我尝试按照文档告诉我的方式进行操作 方
  • Android Market支持QHD

    使用摩托罗拉 Atrix 4G 无法下载我发布的应用程序并安装在手机上 建议的答案是这样做
  • 如何在 Android Fragments 中添加操作栏选项菜单

    我想在其中有一个选项菜单安卓碎片 ActionBar选项菜单未显示在我的片段中 这是我的代码 我都有onCreateOptionsMenu and onOptionSelected 功能 我的代码没有显示任何错误 但选项菜单未显示 pack
  • 使用 Robotium 缓慢或快速向上拖动(滚动)

    这是我用于拖动当前屏幕的代码 int screenWidth getActivity getWindowManager getDefaultDisplay getWidth int screenHeight getActivity getW
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • Android AsyncTask onPreExecute 未不确定地调用

    我有一个 AsyncTask 它应该在通过互联网上传一些内容时显示进度条 有时它就像一个魅力 有时它不显示任何进度条 这是代码 public class Upload extends AsyncTask
  • Android中如何使用ScrollView?

    我有一个 XML 布局文件 但文本超出了屏幕尺寸 我需要做什么才能制作ScrollView
  • 如何停止和重新启动 Android 仪器测试中的活动?

    我正在尝试编写一个停止的 Android 活动仪器测试 onPause then onStop 并重新启动当前活动 我试过 activity finish activity getActivity 但这似乎不能正常工作 测试的目的是断言表单
  • Android 上的推送通知:IBM MQTT

    我对 Android 环境非常陌生 必须使用上给出的 wmqtt jar 示例应用程序来设置客户端http www 01 ibm com support docview wss http www 01 ibm com support doc
  • 从 RxAndroid 1.x 迁移到 2.x(包括 RxJava)

    我有一个运行 RxAndroid 1 x 的项目 一切正常 我正在尝试迁移到 2 x 版本 我的等级文件 dependencies compile fileTree dir libs include jar compile com andr
  • 如何使用 Android Studio 在真实设备中测试 Android 应用?

    我开始在android中开发Android Studio IDE 我在上测试了我的应用程序emulator并且工作正常 但是当我尝试直接在我的设备中测试应用程序时 无法识别它并且控制台显示下一条消息 等待设备 未找到 USB 设备 我在运行
  • 如何在运行时将元数据信息写入Android Manifest

    我知道可以编辑 Android 清单组件 例如 将其设置为启用 禁用等 我想在运行时将元值标签插入到 Android 清单的应用程序标签中 我怎样才能直接写入android清单 这是我想直接写入我的应用程序的 Android 清单中的字符串
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • Spotify API:INVALID_APP_ID

    我目前正在开发一个实现 Spotify API 的 Android 应用程序 我已经使用教程将我的应用程序连接到 Spotify 的所有代码 并且已经在我的应用程序上工作了一段时间了 当我在验证用户身份后通过我的应用程序播放歌曲时 它在我的
  • 可断点续传上传(适用于 Android 或 Java 的 Google Drive SDK)

    我曾提到过检查上传和下载进度 https stackoverflow com questions 13580109 check progress for upload download google drive api for androi

随机推荐