Подтвердить что ты не робот

Android: разрешить создание псевдонима активности, чья targetActivity находится в aar/sdk

Я пишу SDK и хотел бы, чтобы разработчики могли создать activity-alias, чей targetActivity установлен в действие внутри моего SDK. Я делаю это, потому что я хотел бы, чтобы они могли настроить фильтр намерений для определенной активности в SDK. Если в манифесте sdk присутствует ActivityX, я бы хотел, чтобы они могли записать activity-alias, как это, в в своем манифесте приложения:

<activity-alias
    android:name="abc"
    android:targetActivity="ActivityX">
    <intent-filter>
    ... user custom intent filter
    </intent-filter>
</activity-alias>

Проблема, с которой я сталкиваюсь, заключается в том, что targetActivity имеет ограничение :

"... должен соответствовать атрибуту name элемента активности, который предшествует псевдониму в манифесте.

Это проблема, потому что независимо от того, где я размещаю активность в манифесте sdk или где я помещаю псевдоним в примерный манифест приложения, псевдоним всегда появляется перед активностью в последнем объединенном манифеста, вызывающем ошибку INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Одна идея заключается в том, чтобы поместить псевдоним без фильтра намерения сразу после объявления ActivityX в манифесте sdk и надеяться, что эти два псевдонима будут объединены вместе и останутся в положение псевдонима sdk. Но я не могу понять, как это сделать. Одна из причин, по которым может не работать, заключается в том, что две псевдонимы могут не конфликтуют.

Есть ли у вас мысли об этом решении с помощью решения слияния или какой-либо другой техники?

4b9b3361

Ответ 1

В AOSP был поднят идентичный issue. Обходной путь к проблеме описывается следующим образом:

Вручную включить запись манифеста для Activity из [sdk] в манифест проекта приложения, поставив его перед запись псевдонима активности.

Несмотря на то, что это обходное решение имеет проблему

... дублировать код через манифесты.

похоже, что разработчики проекта считают это решение адекватным. Нет никаких указаний на то, что исправление основной проблемы будет выпущено в ближайшее время.