#android #android-manifest #deep-linking
#Android #android-манифест #глубокая компоновка
Вопрос:
Я пытаюсь динамически вводить схему URL и путь в мой AndroidManifest.xml файл, использующий build.gradle в качестве referenecd здесь
Однако это не позволяет запускать глубокие ссылки.
Я проверил, что моя глубокая привязка работает, когда я использую статические значения в 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"
}
Комментарии:
1. Что вы имеете в виду
However, this does not allow deeplinks to trigger.
? разве это не работает с resValue, определенным для каждого варианта?
Ответ №1:
Я думаю, что здесь вы можете определить эти строки в вашем 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"
}
}
}
...
}
после перестройки, host_name
и app_scheme
будет сгенерирован для вас, если вы предпочитаете иметь productFlavours, подобные тому, что вы определили в своем коде. Это работает для меня в каждом проекте, с которым я работал 🙂
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>
PS: я предпочитаю определять строковые ресурсы с помощью регистра snake. 🙂
Комментарии:
1. Перемещение значения resValue в defaultConfig сработало. Спасибо! PS: я определил строки как camelCase, потому что именно так это делают документы.
2. Ах, я вижу, приятно! 🙂