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

Ссылка build.gradle атрибут versionName в макете xml

Я хотел бы иметь файл макета, который ссылается на атрибут versionName в моем файле gradle:

...
defaultConfig {
    applicationId "se.test.myapp"
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
....

Что-то вроде

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/versionName"
    />

Есть ли опрятный путь к этому, без необходимости настройки макета в моем коде?

4b9b3361

Ответ 1

В соответствии с http://tools.android.com/tech-docs/new-build-system вы можете создавать ресурсы непосредственно из gradle, поэтому ставьте

android {
...
    defaultConfig {
        applicationId "se.test.myapp"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    ...
    applicationVariants.all { variant ->    
        variant.resValue "string", "versionName", variant.versionName
    }
    ...
}

в вашем build.gradle сделает трюк

Он создает файл ресурсов generated.xml во время компиляции в папке generated/res, которая включена вместе с ресурсами, предоставленными вами в папке значений. Таким образом, вы можете использовать android:text="@string/versionName" для ссылки на это значение. К сожалению, иногда IDE не может разрешить эту ссылку, поэтому она будет выглядеть как ошибка в вашем ресурсе макета (в то время как это действительный оператор и будет разрешен во время выполнения)

Ответ 2

Изменить: вы не должны использовать Jack только для этого. Согласно официальное объявление Джек устарел (для всего, кроме функций Java 8).

Я использовал строковый ресурс:

<resources>
    <string name="app_ver" translatable="false">1.0.2</string>
    ...
</resources>

в приложении build.gradle:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        ...
        versionName "@string/app_ver"
        jackOptions {
            enabled true        
        }
    }
...
}

И вот так:

<Preference
    android:title="Version"
    android:summary="@string/app_ver"/>

Этот проект в GitHub содержит рабочую версию этого.

Ответ 3

Я считаю, что вы можете установить VersionName в манифесте android с помощью строкового ресурса. Вот так:

AndroidManifest.xml

android:versionName="@string/versionName"

Ваш макет xml

android:text="@string/versionName"

Но я не знаю, насколько это совместимо с gradle.