1

我已经构建了一个在 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 中包含了这些类,预加载的类仍然会被实例化。

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

4

1 回答 1

3

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

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

于 2012-07-25T12:31:39.280 回答