动态获取 XML 中的应用程序 ID

Ven*_*yap 8 android

我在应用程序中使用快捷方式,并且有多种产品风格。我想动态获取目标包的应用程序 ID。

我已经给了${applicationId},但是没用。我尝试过${packageName}没有用。还有其他选择吗?

<shortcut
    android:enabled="true"
    android:icon="@drawable/ic_barcode_icon"
    android:shortcutId="bar_code"
    android:shortcutShortLabel="@string/shortcuts_my_bar_code">
    <intent
        android:action="android.intent.action.VIEW.myBarCode"
        android:targetClass="com.appemirates.clubapparel.home.HomeActivity"
        android:targetPackage="${applicationId}" />
</shortcut>
Run Code Online (Sandbox Code Playgroud)

Com*_*are 6

${applicationId}仅清单支持清单占位符,而不支持任意其他 XML 文件,例如快捷方式元数据资源。

你可以尝试:

  • 在每个产品风格的源集中拥有快捷方式 XML 的副本,其中该副本具有硬编码的应用程序 ID

  • 在 Gradle 中使用resValue来设置带有应用程序 ID(每个风格)的字符串资源,并使用@string/...符号在快捷方式 XML 中引用它

第一个肯定有效,但由于代码重复而很乏味。我还没有尝试过第二个。

否则,您将考虑构建自己的 Gradle 插件或类似的处理器,可以从模板动态生成这些资源。