שישי קוד-אש - אוקטובר 2021

מה קורה חברים? אני כל כך שמח לחזור בעוד מהדורה של שיש קוד-אש. והפעם, אנדרואיד 12 שוחררה סופית, כלומר עוד לא לאף טלפון אבל לפחות קוד המקור שלה שוחרר, יש כמה ספריות חדשות ומעניינות ומלא מלא כנסים!
אז יאללה למה אנחנו מחכים?
אנדרואיד 12 🤖
סוף סוף, אחרי ציפייה מרובה, אנדרואיד 12 שוחררה לAOSP, כלומר קוד המקור שלה שוחרר ועכשיו כל אחד יכול להוריד אותו ולבנות בעזרתו ROM לטלפון שלו. (מה שחלק כבר עשו 😄).
אז מתי זה מגיע לכולם? קשה לדעת, גוגל מבטיחה שזה יגיע לפיקסלים בשבועות הקרובים, אבל לכו תדעו מה זה אומר. כמה חברות כבר הראו תצוגה מקדימה של איך הן יהרסו את החוויה של אנדרואיד 12 באמצעות הקסטומיזציות שלהן, כמו כמובן Samsung וOnePlus.
אבל בינתיים, אם עוד לא התכוננתם, זה הזמן. לכו תבדקו שהאפליקציה שלכם תעבוד כמו שצריך באנדרואיד 12.
Material You 👉🏼
אין ספק שהשינוי הכי מורגש בגרסה החדשה הוא שפת העיצוב החדשה, Material You.
אבל גוגל כבר מתחילה לעדכן את האפליקציות שלה לMaterial You.
וכמה מפתחים כבר הראו דברים ממש יפים שהם עושים עם אנדרואיד 12, כמו למשל Splash Screen הרבה יותר מגניב, כזה.
ואם אתם כבר רוצים לחגוג, אז המשתמש David Brooke הכין לנו background חדש שאנחנו יכולים להשתמש בו לשיחות זום. תהנו!
Ktor vs Retrofit
אני מניח שרובכם משתמשים בRetrofit, זו אחלה ספרייה כדי לנהל את קריאות הAPI שלכם באפליקציית אנדרואיד.
אפשר לומר שהיא די הפכה לסטנדרט בתעשייה, ואין סיבה שלא. זו ספרייה מצויינת, נוחה ומתעדכנת בטירוף. היא עובדת עם כל json seralizer שיש, היא התאימה את עצמה לRxJava ואז לLiveData ואז לCoroutines. והיא באמת מספקת לנו structure נוח לפיתוח קוד קליינט.
(שזה סתם מצחיק כמה ספריות יש היום לאנדרואיד, זה מזכיר לי את הציוץ הזה)
Once upon a time android has 4 components..🦕 Now a days 4+ Binding, View model, Live data, Paging, Work manager, Data store, Navigation, Dependency Injection and the list goes on... 🏃♂️🏃♂️ #Android #AndroidDev
— On Measure (@OnMeasure) October 10, 2021
אז למה בכלל אני מדבר איתכם על Ktor?
Ktor היא ספריית API, שיש לה גם סרבר סייד וגם קליינט סייד. והיא ספריית Kotlin First.
היא כתובה אך ורק בקוטלין ומשתמשת בcoroutines בשביל לנהל asynchronus tasks.
ובגלל שהיא ספריית קוטלין ולא אנדרואיד, הרבה אנשים מתחילים להתעניין בה לאחרונה. בעיקר אנשים שמתעסקים עם KMM או Kotlin MultiPlatform Mobile, שזו בעצם ספריית קרוס פלטפורם של JetBrains שנועדה לאפשר לכתוב קוד שיהיה משותף גם לאנדרואיד וגם לiOS.
בשביל שהקוד יהיה באמת משותף צריכים לכתוב אותו בקוטלין בלבד, אי אפשר שיהיו dependencies של אנדרואיד.
ופה בדיוק נכנסת לתמונה Ktor.
אגב, בפרק האחרון של OnCreate גיא דיבר עם זיו קסטן, שהוא היום מפתח בLemondae והוא אמר לו שהם שוקלים להשתמש בKMM בפרוייקטים שלהם, שזה אם תשאלו אותי ממש מגניב ויהיה מעניין לשמוע אם זה הצליח להם.
אז בכל מקרה, Ktor מסקפת לנו את האפשרות ליצור קליינט API בקוטלין שיכול לעבוד גם על אנדרואיד וגם על iOS.
ויצא לי קצת להשתמש בה ואין לי עדיין רשמים מסודרים, אולי אני אכתוב על זה פוסט מתישהוא. אבל נראה לי שהייתי שמח אם מישהו (אולי אני) היה כותב מן Retrofit לKtor 😄 משהו שיודע לעשות את כל הannotations שכבר התרגלנו אליהם מRetrofit, אבל אולי זה רק אני.
בינתיים אם זה מעניין אתכם, קחו טעימה מאיך זה נראה לעבוד עם Ktor.
KotlinX Seralization
אני לא יודע אם אתם משתמשים בספרייה של קוטלין להמרה של Json, סביר להניח שאתם מכירים את Gson, Jackson או Moshi.
אני אישית מאוד אוהב אותה, ואני גם אוהב את זה שהיא ספרייה רשמית.
בכל מקרה היא קיבלה עדכון לגרסת 1.5.3 שבה בין היתר יש סוף סוף תמיכה בnulls, וגם אפשרות להחליט אם להשתמש בdefauls שנתתם לערך מסוים או לא.
Kotlin Quiz
Ugh GIF from Thesimpsons GIFs
Previously
אז בפעם הקודמת הראיתי לכם קטע קוד עם generics, ובקוטלין generics עובדים מעט שונה מאיך שהם עובדים בjava. וצריכים להכיר דברים כמו in
ו out
.
אז שאלתי אתכם מה יתקמפל ומה יתן לנו שגיאה.
class A
class B: A
class C<A>
class D<out A>
val option1: C<A> = C<B>()
val option2: C<B> = C<A>()
val option3: D<A> = D<B>()
val option4: D<B> = D<A>()
(אגב, יש לי פה שגיאה לא קשורה, הclass A צריך להיות open, אבל לא על זה רציתי לדבר)
ובכן, התשובה הנכונה היא שרק option3
לא תתן לנו שגיאה.
כל האופציות האחרות יזרקו שגיאה.
ב option1
אנחנו מגדירים שC יכולה לקבל רק קלאס שיממש את A, אבל מעבירים לו אובייקט שמממש B. למרות שB יורש מA, זה לא עוזר לנו.
זה בערך גם מה שקורה ב option2
, אנחנו מגדירים שD יכול לקבל מי שמממש את B, אבל מעבירים אובייקט שמממש את A.
אבל option3
דווקא כן תעבוד, כיון שהגדרנו את D כמי שיכול לקבל את A או כל מי שיורש את A.
אבל option4
כבר לא תעבוד, כיון שאנחנו מגדירים שאנחנו מקבלים רק מB ומטה, ולכן כשאנחנו מעבירים D שמממש את A נקבל שגיאה.
והציוץ הבא מסביר את זה יפה.
Kotlin generic types;
<T> = type and object definition should be the same class
<in T> = type definition should be same or subclass of object definition
<out T> = object definition should be the same or subclass of type definition#Kotlin #KotlinTip #Android #AndroidDev pic.twitter.com/1rdjTbpYz5— mert (@mertceyhan) August 30, 2021
ועכשיו
מכירים scoped functions?
מה יודפס מהקוד הבא?
val myName = "Gilad".run { "Mr. $this" }
val myOtherName = "Yoav".apply { "Mr. $this" }
println(myName)
println(myOtherName)
Fragments
Square עושים זאת שוב ומוציאים עוד ספרייה, הפעם בשביל לוגים.
ואתם בטח שואלים את עצמכם בשביל בכלל אתם צריכים עוד ספרייה ללוגים? יש לכם את Logcat, ואם נמאס לכם לכתוב TAG בכל קלאס, אז יש את Timber?
וכל זה נכון, אבל logcat הספרייה החדשה ובעלת השם המאוד לא מקורי בכוונה, פשוט הופכת את כל העסק הזה ליותר פשוט, וגם מאפשרת ביצועים טובים יותר.
אז, לכו לבדוק.אם כבר כל הפרוייקט שלנו בקוטלין, למה בgradle אנחנו ממשיכים להשתמש בGroovy?
טוב, התשובה שלי היא מכיון שאני כבר מכיר את זה וזה עובד.
אבל בכל זאת מתחשק לכם להבין איך אפשר להעביר את קבצי הgradle שלכם לקוטלין, המדריך הבא יעזור לכם לעשות זאת.בא לכם להכיר כל מיני פרוייקטים מגניבים שמפתחות בנו בcompose? Rajesh Hadiya הכין לכם repository שבו הוא אוסף פרוייקטים כאלה כדי שנוכל ללמוד מדוגמאות.
Kapil Vij בMedium, הכין לנו רשימה של שאלות ראיון בקוטלין.
בלי קשר לאם אתם עכשיו בראיון או לא, נראה לי שזה נחמד לעבור על הרשימה ואולי גם תלמדו כמה דברים חדשים.גיליתי את הערוץ הזה לא מזמן, והוא מעביר ידע ממש מעניין על קוטלין.
יש לו סרטונים קצרים יותר וארוכים יותר, והוא מדבר בעיקר על מושגים בקוטלין. מומלץ!מההתרשמות שלי רוב מפתחי האנדרואיד בישראל לא ממש כותבים טסטים לקוד שלהם. אני מודה שגם אני לא ממש כותב טסטים להכל. אבל זו שגיאה. כי טסטים זה נורא חשוב, וזה גם גורם לכם לחשוב על כל האופציות שאפשריות בקוד שלכם.
ובמאמר הבא הוא מדבר בדיוק על זה, איך לקחת בחשבון את כל התוצאות האפשריות ולכתוב טסטים שיתנו באמת כיסוי מלא.גוגל עדכנה את הPlay Store Console, ושינתה כמה דברים שקשורים בעיקר ל Users Managment.
אירועים קרובים
יש הרבה אירועים קרובים!
DroidCon ברלין יהיה 3 ימים, ויתחיל ב20 לאוקטובר עד ה23.
שבוע אחר כך, יתחיל דרוידקון לונדון, ב28 לאוקטובר, וצ'ט האס ינאם הkeynote.
ולא הרבה אחרי, יתחיל דרוידקון איטליה ב11 לנובמבר.
ניו יורק וסן פרנסיסקו נדחו לספטמבר בגלל התפרצות קורונה.
ומתי נזכה לראות שוב את דרוידקון תל אביב?!
Android Dev Summit
גם גוגל מתכננת אירוע מפתחים, וגם הוא הולך להיות ב27 וה28 לאוקטובר, אבל הוא יהיה אונליין לגמרי.
אם אתם רוצים לצפות בלייב ולשלוח שאלות, אתם אמורים להירשם באתר שלהם קודם.
על מה הולכים לדבר שם הפעם? על אנדרואיד 12 מן הסתם, עם compose, ועוד כל מיני הרצאות על cross screen ועבודה עם שעונים ודברים כאלו.
זהו להפעם, כרגיל אשמח לתגובות ולשיתופים, ואם אתם נהנים מהתוכן שלי אולי תרצו לקנות לי קפה.