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, но я не мог заставить его работать.