Подтвердить что ты не робот

Установите глобальную переменную в gradle, которая может использоваться в файле манифеста

Я хочу создать глобальную переменную, похожую на applicationId. Это значение установлено в build.gradle и будет использоваться в манифесте. Является ли это возможным?

4b9b3361

Ответ 1

Вы можете установить их, например, я настраиваю его для разных продуктов

productFlavors {
        production {
            applicationId = "com.myapp.app"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider5435651423234"
        }
        development {
            applicationId = "com.myapp.development"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider2134564533421"
        }
        qa {
            applicationId = "com.myapp.qa"
            resValue "string", "authority", "com.facebook.app.FacebookContentProvider29831237981287319"
        }
}

И используйте его вот так

<provider
    android:name="com.facebook.FacebookContentProvider"
    android:authorities="@string/authority"
    android:exported="true" />

Ответ 2

Если вы просто хотите использовать идентификатор приложения, установленный в gradle в манифесте, вы можете просто использовать:

${ApplicationID}

Например:

<provider
    android:authorities="${applicationId}.ShareFileProvider" ... >
    ...
</provider>

Если вам нужно такое же поведение с пользовательскими переменными, вы можете использовать manifestPlaceholders, например:

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
    }
}

И в вашем манифесте:

<intent-filter ... >
    <data android:scheme="http" android:host="${hostName}" ... />
    ...
</intent-filter>

Подробнее см. https://developer.android.com/studio/build/manifest-build-variables.html.

Ответ 3

В то время как ответ Марко, похоже, работает, в настоящее время существует лучшее решение, которое не требует добавления переменных в файлы файлов строк.

манифест слияния принимает заполнители:

Для замены пользовательских заполнителей используйте следующий DSL для настройте значения заполнителей:

 android {
     defaultConfig {
         manifestPlaceholders = [ activityLabel:"defaultName"]
     }
     productFlavors {
         free {
         }
         pro {
             manifestPlaceholders = [ activityLabel:"proName" ]
         }
     }

заменит местозаполнитель в следующем объявлении:

<activity android:name=".MainActivity" android:label="${activityLabel}" >

Вы также можете манипулировать этими строками с помощью функций groovy.

Ответ 4

Чтобы использовать строку в Manifest, вы можете сделать ее непосредственно в strings.xml. Как это,

<string name="variable_name">value</string>