当前位置: 代码迷 >> 综合 >> Android的Gradle技巧 3.4风格尺寸
  详细解决方案

Android的Gradle技巧 3.4风格尺寸

热度:88   发布时间:2024-01-19 15:59:54.0
3.4风格尺寸
问题
一种产品风味是不够的。您需要另一个标准来区分应用的不同版本。
解
为您的产品风格添加flavorDimensions。
讨论
3.2中的技巧显示了一个“你好,世界”的应用程序有三种产品味道:傲慢,友好,和obsequious。这意味着基于态度来区分不同的味道。
然而,假设不同的客户端想要自己的品牌版本的应用程序的每种风味。源代码基本上是相同的每个。只有几个次要资源是不同的。
为了避免过多的重复,引入额外的flavor维度。构建文件如示例3-15所示。
实例3-15。添加flavor大小
flavorDimensions 'attitude', 'client'
productFlavors {
arrogant {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.arrg'
}
friendly {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.frnd'
}
obsequious {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.obsq'
}
stark {
dimension 'client'
}
wayne {
dimension 'client'
}
}
现在有两个维度的味道:态度和客户。傲慢,友好和淫秽的味道都在态度维度,和鲜明的和风格的口味是客户的类型。
该组合产生更多变体。从Recipe 4.1运行printVariantNames自定义任务现在显示示例3-16中的结果。
实例3-16。打印所有变量名称

./gradlew printVariantNames
:app:printVariantNames
obsequiousStarkDebug
obsequiousStarkRelease
obsequiousWayneDebug
obsequiousWayneRelease
arrogantStarkDebug
arrogantStarkRelease
arrogantWayneDebug
arrogantWayneRelease
friendlyStarkDebug
friendlyStarkRelease
friendlyWayneDebug
friendlyWayneRelease
BUILD SUCCESSFUL


具有三种态度和两个客户端的两种构建类型的组合给出2 * 3 * 2 = 12个不同变体。
要使客户端变体实际上做可见的事情,请为每个客户端类型添加目录树,如图3-11所示。
stark client res / values文件夹中的colors.xml文件在示例3-17中。
实例3-17。 stark / res / values文件夹中的colors.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="text_color">#beba46</color>
<color name="background_color">#771414</color>
</resources>

示例3-18中显示wayne / res / values文件夹中的相应colors.xml文件。
实例3-18。 colorsne文件在wayne / res / values文件夹中
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="text_color">#beba46</color>
<color name="background_color">#771414</color>
</resources>

图3-11。客户端风格的目录树
每个客户机flavor中的strings.xml文件仅更改hello_world字符串(示例3-19和3-20)。
实例3-19。 stark / res / values文件夹中的strings.xml文件
<resources>
<string name="hello_world">Stark Industries</string>
</resources>
实例3-20。 stringsne / res / values文件夹中的strings.xml文件
<resources>
<string name="hello_world">Wayne Enterprises</string>
</resources>

最后,Activity_main.xml布局文件中的TextView已被修改为使用新的颜色和字符串(例3-21)。
实施例3-21。使用颜色和文本更新TextView元素
<TextView
android:id="@+id/name_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/text_color"
android:background="@color/background_color"
android:textSize="32sp"
android:text="@string/hello_world" />
textColor属性使用每个flavor的颜色资源,text属性使用每个flavor提供的字符串值。
因此,图3-12显示了Stark Industries的傲慢味道。


图3-12。来自Stark Industries的傲慢调试口味
相比之下,Wayne Enterprises的友好味道如图3-13所示。这里还需要一个附加说明。 Gradle构建文件中的flavorDimensions标记列出了客户端之前的态度,这意味着来自态度维度的值将比客户端维度具有更高的优先级。因此,hello_world字符串资源从每种态度风格中删除。当然,改变客户和态度的顺序也会很好。


图3-13。来自Wayne Enterprises的友好调试风格
  相关解决方案