Splitties เป็นคอลเลกชันของห้องสมุด Kotlin Multiplatform ขนาดเล็ก (พร้อม Android เป็นเป้าหมายแรก)
ไลบรารีเหล่านี้มีวัตถุประสงค์เพื่อลดจำนวนรหัสที่คุณต้องเขียนการปลดปล่อยรหัสการอ่านและการเขียนเวลาเพื่อให้คุณสามารถมุ่งเน้นไปที่สิ่งที่คุณต้องการสร้างสำหรับผู้ใช้ของคุณ (แม้ว่าคุณจะเป็นคนเดียว) หรือมี fun มากขึ้น
โครงการนี้มีชื่อว่า "Splitties" เพราะมันถูกแยกออกเป็นโมดูลขนาดเล็กกระจายเป็นห้องสมุดอิสระดังนั้นคุณสามารถเพิ่มเฉพาะสิ่งที่คุณต้องการในโครงการ/โมดูลของคุณช่วยลดขนาดของไบนารีสุดท้ายที่อุปกรณ์ผู้ใช้จะต้องดาวน์โหลดและเก็บไว้ในที่เก็บข้อมูล จำกัด (BTW ทุกอย่าง จำกัด )
โมดูลการกำหนดเป้าหมาย Android บางตัวมีเนื้อหาคล้ายกับที่ Anko เสนอ ดูการเปรียบเทียบสั้น ๆ ของการแยกกับ Anko ที่นี่
แต่ละโมดูลได้รับการออกแบบให้มี รอยเท้าขนาดเล็ก และมี ประสิทธิภาพ มากที่สุด
Splitties เป็นเรื่องเกี่ยวกับการทำให้รหัสของคุณง่ายขึ้น นี่คือตัวอย่างบางส่วน:
Kotlin:
startActivity( Intent ( this , DemoActivity :: class .java))Kotlin พร้อมกิจกรรมแยก:
start< DemoActivity >()Kotlin:
Snackbar .make(root, R .string.refresh_successful, Snackbar . LENGTH_SHORT )
.show()kotlin กับ splitties snackbar:
root.snack( R .string.refresh_successful) Racing Coroutines: ( raceOf(…) มาจากโมดูล Coroutines)
suspend fun awaitUserChoice ( ui : SomeUi , choices : List < Stuff >): Stuff ? = raceOf({
ui.awaitSomeUserAction(choices)
}, {
ui.awaitDismissal()
null
}, {
ui.showSomethingInRealtimeUntilCancelled() // Returns Nothing, will run, but never "win".
})Kotlin:
Snackbar .make(root, getString( R .string.deleted_x_items, deletedCount), Snackbar . LENGTH_LONG )
.setAction(android. R .string.cancel) {
deleteOperation.requestRollback()
}
.setActionTextColor( ContextCompat .getColor( this , R .color.fancy_color))
.show()kotlin กับ splitties snackbar:
root.longSnack(str( R .string.deleted_x_items, deletedCount)) {
action(android. R .string.cancel, textColor = color( R .color.fancy_color)) {
deleteOperation.requestRollback()
}
}Context แอปพลิเคชันของคุณพร้อมกับ appCtx เสมอcontext.getSystemService(NAME_OF_SERVICE) as NameOfManager snack(…) และ longSnack(…)toast(yourText) และ Dodge API 25 BadTokenExceptionshowAndAwait สำหรับ AppCompat AlertDialogViewImageView , ActionBar และ TooltipcontentPaddingdp สำหรับ View และ Context มีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อใช้ Views DSLforeground ก่อน API 23ViewHolder และ ItemViewHolder เพื่อการใช้งานขั้นพื้นฐานง่ายๆของ RecyclerViewRecyclerView ) companion object เป็นรายละเอียดความตั้งใจที่มีประสิทธิภาพและสร้างวิธีที่ PendingIntent และง่ายBundleSpec ใช้ Bundle ด้วยไวยากรณ์คุณสมบัติสำหรับ Intent พิเศษและอื่น ๆ Lifecycle AndroidxmainHandler ระดับบนสุดเพื่อหยุดการจัดสรร Handler หลายตัวสำหรับ Looper หลักmainThreadLazy ที่ตรวจสอบการเข้าถึงคุณสมบัติบน SharedPreferences / DataStore ของ Android และ MacOS/iOS/WatchOS NSUserDefaultshasFlag , withFlag และ minusFlag ส่วนขยายใน Long , Int , Short , Byte และคู่ที่ไม่ได้ลงชื่อforEach สำหรับ List s โดยไม่ต้องจัดสรร Iterator ซ้ำ unexpectedValue(…) , unsupportedAction(…) และฟังก์ชั่นที่คล้ายกันที่ NothingViewModel S ใช้ LiveData และสังเกต Lifecycle ตรวจสอบให้แน่ใจว่าคุณมี mavenCentral() ในที่เก็บที่กำหนดไว้ในไฟล์ build.gradle (รูท) ของโครงการของคุณ (ค่าเริ่มต้นสำหรับโครงการ Android Studio ใหม่)
เพื่อให้ง่ายต่อการใช้ประโยชน์จากเนื้อหาของ Splitties สำหรับโครงการ Android ของคุณมีการจัดกลุ่มสิ่งประดิษฐ์ที่รวมถึงการแยกส่วน ใหญ่
การเพิ่มด้วยการรีเฟรช: Splitties.pack.androidBase หรือ Splitties.pack.androidBaseWithViewsDsl
2 แพ็คเหล่านี้ไม่รวม AppCompat และเหมาะสำหรับแอพ Wearos
รวมโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0 " )นอกจากนี้ยังมีเวอร์ชันที่มี Views DSL นอกจากนี้ยังรวมถึงโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl:3.0.0 " ) การเพิ่มด้วย refreshersions: Splitties.pack.appCompat หรือ Splitties.pack.appCompatWithViewsDsl
2 แพ็คเหล่านี้ประกอบด้วยแพ็คฐาน Android และโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-appcompat:3.0.0 " )นอกจากนี้ยังมีเวอร์ชันที่มี Views DSL นอกจากนี้ยังรวมถึง Views DSL เวอร์ชันของ Android Base Pack และโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-appcompat-with-views-dsl:3.0.0 " ) การเพิ่มด้วยการรีเฟรช: Splitties.pack.androidMdc หรือ Splitties.pack.androidMdcWithViewsDsl
2 แพ็คเหล่านี้รวมถึง Android AppCompat Pack และโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-material-components:3.0.0 " )นอกจากนี้ยังมีเวอร์ชันที่มี Views DSL นอกจากนี้ยังรวมถึง Views DSL เวอร์ชันของ Android AppCompat Pack และโมดูลต่อไปนี้:
การพึ่งพา Gradle:
implementation( " com.louiscad.splitties:splitties-fun-pack-android-material-components-with-views-dsl:3.0.0 " )เนื่องจากคุณอาจใช้สิ่งประดิษฐ์หลายอย่างเพื่อไม่ให้ทำซ้ำตัวเองเราขอแนะนำให้คุณใส่เวอร์ชันในสถานที่กลางดังนั้นจึงเป็นความพยายามเพียงเล็กน้อยในการอัพเกรดเป็นรุ่นใหม่
วิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้การรีเฟรชมีสัญลักษณ์การพึ่งพาในตัวสำหรับ Splitties และห้องสมุดที่เป็นที่นิยมและคุณภาพอื่น ๆ อีกมากมายเช่น Kotlinx, Androidx, ห้องสมุดจาก Square/CashApp และ Libraries จาก Google
สิ่งสำคัญที่สุดคือการใช้งาน refreshVersions จะแสดงการอัปเดตที่มีอยู่ในเวลาไม่กี่วินาทีสำหรับการพึ่งพาทั้งหมดของคุณใน versions.properties ของคุณ
FYI การเปิดตัวล่าสุดของ Splitties ล่าสุดคือเวอร์ชัน 3.0.0
com.louiscad.splitties:splitties-activities
com.louiscad.splitties:splitties-alertdialog
com.louiscad.splitties:splitties-alertdialog-appcompat
com.louiscad.splitties:splitties-alertdialog-appcompat-coroutines
com.louiscad.splitties:splitties-appctx
com.louiscad.splitties:splitties-arch-lifecycle
com.louiscad.splitties:splitties-arch-room
com.louiscad.splitties:splitties-bitflags
com.louiscad.splitties:splitties-bundle
com.louiscad.splitties:splitties-checkedlazy
com.louiscad.splitties:splitties-collections
com.louiscad.splitties:splitties-coroutines
com.louiscad.splitties:splitties-dimensions
com.louiscad.splitties:splitties-exceptions
com.louiscad.splitties:splitties-fragments
com.louiscad.splitties:splitties-fragmentargs
com.louiscad.splitties:splitties-intents
com.louiscad.splitties:splitties-lifecycle-coroutines
com.louiscad.splitties:splitties-mainhandler
com.louiscad.splitties:splitties-mainthread
com.louiscad.splitties:splitties-material-colors
com.louiscad.splitties:splitties-material-lists
com.louiscad.splitties:splitties-permissions
com.louiscad.splitties:splitties-preferences
com.louiscad.splitties:splitties-resources
com.louiscad.splitties:splitties-snackbar
com.louiscad.splitties:splitties-stetho-init
com.louiscad.splitties:splitties-systemservices
com.louiscad.splitties:splitties-toast
com.louiscad.splitties:splitties-typesaferecyclerview
com.louiscad.splitties:splitties-views
com.louiscad.splitties:splitties-views-appcompat
com.louiscad.splitties:splitties-views-cardview
com.louiscad.splitties:splitties-views-coroutines
com.louiscad.splitties:splitties-views-coroutines-material
com.louiscad.splitties:splitties-views-dsl
com.louiscad.splitties:splitties-views-dsl-appcompat
com.louiscad.splitties:splitties-views-dsl-constraintlayout
com.louiscad.splitties:splitties-views-dsl-coordinatorlayout
com.louiscad.splitties:splitties-views-dsl-ide-preview
com.louiscad.splitties:splitties-views-dsl-material
com.louiscad.splitties:splitties-views-dsl-recyclerview
com.louiscad.splitties:splitties-views-material
com.louiscad.splitties:splitties-views-recyclerview
com.louiscad.splitties:splitties-views-selectable
com.louiscad.splitties:splitties-views-selectable-appcompat
com.louiscad.splitties:splitties-views-selectable-constraintlayout
สมมติว่าคุณต้องลองใช้คุณสมบัติใหม่หรือการแก้ไขที่ยังไม่ได้เปิดตัว:
คุณสามารถคว้าได้ในเวอร์ชัน Snapshot โดยการเพิ่มที่เก็บข้อมูลที่สอดคล้องกันดังที่แสดงด้านล่างและเปลี่ยนเวอร์ชันไลบรารีเป็น snapshot ล่าสุด 3.0.0-SNAPSHOT :
allProjects {
repositories {
mavenCentral()
google() // Add sonatype snapshots repo below
maven(url = " https://oss.sonatype.org/content/repositories/snapshots " )
}
}มีการประกาศการเปิดตัวใน GitHub คุณสามารถสมัครสมาชิกได้โดยคลิกที่ "ดู" จากนั้น "ปล่อยเท่านั้น"
อย่างไรก็ตามหากคุณใช้ Refreshersions คุณจะได้เรียนรู้เกี่ยวกับการอัปเดตเมื่อคุณรันงาน refreshVersions ในไฟล์ versions.properties
หากคุณต้องการให้ห้องสมุดนี้มี คุณสมบัติใหม่หรือการปรับปรุง ในโมดูลใหม่หรือในโมดูลที่มีอยู่โปรดเปิดปัญหาหรือโหวต/แสดงความคิดเห็นที่คล้ายกันก่อนดังนั้นจึงสามารถพูดคุยได้
นอกจากนี้ยังยินดีต้อนรับ การมีส่วนร่วมของเอกสาร สำหรับการพิมพ์ผิดหรือการปรับปรุงเล็ก ๆ น้อย ๆ อื่น ๆ อย่าลังเลที่จะส่ง PR (คำขอดึง) โดยตรง สำหรับการบริจาคเอกสารที่สำคัญยิ่งขึ้นโปรดเปิดปัญหาก่อนดังนั้นจึงสามารถพูดคุยได้
หากคุณพบข้อผิดพลาด โปรดเปิดปัญหาพร้อมรายละเอียดที่สำคัญทั้งหมด หากคุณรู้ว่าการแก้ไขอย่างง่ายที่ไม่ใช่การทำลาย API และไม่มีผลข้างเคียงที่ต้องพิจารณาคุณอาจส่ง PR โดยตรง
นอกจากนี้คุณยังสามารถเข้าร่วมการอภิปรายเกี่ยวกับ Slack ของ Kotlin ในช่อง #splitties (คุณสามารถรับคำเชิญได้ที่นี่)
"การแยก" เป็นโมดูลของไลบรารีแยกที่คุณสามารถเพิ่มเป็นการพึ่งพาได้ มันรวมเฉพาะการพึ่งพาสกรรมกริยาที่จำเป็น สิ่งนี้ช่วยให้คุณสามารถเพิ่มสิ่งที่คุณต้องการในแอพหรือโมดูลไลบรารีของคุณเท่านั้นดังนั้น APK/IPA/แอปสุดท้ายจะเล็กที่สุดเท่าที่จะเป็นไปได้และไม่รวมสิ่งของที่ไม่ได้ใช้ในแอปของคุณ
สมมติว่าคุณกำลังสร้างแอพ Wear OS โดยใช้ Views DSL สวมแอพ OS ไม่จำเป็นต้องใช้ AppCompat รวมถึงมันจะเป็นการสิ้นเปลืองแบนด์วิดท์และการจัดเก็บ มุมมอง DSL Core Module ขึ้นอยู่กับ Android SDK แต่ไม่ได้อยู่ใน AppCompat ดังนั้นคุณจะไม่ขยายแอพข้อมือของคุณด้วย AppCompat โดยใช้ Views DSL อย่างไรก็ตามหากคุณกำลังสร้างแอพโทรศัพท์แท็บเล็ตหรือคอมพิวเตอร์ Android จะมีการดู DSL AppCompat ที่แยกด้วยส่วนขยายสองสามตัวเพื่อให้คุณใช้
ขอขอบคุณเป็นพิเศษกับ Jovche Mitrejchevski ที่ช่วยในการตัดสินใจสำหรับโครงการนี้
ต้องขอบคุณ Jetbrains และผู้มีส่วนร่วมของ Anko ซึ่งเป็นแหล่งแรงบันดาลใจที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งสำหรับมุมมอง DSL และแน่นอนขอบคุณสำหรับภาษาการเขียนโปรแกรม Kotlin ที่ยอดเยี่ยมที่ทำให้โครงการนี้เป็นไปได้
ขอบคุณ Doug Stevenson สำหรับบทความของเขา "Kotlin & Android: การทดลองทองเหลือง tacks" มันยุติธรรมที่จะบอกว่ามุมมอง DSL มีรากในการทดลองนี้
ไลบรารีนี้เผยแพร่ภายใต้ Apache License Version 2.0 ซึ่งคุณสามารถดูได้ที่นี่