如何在AndroidManifest.xml中为Android深度链接注入主机和架构



我正试图使用build.gradle作为参考,将url模式和路径动态注入到我的AndroidManifest.xml文件中

但是,这不允许深度链接触发。

当我在AndroidManifest.xml中使用静态值时,我测试了我的深度链接工作

// AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="${appScheme}"
android:host="${hostName}"
android:path="/path2" />
<data
android:scheme="${appScheme}"
android:host="${hostName}"
android:path="/path1" />
</intent-filter>


// build.gradle (:app)
defaulConfig {
manifestPlaceholders = [
hostName: "www.host_name.com",
appScheme: "https"
]
}

demo {
resValue "string", "hostName", "www.host_demo.com"
resValue "string", "appScheme", "https"
}
staging {
resValue "string", "hostName", "www.host_staging.com"
resValue "string", "appScheme", "http"
}

我认为您可以在这里定义defaultConfig中的那些字符串,如下所示:

android {
...
defaultConfig {
...
flavorDimensions 'yourAppName'
resValue "string", "host_name", "www.live_demo.com"
resValue "string", "app_scheme", "http"
productFlavors {
demo {
dimension 'yourAppName'
resValue "string", "host_name", "www.host_demo.com"
}
staging {
dimension 'yourAppName'
resValue "string", "host_name", "www.host_staging.com"
}
}
}
...
}

重建后,如果您希望拥有与您在代码中定义的类似的productFlavors,则会为您生成host_nameapp_scheme。这对我处理的每个项目都有效:(

app/build/generated/res/resValues/debug/values/gradleResValues.xml
app/build/generated/res/resValues/demo/values/gradleResValues.xml
app/build/generated/res/resValues/staging/values/gradleResValues.xml

然后从AndroidManifest.xml文件中,可以调用@string/host_name而不是${hostName}

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="@string/app_scheme"
android:host="@string/host_name"
android:path="/path2" />
<data
android:scheme="@string/app_scheme"
android:host="@string/host_name"
android:path="/path1" />
</intent-filter>

附言:我更喜欢用snake大小写定义字符串资源。:(

相关内容

  • 没有找到相关文章

最新更新