【问题标题】:Include an early version of android framework JAR in my application APK?在我的应用程序 APK 中包含早期版本的 android 框架 JAR?
【发布时间】:2012-07-26 02:23:59
【问题描述】:

我已经构建了一个在 Android 2.3.* 和 4.0.* 上运行良好的 Android 应用。但是,在将我的设备升级到 Jelly Bean (4.1.1) 后,我发现我的应用程序无法正常运行(崩溃、ANR 等)。

作为一种临时解决方法,我想知道是否可以将 Android 框架 JAR 的早期版本(例如 Android 2.3)打包到我的 APK 中并强制我的所有代码使用该 JAR 中的类/API?

我认为在我的 APK 中包含 JAR 应该更容易。但我不知道如何强制我的代码在运行时使用 JAR 中的类/API。

我知道这不是一个体面的解决方案(黑客攻击、包大小、法律问题等),即使它会起作用。但我只是好奇这是否可行。

任何建议或提示将不胜感激!

(编辑)

我尝试了以下方法:

  1. 从 Android 2.3 ROM 中提取 /system/framework/framework.odex
  2. 对其进行解译并将其转换为 JAR 文件(例如 framework.jar);
  3. 我验证了 framework.jar,它包含实际的框架代码,而不是存根方法;
  4. 将framework.jar 放入我项目的libs 文件夹并构建APK;
  5. 我验证了结果APK,确实包含了android框架类。

但是,我的代码似乎仍在使用 Android 设备中安装的实际 SDK 版本的类/API。 :(

(编辑)

出于性能原因,Zygote 在系统启动期间似乎已经从设备 (/system/framework/framework.odex) 预加载了所有框架/核心类。所以即使我在我们的 APK 中包含了这些类,预加载的类仍然会被实例化。

这对我来说听起来像是一个死胡同……:(

【问题讨论】:

  • 这可能不是一个好主意。您可以通过清单中的 maxSdk 属性限制应用下载。然后修复你的错误并删除它..
  • 对不起,Ran,不幸的是,排除果冻豆现在对我来说可能不是一个选择...... :(

标签: android jar apk android-4.2-jelly-bean


【解决方案1】:

作为一种临时解决方法,我想知道是否可以将 Android 框架 JAR 的早期版本(例如 Android 2.3)打包到我的 APK 中并强制我的所有代码使用该 JAR 中的类/API?

这是不可能的,抱歉。您认为的“Android 框架 JAR”没有代码——它只是 Android SDK 中公开的类和方法的存根实现。真正的 Android 框架存在于固件中,无法替换。

【讨论】:

  • 感谢 CommonsWare!是的,我知道 SDK android.jar 仅包含存根方法这一事实。我已经用更多信息更新了我的问题。
  • @TonyBlues:“但是,我的代码似乎仍在使用 Android 设备中安装的实际 SDK 版本的类/API”——当然。正如我所写,真正的 Android 框架存在于固件中,您无法替换它
  • 你是对的,马克。这似乎是一个死胡同。我可能会更加努力地解决这些实际问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多