私はバイナリプロトコルでデータを送信する必要があるAndroidベースのシステムを構築しています。私は、複数のプロトコルのバージョンが存在し、それらを維持することに伴う悪夢があることを期待しています。DEXとDalvikはJavaのバイナリ互換性をサポートしていますか?
私がJavaのバイナリ互換性を使用して、バージョン管理の問題の多くを回避することができるかもしれないことを私に起こります。
は、アプリケーションA
ライブラリL
に依存することとします。 L
は、A
で使用されるクラスC
を含み、インターフェイスI
を実装します。私はL
とA
の両方を構築し、I
というインタフェースの定義はI(0)
です。デバイスにL(0)
とA(0)
をインストールします。 A(0)
は、C(0)
を供給するL(0)
を動的にバインドします。
は今、私は、例えば、2つの新しいメソッドを追加する、インターフェイスI
を延ばします。 が新しいメソッドを実装していないため、L
をコンパイルしようとするとコンパイルが失敗します。私はを拡張してL
を修正し、2つの新しいメソッドを実装します。私はI(1)
に対してL(1)
をコンパイルし、デバイスにインストールします。この時点で、A
がI(1)
に対してコンパイルされません、
注意。これがJavaの場合、A(0)
はC(1)
をL(1)
から正しくバインドして実行します。
この動作は(およびそれ以上)JLS 13章、バイナリ互換で、ジャワの実装のために、保証されています。もしそれがDEXとDalvikのために成立すれば、私はクライアントには見えない大きなプロトコルの変更を行うことができます。
DEXとDalvikはJLSバイナリ互換性仕様に準拠していますか?そうでなければ、DEX/Dalvikバイナリ互換性を指定する文書がありますか?