Несколько версий AIDL - PullRequest
       38

Несколько версий AIDL

0 голосов
/ 21 апреля 2020

Документация Android только для AIDL гласит:

Внимание. Любые изменения, которые вы вносите в интерфейс AIDL после первого выпуска, должны оставаться обратно совместимыми во избежание взлома других приложений, использующих ваш служба. То есть, поскольку ваш файл .aidl должен быть скопирован в другие приложения, чтобы они могли получить доступ к интерфейсу вашего сервиса, вы должны поддерживать первоначальный интерфейс.

Поэтому я попытался провести несколько экспериментов. У меня есть существующий интерфейс AIDL, и я реализовал две службы IP C, которые поддерживают его и доступны из моей основной службы.

Поэтому в интерфейсе AIDL для моей основной службы я добавил метод, который был первым в списке уже существующих методов, собрал приложение и развернул его. Но две услуги IP C не изменились; они не знали о новом методе. Это не сработало должным образом, но сработало. Однако исходные методы при вызове возвращали неверные значения. Выглядело так, как будто вставка нового метода в верхнюю часть списка была проблемой (как будто весь пакет был маршалирован в одном байтовом массиве, что испортило немаршалинг на принимающей стороне).

Так что я вместо этого добавил новый метод в качестве последней записи в файле, и на этот раз он работал отлично. Конечно, старые IPC не смогут обрабатывать новый метод, и если бы я назвал его, вероятно, было бы выдано удаленное исключение.

Итак, у меня есть вопрос: почему изменение в порядке привело к такой разнице? Это случайность? Разве нельзя добавить новые методы в один пакет? Я не хочу, чтобы это работало, добавив кучу методов в конец файла, когда это просто непредвиденная случайность.

...