Статические андроидные ярлыки для нескольких ароматов?

Можно ли определить статические ярлыки для нескольких вариантов, не дублируя shortcuts.xml? У меня есть два варианта:

  • Main (пакет: com.test)
  • Бесплатно (пакет: com.test.free)

Shortcuts.xml выглядит так:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/ic_shortcut_add_photo" android:shortcutId="new_photo" android:shortcutLongLabel="@string/new_photo" android:shortcutShortLabel="@string/new_photo"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.test.MainActivity" android:targetPackage="com.test"/> </shortcut> 

Проблема в том, что имя пакета в намерении не может ссылаться на строковый ресурс и должно быть жестко закодировано в xml.

Чтобы также предоставить ярлыки для свободного вкуса, мне нужно скопировать shortcuts.xml и изменить targetPackage на com.test.free, что является плохим решением.

Поэтому просто .debug эту проблему из-за суффикса .debug на наш идентификатор приложения для отладочных .debug . Это наше обходное решение (обратите внимание на непроверенную адаптацию из нашей кодовой базы):

src/main/res/shortcuts.xml :

 <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/ic_shortcut_add_photo" android:shortcutId="new_photo" android:shortcutLongLabel="@string/new_photo" android:shortcutShortLabel="@string/new_photo"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.test.MainActivity" android:targetPackage="@string/application_id"/> </shortcut> 

<android module name>/build.gradle :

 apply plugin: 'com.android.application' //region: Fix shortcuts.xml by manually replacing @string/application_id final String APPLICATION_ID_STRING_RES_KEY = "application_id" android.applicationVariants.all { variant -> // Add the application id to the strings resources // We do this so that in the future if google fixes the // processing of the shortcuts.xml we can leave this // and remove the `mergeResources.doLast` block below resValue "string", APPLICATION_ID_STRING_RES_KEY, variant.applicationId // Manually replace @string/application_id with `variant.applicationId` variant.mergeResources.doLast { println("variant = ${variant.applicationId}") final File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/xml/shortcuts.xml") final String content = valuesFile.getText('UTF-8') final String updatedContent = content .replace("@string/${APPLICATION_ID_STRING_RES_KEY}", variant.applicationId) valuesFile.write(updatedContent, 'UTF-8') } } //endregion android { ... }