kotlin最早是在倆年前開(kāi)始接觸,一直有關(guān)注與學(xué)習(xí),作為大哥java的一個(gè)補(bǔ)充式的語(yǔ)言,給人一種清新的感覺(jué)。廢話(huà)不多說(shuō)了
先從project的配置來(lái)說(shuō)吧
//用來(lái)給android配置統(tǒng)一管理的,project的各類(lèi)module的
ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
minSdkVersion = 17
targetSdkVersion = 25
versionCode = 1
versionName = "1.0"
}
//一些基庫(kù)的版本配置
buildscript {
ext.espresso_core_version = '2.2.2'
ext.gradle_plugin_version = '3.0.0-alpha1'
ext.realm_plugin_version="2.2.1"
ext.kotlin_version = '1.1.2-4'
ext.basic_lib_version='25.2.0'
ext.junit_lib_version='4.12'
ext.realm_lib_version='1.4.0'
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
//realm
maven {
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url 'https://maven.google.com' }
}
dependencies {
classpath "com.android.tools.build:gradle:$gradle_plugin_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.realm:realm-gradle-plugin:$realm_plugin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
主module的配置
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.twp.app.crm"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
那叢第一個(gè)kotlin類(lèi)開(kāi)始說(shuō)吧
class App : Application() {
//登錄驗(yàn)證
val loginname: String? by lazy { resources.getString(R.string.login_name) }
val loginpwd: String? by lazy { resources.getString(R.string.login_pwd) }
companion object {
var instance: App? = null
get() {
if (field == null) {
field = App()
}
return field
}
}
var realm: Realm? = null
get() {
if (field == null) {
Realm.init(this)
field = Realm.getDefaultInstance()
}
return field
}
var iconfont: Typeface? = null
get() {
if (field == null) {
field = Typeface.createFromAsset(assets, "iconfont/IcoMoon.ttf")
}
return field
}
var user: User? = null
get() {
if (field == null) {
//user = User_PO.getUserModel(this);
field = realm?.where(User::class.java)?.findFirst()
}
try {
if (field!!.isValid && field!!.isManaged) {
return field
}
} catch (e: NullPointerException) {
field = null
}
return field
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
App需要集成Application類(lèi)病配置到manifest中去,
loginname與loginpwd是做一個(gè)靜態(tài)登錄認(rèn)證,
by lazy 是懶加載使用
companion是kotlin的靜態(tài)塊,instance是保存App的一個(gè)靜態(tài)實(shí)例,用于保存工具或者其他實(shí)例,只提供get
?是Optional可選類(lèi)型,
App采用Realm來(lái)做orm數(shù)據(jù)存儲(chǔ),為了跟ios的數(shù)據(jù)存儲(chǔ)同步
iconfont是App中使用的所以圖標(biāo)庫(kù)