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

时间:2019-07-17 11:41:14

标签: 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>

2 个答案:

答案 0 :(得分:2)

清单仅支持清单${applicationId}之类的占位符,不支持其他XML文件(如快捷元数据资源)。

您可以尝试:

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

  • 使用Gradle中的resValue来设置具有应用程序ID(按风味)的字符串资源,并使用@string/...表示法在快捷方式XML中引用它

    < / li>

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

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

答案 1 :(得分:0)

您可以通过gradle创建BuildConfig参数。 您需要在下面添加特定的构建风格

resValue "string", "APP_ID", "com.example.myapp.india"

会根据您的构建风格生成字符串资源。您可以在代码中按如下所示直接使用它。

<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="@string/APP_ID" />
</shortcut>

让我知道更多帮助:)