Как внедрить хост и схему в AndroidManifest.xml для Android Глубокая привязка

#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. Ах, я вижу, приятно! 🙂