在xml布局中引用build.gradle versionName属性

Mar*_*cus 18 android

我想要一个引用versionName我的gradle文件中的属性的布局文件:

...
defaultConfig {
    applicationId "se.test.myapp"
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
....
Run Code Online (Sandbox Code Playgroud)

就像是

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/versionName"
    />
Run Code Online (Sandbox Code Playgroud)

有没有一个简洁的方法,而不必在我的代码中设置布局?

Ole*_*eGG 35

根据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
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在你的build.gradle中可以解决这个问题

generated.xml在编译期间在generated/res文件夹中创建资源文件,该文件包含在您在values文件夹中提供的资源旁边.所以你可以android:text="@string/versionName"用来引用这个值.遗憾的是,有时IDE无法解析此引用,因此它在布局资源中看起来像一个错误(虽然它是一个有效的语句,并将在运行时解析).

您可以通过单击"@ string/versionName",然后按Alt + Enter,在菜单中选择"Create string value resource'versionName",然后选择"Suppress for tag"来抑制错误.

  • 它在编译期间在`generated/res`文件夹中创建资源文件`generated.xml`,该文件夹与`values`文件夹中提供的资源一起包含在内.所以你可以使用`android:text ="@ string/versionName"`来引用这个值.遗憾的是,有时IDE无法解析此引用,因此它在布局资源中看起来像一个错误(虽然它是一个有效的语句,并将在运行时解析). (7认同)

Emm*_*ess 5

编辑:您不应该只使用Jack。根据官方公告, Jack已弃用(适用于Java 8功能以外的所有功能)。

我使用了一个字符串资源:

<resources>
    <string name="app_ver" translatable="false">1.0.2</string>
    ...
</resources>
Run Code Online (Sandbox Code Playgroud)

在应用程序的build.gradle中:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        ...
        versionName "@string/app_ver"
        jackOptions {
            enabled true        
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

像这样:

<Preference
    android:title="Version"
    android:summary="@string/app_ver"/>
Run Code Online (Sandbox Code Playgroud)

GitHub中的项目包含此版本的工作版本。