如何解决Android 11 使用字符串资源在 Android Manifest 中声明包可见性
我的应用检测是否通过 queryIntentActivities
安装了某个应用。由于我的应用以 API 级别 30 为目标 stopped working,因为我缺少一些清单声明。
在 this example 中,它们直接定义包名称。但是我要查询的应用程序因每个构建变体而异。所以最好使用字符串资源。然而,这似乎不可能。
示例
<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>
如何使用字符串资源
解决方法
我用 manifestPlaceholders 解决了这个问题,因为我想要一个 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"]
我也尝试过 this solution 在我的 gradle 文件中创建一个字符串资源,但我无法让它工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。