Ссылка 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"
/>
Есть ли опрятный путь к этому, без необходимости настройки макета в моем коде?
Ответы
Ответ 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.