【问题标题】:Does Android cache the libraries?Android是否缓存库?
【发布时间】:2013-12-02 07:52:10
【问题描述】:

我正在开发一个 Android 应用程序使用的设备驱动程序。每当我对驱动程序进行小修改并重新编译修改后的驱动程序时,似乎该应用程序并未使用修改后的驱动程序,但仍在使用=使用以前的版本。我确信这一点,因为所做的修改包括应用程序运行时不显示的打印语句。

但是,一旦我删除驱动程序并重建它或重新启动系统,它似乎工作正常。 这样做的问题是它很耗时,因为我必须确保应用程序使用的是最新的驱动程序。

所以我的问题是android是否缓存库?如果是这样,是否有任何简单的技巧可以防止它这样做?

编辑: 事实上,我可以删除我的设备驱动程序,并且使用它的应用程序仍然可以运行而不会报告缺少驱动程序的问题!!!!!!!!!!!!!!!!!!

【问题讨论】:

  • 如何安装驱动?它是应用程序的一部分吗? (重新安装应用程序不应缓存任何内容)
  • U 构建驱动程序(现在我正在交叉编译),然后将其保存在 /system/lib .... 以便应用程序在运行时获取它。该应用程序只是一个普通的Android应用程序例如:我,这是一个可以播放视频的厨房应用程序……但是重新安装该应用程序与重新启动系统相同……缓存的东西被扔掉了
  • 杀掉app进程还不够?您的“驱动程序”只是一个 .so 库,您可以将其动态加载到应用程序进程中,对吗?
  • 是的......我的想法......顺便说一句,杀死应用程序你的意思是在应用程序上使用kill命令......我的应用程序播放视频几秒钟然后关闭...... ..视频结束后我做了ps,发现我的app没有列出来....
  • Android(或 zygote)可能会在启动时缓存它们,至少ro.zygote.disable_gl_preload 表明它有能力这样做。另见"speedup is achieved by NOT copying the shared libraries"

标签: android device-driver


【解决方案1】:

是的,android apks 会缓存这些库。如果你已经在你的板上安装了xyz.apk,那么将会创建一个名为com.xyz的文件夹,这个文件夹将包含一个cache文件夹来缓存库,所以新修改的驱动程序不会被apk拾取.
要绕过此效果,您可以

  1. 从上述位置手动删除cache 文件夹。
  2. 卸载apk并重新安装
  3. 重启开发板

【讨论】:

    【解决方案2】:

    HTTP 缓存既重要,因为它可以减少带宽使用并提高性能,也很复杂,因为规则远非简单。以我的经验,大多数 Java 和 Android 应用程序要么不做 HTTP 缓存,要么他们自己做错了,或者以一种过于复杂的方式。换句话说,他们创建了一个非标准的、一次性的、不可维护的解决方案。恕我直言,这根本不是解决方案。

    如果您发现自己在使用 HttpClient,则可以使用 HttpClient-Cache,它是 Java 的一个简单插件。请参阅我之前关于 Android 的 HttpClient-Cache 的帖子。但是,如果您使用的是 HttpUrlConnection(又名 java.net.URL.openConnection()),则对于常规 Java 或 Android 没有好的解决方案。好吧,在 Android 4.0 及更高版本中,您可以使用 HttpResponseCache,但只有一小部分 Android 设备使用 4.0 或更高版本,这不是一个非常好的解决方案。如果您按照 Google 的建议使用 Android 4.0+ 的 HttpResponseCache,那么所有以前的 Android 版本最终都没有 HTTP 响应缓存——这会导致您的服务器负载过重、应用程序性能下降以及不必要的带宽使用。

    为了解决这个问题,我从 AOSP 中获取了所有实现 Android 4.0 的 HttpResponseCache 的代码,并将其作为一个单独的库。该库易于使用,适用于 Java 1.5+、所有版本的 Android,并在 APLv2 下获得许可(就像 AOSP 中的所有其他内容一样)。真的,没有理由不使用它!您甚至可以在 Java 服务器应用程序中使用,例如使用 Spring 的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 2014-03-05
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多