我在应用程序中使用快捷方式,并且具有多种产品风格。我想动态获取目标软件包的应用程序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>
答案 0 :(得分:2)
清单仅支持清单${applicationId}
之类的占位符,不支持其他XML文件(如快捷元数据资源)。
您可以尝试:
在每个产品类型的源集中都有您的快捷方式XML的副本,其中该副本具有硬编码的应用程序ID
使用Gradle中的resValue
来设置具有应用程序ID(按风味)的字符串资源,并使用@string/...
表示法在快捷方式XML中引用它
第一个肯定有效,但是由于代码重复而很乏味。我还没有尝试过第二个。
否则,您将在考虑构建自己的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>
让我知道更多帮助:)