Android 2.3.* および 4.0.* で正常に動作する Android アプリを作成しました。しかし、デバイスを Jelly Bean (4.1.1) にアップグレードした後、アプリが正常に動作しなくなりました (クラッシュ、ANR など)。
一時的な回避策として、以前のバージョン (Android 2.3 など) の Android フレームワーク JAR を APK にパックし、すべてのコードでその JAR 内のクラス/API を使用するように強制することは可能でしょうか?
APK に JAR を含める方が簡単だと思います。しかし、実行時にコードで JAR 内のクラス/API を使用するように強制する方法がわかりません。
私はそれがまともな修正 (ハッキング、パッケージ サイズ、法的な問題など) ではないことを知っています。しかし、私はそれが実現可能かどうかに興味があります。
提案やヒントをいただければ幸いです。
(編集)
私は次のことを試しました:
- Android 2.3 ROM から/system/framework/framework.odexを抽出しました。
- それを Deodex し、JAR ファイル (framework.jar など) に変換しました。
- Framework.jar を検証したところ、スタブ メソッドではなく、実際のフレームワーク コードが含まれています。
- Framework.jar をプロジェクトの libs フォルダーに入れ、APK をビルドします。
- 結果の APK を確認し、Android フレームワーク クラスが実際に含まれていることを確認しました。
ただし、私のコードは、Android デバイスにインストールされている実際のバージョンの SDK のクラス/API をまだ使用しているようです。:(
(編集)
すべてのフレームワーク/コア クラスは、パフォーマンス上の理由から、システムの起動時に Zygote によってデバイス (/system/framework/framework.odex) から既にプリロードされているようです。したがって、これらのクラスを APK に含めたとしても、プリロードされたクラスは引き続きインスタンス化されます。
これは私には行き止まりのように聞こえます... :(