Android 11 объявляет видимость пакета в манифесте Android со строковым ресурсом

Мое приложение определяет, установлено ли определенное приложение через queryIntentActivities. Поскольку мое приложение нацелено на уровень api 30, это перестало работать, потому что мне не хватало некоторых деклараций манифеста.

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

Пример

      <manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

Что бы я хотел

      <manifest package="com.example.game">
    <queries>
        <package android:name="@string/store_app" />
        <package android:name="@string/services_app" />
    </queries>
    ...
</manifest>

Другой файл

      <string name="store_app">com.example.store</string>
<string name="services_app">com.example.services</string>

Как использовать строковый ресурс

1 ответ

Я решил это с помощью manifestPlaceholder, потому что хотел иметь один AndroidManifest. Единственным недостатком этого решения является то, что я также использую имена пакетов приложения в своем коде, и поэтому мне нужно еще раз определить его в файле строковых ресурсов.

AndroidManifest

      <manifest package="com.example.game">
    <queries>
        <package android:name="${store_app}" />
        <package android:name="${services_app}" />
    </queries>
    ...
</manifest>

build.gradle

      manifestPlaceholders = [store_app: "com.example.store"]

Я также пробовал это решение для создания строкового ресурса в моем файле gradle, но я не мог заставить его работать.

Другие вопросы по тегам