Sto costruendo un sistema basato su Android che richiede l'invio di dati tramite un protocollo binario. Mi aspetto che ci saranno molte versioni di più protocolli e l'incubo che viene fornito con il loro mantenimento.Do DEX e Dalvik supportano la compatibilità binaria Java?
Mi viene in mente che potrei essere in grado di aggirare gran parte del problema di versione, utilizzando la compatibilità binaria di Java.
Supponiamo che l'applicazione A
dipenda dalla libreria L
. L
contiene una classe C
, utilizzata in A
, che implementa l'interfaccia I
. Costruisco sia L
e A
, con la definizione I(0)
dell'interfaccia I
. Installa L(0)
e A(0)
su un dispositivo. A(0)
lega dinamicamente L(0)
che fornisce la classe C(0)
.
Ora estendo l'interfaccia I
, aggiungendo, ad esempio, due nuovi metodi. Quando provo a compilare L
, la compilazione fallisce, perché C
non implementa i nuovi metodi. Correo il L
estendendo C
quindi implementa i due nuovi metodi. Ora compilo L(1)
contro I(1)
e lo installo sul dispositivo.
Si noti che, a questo punto, A
non verrà compilato con I(1)
. Tuttavia, se questo fosse Java, il A(0)
si collegherà ed eseguirà, correttamente, usando C(1)
da L(1)
.
Questo comportamento (e più) è garantito, per le implementazioni di Java, da JLS Capitolo 13, Compatibilità binaria. Se vale per DEX e Dalvik, allora posso rendere una grande classe di cambiamenti di protocollo completamente invisibili ai loro clienti.
Quindi, la domanda è: DEX e Dalvik aderiscono alle specifiche di compatibilità binaria JLS? In caso contrario, c'è un documento che specifica la compatibilità binaria DEX/Dalvik?