Gradle构建脚本中的Changning android主题

时间:2019-01-18 12:00:21

标签: android android-gradle android-styles

我想在构建时更改应用程序的主题(实际上我只需要更改windowBackground),这取决于我的环境。

styles.xml

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    </style>

    <style name="AppTheme.WithSplashScreen" parent="AppTheme">
        <item name="android:windowBackground">@drawable/window_background</item>
    </style>
</resources>

我尝试了清单占位符并将主题名称注入清单 app / build.gradle

defaultConfig {
      manifestPlaceholders = [app_theme:"@style/AppTheme.WithSplashScreen"]
      //...
  }

AndroidManifest.xml

<application
    android:theme="@{app_theme}">

但我遇到了错误

  

app / android / app / build / intermediates / manifests / full / debug / AndroidManifest.xml:56:24-44:   AAPT:未指定资源类型(在“主题”处带有值   “ @ {app_theme}”)。

也许appt期望主题资源格式为R.class的id,但是我不确定如何从gradle文件中引用它。否则应该有其他方式。

我无法在运行时应用主题,因为我希望窗口背景立即显示。

1 个答案:

答案 0 :(得分:0)

可能您已经解决了它,但是我认为在我的APP中遇到同样的问题时,回答这个问题很有价值。

根据文档here,您可以在清单中插入构建变量,但语法使用$而不是@。

在我的APP中,我使用了:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.app">
<application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="${appTheme}">

然后在build.gradle

flavorDimensions "version"
productFlavors {
    flavor1{
        dimension "version"
        ...
        manifestPlaceholders = [appTheme: "@style/AppTheme"]
    }
    flavor2 {
        dimension "version"
        ...
        manifestPlaceholders = [appTheme: "@style/OtherAppTheme"]
    }
}