nameTextView?.setEnabled(true)
仅当nameTextView
不为null时,这行代码才会继续执行。另一种情况下,如果我们使用!!
操作符:
nameTextView!!.setEnabled(true)
如果nameTextView
为null,它将为我们提供NPE。它只适合喜欢冒险的家伙)
这是对Kotlin的一些介绍。我们继续进行,我将停止描述其他Kotlin特定代码。
2、构建变体
通常,在开发中,如果你有两套环境,最常见的是测试环境和生产环境。这些环境在服务器URL
,图标
,名称
,目标api
等方面可能有所不同。通常,在开始的每个项目中我都有以下内容:
finalProduction
: 上传Google Play 使用demoProduction
:该版本使用生产环境服务器Url,并且它有着GP上的版本没有的新功能,用户可以在Google play 旁边安装,然后可以进行新功能测试和提供反馈。demoTesting
:和demoProduction一样,只不过它用的是测试地址mock
: 对于我来说,作为开发人员和设计师而言都是很有用的。有时我们已经准备好设计,而我们的API仍未准备好。等待API准备就绪后再开始开发可不是好的解决方案。此构建变体为提供有mock数据,因此设计团队可以对其进行测试并提供反馈。对于保证项目进度真的很有帮助,一旦API准备就绪,我们便将开发转移到demoTesting环境。
在此应用程序中,我们将拥有所有这些变体。它们的applicationId和名称不同。 gradle 3.0.0 flavourDimension
中有一个新的api
,可让您混合不同的产品风味,因此您可以混合demo
和minApi23
风味。在我们的应用程序中,我们将仅使用“默认” 的flavorDimension
。早app的build.gradle
中,将此代码插入android {}
下:
flavorDimensions “default”
productFlavors {
finalProduction {
dimension “default”
applicationId “me.mladenrakonjac.modernandroidapp”
resValue “string”, “app_name”, “Modern App”
}
demoProduction {
dimension “default”
applicationId “me.mladenrakonjac.modernandroidapp.demoproduction”
resValue “string”, “app_name”, “Modern App Demo P”
}
demoTesting {
dimension “default”
applicationId “me.mladenrakonjac.modernandroidapp.demotesting”
resValue “string”, “app_name”, “Modern App Demo T”
}
mock {
dimension “default”
applicationId “me.mladenrakonjac.modernandroidapp.mock”
resValue “string”, “app_name”, “Modern App Mock”
}
}
打开string.xml
文件,删掉app_name
string资源,因此,我们才不会发生资源冲突,然后点击Sync Now
,如果转到屏幕左侧的“构建变体”
,则可以看到4个不同的构建变体,其中每个都有两种构建类型:“Debug”和“Release”,切换到demoProducti