Android’de Carousel Efekti ile Image Slider Yapımı

Yazılım projelerinde, kullanıcıların istek ve beklentilerini öngörerek bunları kullanıcı arayüz ekranlarına doğru ve işlevsel bir tasarım olarak aktarmak çok önemlidir. Bu yüzden, tasarımda kullanıcı deneyimini arttıran elementler kullanmanın önemi büyüktür.

Bu makalemde  Android Viewpager2 arayüz widget’ına Carousel efektini ekleyerek image slider yapmayı örnekleyeceğim.

ViewPager yapısından ViewPager2’ye geçişin avantajları ve bir Android uygulamasında ViewPager2 kullanımı konularıyla ilgili “Android ViewPager2 Kullanımı” makalemden bilgi edinebilirsiniz.

Carousel efekti ile resimleri slide olarak görüntüleyen örneğin ekran görüntüsü;

Projemin kodlarına github linkinden hızlıca ulaşabilirsiniz.

1-Gerekli Kütüphanelerin Eklenmesi

ViewPager2 widget, android.support kütüphanesinde bulunmamaktadır. ViewPager2 kullanabilmek için AndroidX kütüphanesine geçmeniz gerekir.

Dilerseniz AndroidX Kütüphanesine Geciş adlı makalemi okuyarak, var olan projelerinizi AndroidX yapısına kolaylıkla geçişini sağlayabilirsiniz.

Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Viewpager2 kütüphanesini yüklüyoruz.

2-Java kodlama ile işlevsellik oluşturma

Örneğimizi oluşturabilmek için 2 tane Java sınıfı kullandım. İlk önce MainActivity sınıfında, ViewPager2 widget’ının hangi yönde slide işlemini yapacağını tanımladık. Sonrasında MyAdapter sınıfındaki resim nesnelerini ViewPager2’ye yükleyebilmek için setAdapter metodunu kullandık.

ViewPager2 nesnesinin setPageTransformer metodundan faydalanarak, ViewPager2 widget’da bulunacak resimlere carousel efekti eklendi. Daha detaylı açıklama kodlar arasındaki açıklamalarda bulunmaktadır.

MyAdapter.java, ViewPager2 widget’ının içinde gösterilecek, resimlerimizi eklediğimiz sınıftır. ImageView nesnenini tanımlayıp, drawable dosyasındaki resimlerimizi atadık. Daha detaylı açıklama kodlar arasındaki açıklamalarda bulunmaktadır.

3-Arayüz Kodlaması

Örneğimizdeki görüntüyü elde etmek içim, 2 tane xml dosyasında kodlama yapmamız gerekmektedir.

activity_main xml kodlarımızda ViewPager2 nesnesini ekledik. MainActivity sınıfında kullandık.

row_item xml kodlarımızda ImageView nesnesini ekledik. MyAdapter sınıfında kullandık.

Projemin kodlarına github linkinden hızlıca ulaşabilirsiniz.

Material Motion Part 2: Container Transform

Yazdığınız uygulamanın kullanıcı sayısının artmasını sağlayan en önemli konulardan biri, kullanıcı deneyimi yüksek ve dikkat çekici tasarıma sahip olmasıdır.

Android uygulama da UI öğeleri arasındaki geçişleri farklı animasyon görünümleri ile sağlayan çeşitli Material motion özellikleri bulunmaktadır. Bu özelliklerden biri olan Shared Axis hakkındaki örnek projeyi  “Material Motion Part 1: Shared Axis” adlı makalemden ulaşabilirsiniz.

Bu makale serisinde, Android uygulamada iki farklı arayüz elementinin birbirleri arasında animasyonlu bir şekilde geçişini sağlayan Material motion Container Transform özelliğini örnekleyeceğim.

Container Transform

Bir arayüz elementinin başka bir arayüz elementine animasyonlu bir şekilde geçişini sağlayan özelliktir. Böylelikle kullanıcının mobil tasarım öğeleriyle etkileşime girmesini sağlamış oluruz. Bu durum projenin uzun vadede kullana bilirliğini artırır.

Makalemizde anlatacağım örnek uygulamanın görüntüsü;

Projemin kodlarına github linkinden hızlıca ulaşabilirsiniz.

Bu örneği uygulayabilmek için işlemleri adım adım yapalım.

1-Gerekli Kütüphanelerin Yüklenmesi

Projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek navigation ve material kütüphanelerini yüklüyoruz.

2- Kotlin ve tasarım kodları

İlk önce Note sınıfından bahsetmek istiyorum. Tüm not başlıklarını, içeriklerini ve not kutularının renklerini atadığım ve bu değerleri bir listOf array yapısında barındırdığım sınıfdır.

 

MainActivity sınıfımızda ise, notların grid şeklinde gösterilmesi sağlayan ve not kutucuklarına tıklandığı anda yapılan geçiş animasyonunu tetiklemesini yaptık. Detaylı açıklamalar kodlar arasında bulunmaktadır.

Notların grid şeklinde gösterilmesi için activity_main xml dosyasında RecyclerView arayüz elementi kullanıldı.

NotesAdapter sınıfının işlevi, MainActivity sınıfında kullanılan RecyclerView içinde tüm not item’larını oluşturmaktır. Bu item kutucuklarında da Note sınıfından gelen notlarla ilgili içerikleri item_note xml dosyasına aktarmasıyla tasarımda gösterilmesidir.

item_note xml dosyasında MaterialCardView arayüz elementini notları kutucuk şeklinde göstermek için kullandık. MaterialCardView içinde de MaterialTextView arayüz elementine not başlık ve içeriklerini atadık.

Son olarak, NoteDetailActivity sınıfını kullandık. Bu sınıf, not kutularına tıklandığında notların detaylandırının gösterildiği sayfadır. Diğer bir yandan bu sınıfta, RecyclerView nesnesinden MaterialTextView nesnesine geciş anının süresinin belirlendiği kod sayfasıdır. Detaylı açıklamalar kodlar arasında bulunmaktadır.

note_detail_activity xml dosyasında ise, MaterialTextView arayüz elementi kullanılarak seçilen notun detaylarının gösterildi.

Dilerseniz projemin kodlarına github linkinden hızlıca ulaşabilirsiniz.

Database Inspector

Yazılım projeleri oluştururken hazırladığımız veritabanı yapılarını, bir arayüz alanı üzerinden incelemek, değişiklik yapmak her zaman işimizi kolaylaştırır. Android uygulama geliştirme sürecinde yakın zamana kadar local veritabanı üzerinde değişiklikler yapmak, biz geliştiriciler için hayli zordu.

Bu makalemde Android Studio 4.1 ile gelen Database Inspector özelliği sayesinde projelerinizde SQLite veya Room ile oluşan veritabanlarında nasıl kolay bir şekilde sorgular çalıştıracağınızı ve incelemeler yapacağınızı göstereceğim.

İsterseniz makalede kullanacağım Lesson Notes uygulamasını github‘ dan indirip, benim örneklerimi pratik yapabilirsiniz.

Database Inspector Kullanımı

İlk öncelikle Android Studio sürümünüzü 4.1 şeklinde güncellemeniz gerekmektedir.

Android  Studio menüsünde View > Tool Windows > Database Inspector yolunu izleyerek, Database Inspector özelliğini açabilirsiniz.

Database Inspector özelliğini kullanabilmek için test ortamınızın API level 26 veya 26’dan büyük olmalıdır.

Özelliği aktif ettiğim örnek görünüm;

Test cihazınızda daha önceki projelerinizde oluşturduğunuz veritabanları olabilir. Sizin projenize ait veritabanına ulaşmak için Şekil-1 belirttiğim ilgili yerden, projenizin paketini seçmelisiniz.

Şekil-1

Database Inspector Sorgu Çalıştırma

Room kütüphanesi ile veritabanı oluşturduysanız, @Query etiketi içinde olan sorguları hızlıca çalıştırma ve sonucunun gösterilmesi sağlanmaktadır. Klasik SQLite yapısında da benzeri yapı bulunmaktadır. Fakat bu kullanımda, koddaki sorguları çalıştırmak her zaman mümkün olmayabiliyor.

İki farklı şekilde sql sorgularınızı çalıştırabilirsiniz

1- @Query etiketin sol tarafındaki  arama simgesine tıkladığınızda, kodda bulunan sorgu çalışır. Örneğin, id değeri “4463f016-350d-441f-b2a4-26c6b1dba973” olan notu listeleyelim.

 

2- Database Inspector arayüzünde sorgu yazma alanını açarak da sql çalıştırabilirsiniz. Örneğin, bir tane ders notunu veritabanına ekleyip, sonrasında bu kaydı select sql listeleyelim.

 

Veritabanında Kolay Veri Değişikliği Nasıl Sağlanır

Database Inspector kullanarak, çalışan uygulamanın veritabanındaki verileri anlık hızlı bir şekilde değiştirme imkanımız bulunmaktadır.

 

Diğer özellik ise uygulamada verilerle ilgili yapılan  değişiklikleri, anında canlı bir şekilde veritabanında görme imkanımız bulunmaktadır. Bu özelliği kullanabilmek için ilgili tablomuzu açtıktan sonra Live updates checbox seçmeliyiz. Aşağıdaki örnek resimde, “service” notunu eklediğimde otomatik olarak tabloda kayıt olduğunu göreceksiniz.

 

Kaynak

1-https://medium.com/androiddevelopers/database-inspector-9e91aa265316

2- https://developer.android.com/studio/inspect/database

Google Play In-App Review API Kullanımı

Android uygulamanız Play Store’da yayınlandıktan sonra, uygulama puanlandırma ve yorumları daha fazla indirme sağlamak için çok önemli faktörlerdir. Bunu başarmak için, genellikle kullanıcıları Play Store’a yönlendirerek uygulamayı puanlandırmalarını isteriz. Bu yöntem ile kullanıcıların Play Store’a yönlendirildikten sonra uygulamanıza geri dönmeme olasılığı vardır. Ayrıca bazı kullanıcılar, uygulamayı Play Store’da puanlandırmak da zorlanabilir.

Bu makalemde, Google Play In-App Review API ile kullanıcının uygulama puanlandırma ve yorumlarını, Android uygulama içinde yapmasını sağlayarak, indirme sayılarını arttırma konusunda fayda sağlayacağız.

Aşağıdaki resimde olduğu gibi kullanıcı, uygulama içinde puanlandırma ve yorum yapabilir.

In-App Review için Önemli Noktalar

  1. Bu API yalnızca Android 5.0 (API seviyesi 21) veya sonraki sürümlere sahip olan Android cihazlarda çalışır.
  2. Google Play, kullanıcıya ne sıklıkla review dialog arayüzünü gösterilebileceğiniz konusunda zamana bağlı bir kota uygular. Bu kota nedeniyle, launchReviewFlow yöntemini kısa bir süre içinde birden çok kez çağırmak her zaman bir iletişim kutusu görüntülemeyebilir. (örneğin, bir aydan az). Kota hakkında bilgileri quotas linkinden ulaşabilirsiniz.
  3. Rating widget üzerinde tasarımsal bir değişiklik yapamazsınız. Bu konuda daha detaylı bilgiyi Design Guidelines linkinden ulaşabilirsiniz.

Projemizde Google Play In-App Review API’yi uygulayabilmek için aşağıdaki belirttiğim adımları uygulamalısınız.

1-Gerekli Kütüphanelerin Eklenmesi

Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Play Core API ve material kütüphanelerini yüklüyoruz.

2- Backend Kodlama

İlk önce ReviewManager interface oluşturmamız gerekir. Sonrasında review akışını başlatmak için ReviewInfo nesnesi üzerinden launchReviewFlow () yöntemini çağırdık. Bazı nedenlerden dolayı işleyiş başarısız olursa, kullanıcıyı playstore uygulamasına yönlendirip, klasik playstore üzerinden değerlendirme yapılmasını sağladım. Detaylı açıklamalar kodlar arasında comment olarak bulabilirsiniz.

3- Arayüz Kodlama

Ben MaterialButton kullanarak, kullanıcıdan değerlendirme yapmasını yönlendirdim. Siz dilerseniz, klasik button da kullanabilirsiniz. In-App Review API’den bağımsız, sizin tasarım tercihinizle alakalı bir durum.

Eğer benim gibi MaterialButton kullanacaksanız, res->values ->styles.xml dosyasınızda temanız MaterialComponents şeklinde tanımlanmış olmalıdır. Örnek;

In-App Review Test Etme

In-App Review API’sini barındıran proje kodlarını test edebilmek için uygulamanızı PlayStore’da onaylatmış olmanız gerekir. En azından uygulamanızı PlayStore’da ve Internal App Sharing test ortamlarına yüklemelisiniz.

Örnek proje kodlarına github linkinden ulaşabilirsiniz.

Kaynak

1-https://developer.android.com/guide/playcore/in-app-review/kotlin-java

 

 

 

Android Studio’da Configuration Caching

Yazılım projelerini oluşturma aşamasında harcanan zaman herkes için çok değerlidir. Proje için harcanan zamanı en aza indirmek, maddi ve manevi birçok getirileri bulunmaktadır. Android uygulama geliştirme süreçlerinde birden fazla yöntem ile zaman kazancı sağlayabilirsiniz.  Android Studio’da Build Analyzer Kullanımı ve Debug Püf Noktaları adlı makalelerimde farklı 2 yöntemden bahsetmiş bulunmaktayım.

Bu makalemde ise  Android Studio Gradle 6.6 sürümünün,  yapılandırma sürecinin sonucunu önbelleğe alarak, bu bilgiyi bir sonraki derlemelerde  kullanmasıyla performansı önemli ölçüde artıran “Configuration Caching” özelliği anlatacağım.

“Configuration Caching” özelliğinde ek olarak, yapılandırma önbelleğini yeniden kullanırken, varsayılan olarak daha fazla iş paralel olarak çalıştırılır. Yapılandırma ve yürütme aşamalarının izolasyonu ve görevlerin izolasyonu, bu optimizasyonları mümkün kılar.

Not: Yapılandırma önbelleğini kullanan Gradle, yapılandırma komut dosyaları gibi derleme yapılandırmasını etkileyen hiçbir şey değişmediğinde yapılandırma aşamasını tamamen atlayabilir.

Configuration Caching Özelliğini Aktif Etme

Configuration caching özelliği, Gradle 6.6 sürümünde bulunmaktadır. Bu özelliği aktif edebilme için gradle dosyasında bir komut çalıştıracağız. Android Studio’da komut çalıştırmak için View->Tool Windows->Terminal sekmesini açmalısınız. Terminal adlı pencere, Android Studio aşağı kısmında açılacaktır. Burada proje yolununda yazmış olduğu komut yazma alanını göreceksiniz. Windows ve Linux(veya Mac) işletim sistemlerinde yazılan gradle komutları biraz farklıdır. Örneğin, gradle versiyonunuzu öğrenmek isterseniz,

Windows ‘da “gradlew –v”, Linux(veya Mac) işletim sistemlerinde ise “./gradlew –v” yazmalısınız.

Configuration caching özelliğini aktif etmek ve yardımı çalıştırmak için;

Windows işletim sisteminde

Linux veya Mac işletim sisteminde

şeklinde komutları kullanmalıyız.

Örnek;

 

Configuration caching özelliğini aktif etmenin diğer bir yolu, proje ana dizinindeki gradle.properties dosyasını açıp,

kodunu ekleyerek yapabilirsiniz. Bu yöntemle özelliği aktif ederseniz, her derlemede komut satırı tarafına geçmeden Configuration caching kullanmış olursunuz.

 

Java Build

Yaklaşık 500 tane alt projeye ve karmaşık yapı mantığına sahip büyük bir Java enterprise projesi, normalde 8 saniyede çalışırken, Configuration caching özelliği kullandığımızda ise 0,5 saniyede derlendiğini gördük.Böylelikle Configuration caching özelliği ile 16 kat daha hızlı derlemiş oldu. Aynı yapıda, uygulama kodunu değiştirdikten sonra assemble çalıştırmak, 40 saniyede derlenirken, 13 saniye gibi bir sürede, yani yaklaşık 3 kat daha hızlı derlenmesine sebep oldu. Bu örneğin grafiği aşağıdadır.

gradle/gradle  projesinin derleme anını inceleyelim . Bu proje yüz tane alt proje ve karmaşık bir yapıya sahiptir.
Uygulamada değişikliği yaptıktan sonra test yaptığımızda aşağıdaki grafikte, mavi alanda configuration phase(yapılandırma aşaması), yeşil alanda ise execution phase bilgisini görebilirsiniz. Grafiğin sol tarafında , configuration caching(yapılandırma önbelleği) etkinleştirilmeden, yapılandırma aşaması 2 saniyeden fazla sürerken, grafiğin sağ tarafında configuration caching ile 214 milisaniyeye inmektedir.Yani 2 saniyeden 214 milisaniyeye düşerek, zamandan kazanmış olduk.

Android builds

2500 alt projeye sahip çok büyük bir Android uygulamasının derleme zamanlarını inceleyeceğiz. Bu projeyi normal derlediğimizde 25 saniyede, configuration caching ile derlediğimizde ise 0,5 saniyede çalışmaktadır. Yani configuration caching sayesinde 50 kat daha hızlı derlendi. Bazı alt uygulamaları değiştirdikten sonra APK’yi bir araya getirmek gibi daha kullanışlı bir derleme çalıştırmak, ~ 50 saniyeden ~ 20 saniyeye, neredeyse 3 kat daha hızlı yapılabiliyor.

Kendi Android uygulamalarınızda, yukarıda gibi zaman ölçümleri yapmak istiyorsanız, bu github reposunda talimatları izleyerek, Gradle Profiler den yardım alarak yapabilirsiniz.

Kaynak

1- https://blog.gradle.org/introducing-configuration-caching

2- https://developer.android.com/studio/build/build-cache.html

Android Studio’da Debug Püf Noktaları

Yazılım geliştiriciler, projenin hatalarını gidermek, uygulama işleyişini anlamak ve takip etmek için debug yöntemlerini sıkça kullanmaktadır.

Bu makalemde, Android Studio Ide’sinde  debug (hata ayıklama) yapma süreçlerini hızlandıran püf noktaları anlatacağım.

Android uygulama geliştirme sürecinde kullanılan 2 tip debug yöntemi bulunmaktadır.

  1. Log sınıfını kullanarak, Logcat penceresinde hata ayıklama
  2. Projenin debug modda çalıştırmasıyla, Debug penceresinde hata ayıklama

Log Kullanımı 

Projede Log sınıfını kullanarak, Logcat penceresinde kodlarımızı aşama aşama takip edebilir ya da yaptığımız işlemler sonucunda ortaya çıkan değerleri kontrol edebiliriz.

Örneğin, saniyedeki frame hızını ve her oyunda kullanıcının son puanını kaydeden bir uygulamanızın olduğunu varsayalım. Bu uygulamada, her oyunda kullanıcının son puanını, Logcat penceresinde kontrol etmek istediğinizde aşağıdaki gibi Log sınıfını kullanmalıyız.

Android Studio Ide’sinin Logcat tabını seçtiğimizde, yazdığımız Log tanımlaması aşağıdaki gibi gözükecektir.

Şekil-1

Log Filtreleme Özellikleri

Üsteki görünüm en temel halidir. Şimdi ise bu log ile görüntülediğimiz verilerimize daha hızlı ulaşabilmek için nasıl Logcat ekranını sadeleştireceğimize bakalım.

Şekil-1 görselinde işlem tarihi, paket ismi ve thread ID gibi kullanmıyacağımız ve gözümüzü yoran bilgiler bulunmaktadır. Bunları istersek, görünümden kaldırabiliriz. Bu işlemi Şekil-2 resminde kırmızı belirtiğim ayar sekmesinden Configure Logcat Header bölümünü açıp, bilgilerin seçme alanlarını pasif yaparak çözebilirsiniz.

Şekil-2

Aşağıdaki resimde göründüğü gibi, artık daha temiz log çıktısı gösterebiliyoruz.

Log’ları filtreleme konusuyla ilgili güzel bir özellik daha bulunmaktadır. Şekil-3 görselinde kırmızı ile belirtiğim arama alanına, log sınıfını kullanırken yazdığınız tag ya da msg parametresindeki değerlerden birini yazarsanız, istediğiniz log dataları gelicek. Böylelikle direk istediğiniz log çıktılarını görmüş olacaksınız. Ben Şekil-3 görselinde, “High” kelimesi içeren log’ları arattım.

Şekil-3

LogCat’de Benzer Satırları Gruplama

LogCat penceresindeki veri karmaşıklığını çözmenin diğer bir yolu, projemizde benzer log çıktılarını gruplama yapmaktır. Bu olayı uygulamak için, gruplama yapmak istediğiniz satıra sağ tıklayıp, Fold Lines Like This özelliğiniz seçmeniz yeterli olacak. (Şekil-4)

Şekil-4

Fold Lines Like This özelliğini uygulamadığımızda Şekil-5 resminde olduğu gibi “frame seconds” kelimesini içeren satırları grupladı. Bir grup açık halini de resimde belirttim.

Şekil-5

Hata Ayıklayıcıyı (Debug) Ekleme

Android Studio’da bu butona tıkladığımızda, proje çalışır ve debug penceresi açılır. Bu yöntemle debug yaptığınızda, her seferinde proje yeniden başlatılacaktır. Bu durum zaman kaybına sebep olur.Eğer Attach Debugger to Android Process (Şekil-6) bu özelliği kullanırsanız böyle bir sorununuz kalmayacaktır. Çünkü uygulamanızı 1 kere çalıştırıp, Attach Debugger to Android Process butonu (Şekil-6) ile debug yaparsanız, yeniden başlamayacaktır. Olduğunuz sayfadan debug işlemine devam edebilirsiniz.

Şekil-6

Attach Debugger to Android Process butonu seçtiğinizde Choose Process penceresi açılır. Bu pencerede, debug çalıştırmak istediğiniz  projenin paketini seçip OK tuşuna basınız. Eklediğiniz debug noktalar (breakpoints) arasında geçişi sağlayabilirsiniz. Breakpoints arasında geçişi kolaylaştıran klavye kısayollarını bu linkden ulaşabilirsiniz. Örneğin; Windows da F9 .

Breakpoints Yer Değiştirme

Breakpoints noktalarına uygunsuz bir yere koyduğunuzda, silmek yerine farklı noktalara da yerleştirebilirsiniz.

moving-breakpoints

Breakpoints Grup Yapma

Projede Debug yaparken bir çok breakpoints ekleyebiliyoruz. Fakat breakpoint’leri tek tek silmek ya da pasif yapmak çok zor bir işdir. Tek tek uğraşmaktansa,  Breakpoint’leri gruplarsak, topluca silme, pasif yapma vb. işlemleri hızlıca yapabilme imkanımız bulunmaktadır. Bunu yapabilmek için, herhangi breakpoint sağ tıklayıp, açılan pencerede More seçmeniz gerekir. Sonraki yapılacak adımlar Şekil-7 de belirttim.

breakpoints-group.gif

Şekil-7

Drop frame

Debug yaparken sırayla konulan tüm breakpoint’leri üzerinden testlerimizi yaparız. Fakat bazen bir sonraki adıma geçmek istemediğimiz zamanlarda, yanlışlıkla geçiş yapabiliyoruz. Bu durumda asıl çalıştırmak istediğiniz breakpoint’e tekrar gelebilmek için debug adımlarını en baştan başlatmak gerekiyor. Bu yazılımcıyı yoran bir süreçtir.

Android 10 ve üst sürümlerdeki cihazlarda debug yaparken Drop frame butonuna (Şekil-8) tıklayarak, bir önceki breakpoint noktasına geçiş yapabiliyorsunuz. Böylelikle debug adımlarını en baştan başlatma sorununuz basit bir şekilde çözülmüş oluyor.

Şekil-8

Suspend thread

Çok iş parçacıklı bir uygulamada hata ayıklıyorsanız, breakpoints’in varsayılan olarak tüm iş parçacıklarını askıya aldığını göreceksiniz. Ancak, bu davranışı istemeyebilirsiniz. Örneğin, bir iş parçacığını engelleyebileceğinizi ve uygulamanızın geri kalanının hala çalıştığını doğrulamak veya bir arka plan görevini araştırırken kullanıcı arayüzünüzün işlemeye devam etmesini istiyorsunuz.

Hangi iş parçacağını askıya almak istiyorsanız, o noktaya koyduğunuz breakpoint’e sağ tıklama yapın ve Şekil-9 gibi  Suspend ve Thread bölümlerini seçip, Done butonuna tıklayın.

Şekil-9

Evaluate expression

Bazen debug satırı, Breakpoint üzerindeyken ilgili değişkenin değerini kontrol edip, öğrenmek isteyebilirsiniz. Devamında diğer Breakpoint’leri normal akış da çalıştırmak istediğiniz durumlar olabilir. Bunun için Şekil-10 inceleyin.

evaluate-expression.gif

Şekil-10

Proje kodlarken bu yapıları kullandığınızda, test süreçlerinizin daha hızlanacağını düşünüyorum.

Kaynaklar

1- Android Studio: Debugging Tips n’ Tricks (Android Dev Summit ’19)

2- https://medium.com/androiddevelopers/debugging-in-android-studio-dfbbf8a8d03c

Android’de Directions API ile Rota Çizme

Günümüzde konum bilgisi kullanarak hayatımızı birçok alanda kolaylaştırması sağlayan yazılımlar bulunmaktadır. Mobil uygulamalarda GPS, araba kullanırken ya da yaya olarak yürürken, ulaşmak istediğimiz noktaya gidebilmek için yol tarifi yapması, bulunduğunuz konum çevresinde en yakın eczaneye ulaşmak gibi birçok konuda hayatımızı kolaylaştırmaktadır.

Bu makalemde, bir Android uygulamasında Google Directions API ‘yi kullanarak haritada belirlenen iki nokta arasında nasıl bir rota çizileceğini ve bu rotaya ne kadar sürede varılacağını göstereceğim.

Örnek projemizi kodlamaya başlamadan önce bazı işlemler yapmamız gerekmektedir.Bu işlemleri sırayla yapmaya başlayalım.

1- Google Play Services Yükleme

Google haritayla ilgili bir geliştirme yapacağımızdan dolayı, Google Play Services yüklememiz gerekmektedir. Bunun için Tools->Sdk manager’ı açıp Sdk Tools bölümünden Google Play Services işaretleyip, yükleme işlemini gerçekleştirin.

2- Google Maps API Key Oluşturma

3-Gerekli Kütüphanelerin Eklenmesi

Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Google Play services kütüphanesini yüklüyoruz.

4-AndroidManifest Dosyasına İlgili Ayarları Ekleme

Kullanıcının konumu belirlemek için izin tanımlamamız gerekir. Aşağıdaki izin kodunu da AndroidManifest.xml dosyasında application tag’nin üst kısmına yerleştirin.

AndroidManifest dosyasına, daha önce üretmiş olduğumuz Google API Key’i ekleme işlemini yapacağız. Application tag arasına aşağıda görmüş olduğunuz meta-data tag kodunun içindeki value özelliğine Google API Key’i ekleyeniz.

5-Xml Kodları

Haritayı gösterebilmek için SupportMapFragment sınıfını fragment ile kullanıyoruz.

4-Java Kodları

İlgili rotayı çizebilmek için ilk önce Google Map Directions web servisine API Key, başlangıç ve varış noktalarının konum bilgilerini bir url ile göndermeniz gerekir. İlgili url ile web servise bağlandığınızda, rotayı ne kadar sürede bitirebileceğiniz, rotanın kaç km olduğu, yol tarifleri hakkında detaylı bilgiler json verisi halinde gelecektir. Bu kısmı ve rotanın harita çizilmesi MainActivity sınıfında yapılmıştır. Detaylı anlatım kodlarda bulunmaktadır.

DirectionsJSONParser sınıfında ise web servisden gelen Json veriyi çözümleyip, içindeki bilgileri ArrayList yapısına ekleyerek MainActivity sınıfında kullanılması sağlanmıştır. Ek olarak DirectionsJSONParser sınıfında Json veriden gelen polyline değerini (rota yolunun şifrelenmiş çizgileri) çözümleyen bir metod yazılmıştır. Bu metod sayesinde  rota yolunun çizilebilmesi için gerekli enlem, boylam değerleri elde edilir. Detaylı anlatım kodlarda bulunmaktadır.

Örneklediğim projemin kodlarını indirmek isterseniz; yapmanız gereken tek şey aşağıya koyduğum KODLARI İNDİR resmine tıklamak.

AndroidX Kütüphanesine Geciş

Bir yazılımcı proje geliştirirken, yazılımı daha işlevsel hale getirmek, iş yükünü hafifletmek ve aynı kodu tekrar yazmasına gerek kalmadan hazır bir kalıp sunmayı sağlayan birçok kütüphane kullanmaktadır.

Android uygulama geliştiricilerinin, uzun zamandır hemen her yazılımda kullandıkları temel olan Destekleme Kütüphanesi (Support Library) bulunmaktadır. Google, bir çok kütüphanenin güncel hali olan AndroidX kütüphanesini duyurdu. AndroidX, en gelişmiş Jetpack bileşenlerini ve Support Library’i kapsayan bir kütüphanedir.

Bu makalemde, Android uygulamalarda neden AndroidX kütüphanesini kullanmanız gerektiğini ve var olan uygulamalarınızı, AndroidX kütüphanesine geçişini nasıl yapacağınızı anlatacağım.

Neden AndroidX kütüphanesini kullanmalıyız?

  • Android Support Library kullanımı, ömrünün sonuna geldi. Support Library, Android 28.0 sdk sürümünden sonra geliştirilmeyecektir. Support Library kullandığınızda karşılaşacağınız hataları düzeltebilmek istiyorsanız, AndroidX’e geçmeniz gerekir.
  • Google Play hizmetleri, Firebase, SQLite, Activity ve Fragment gibi önemli yapılar AndroidX kütüphanesine taşındı.
  • Support Library’de adlandırma çok uzun olması ve çok sık sürüm çıkartılması geliştiricileri yormaktaydı. AndroidX ile kütüphane adlandırmaları ve sürümler standartlaştırıldı.

    Örneğin; Support Library’de var olan appcompat yapısını kullanmak için aşağıdaki kodu kullanmalıyız.

    Support Library’de com.android.support değeri ile adlandırmaya başlanırken, AndroidX yapısını kullanacağımızda direk androidx şeklinde başlar.

Projenizin AndroidX ‘e Geçişi Nasıl Yapılır

Var olan projemizi AndroidX’e geçirmek için bazı işlemler yapmamız gerekmektedir. Yalnız Android Studio’nun “Migrate to AndroidX” özelliği sayesinde, bu geçiş süreci hayli kolaydır.

AndroidX’e geçiş için yapmamız gereken bazı adımlar:

    1. App dizinin içindeki build.gradle dosyasındaki, compileSdkVersion (en az) 28 olarak ayarlanmalıdır.
    2.  Android Gradle Build Version 3.2 veya üstü olarak ayarlanmalıdır.

      build.gradle(Project: ) → dependencies → classpath ayarları yapılmalıdır.

    3. Temel ayarlarımızı yaptıktan sonra, Android Studio menüde, Refactor → Migrate to AndroidX seçeneğine tıklamalısınız.

      İşlem yüklendikten sonra Android Studio’nun alt kısmında aşağıda belirttiğim bölüm açılacaktır. Bu bölümde Do Refactor butonuna tıklayıp, AndroidX’e geçiş işlemini tamamlamalısınız.

Böylelikle geçmişte oluşturduğunuz projeleri 3 adımda AndroidX kütüphane yapısına geçirmiş olduk.

Kaynaklar

1- https://medium.com/androiddevelopers/migrating-to-androidx-tip-tricks-and-guidance-88d5de238876

2- https://developer.android.com/jetpack/androidx

 

AndroidX Biometric API ile Parmak İzi Doğrulama

Hepimiz mobil cihazlarımızda birçok bilgiyi saklıyoruz. İnsanlar, uygulama içi ödemeler yapmak gibi hassas işlemleri gerçekleştirmek için düzenli olarak akıllı telefonlar ve tabletler kullanıyor.Bu yüzden mobil uygulamalarda güvenlik çok önemli bir konumdadır. Güvenliği sağlamak için çeşitli yöntemleri uygulayabilirsiniz. Kullanıcının sisteme erişirken kim olduğunu kanıtlama işlemi olan kimlik doğrulama, güvenlik yöntemlerden biridir. PIN, şifre, güvenlik anahtarı ve biyometrik (parmak izi, yüz algılama) kimlik doğrulama çeşitlerinden birini kullanarak uygulamanızın bazı bölümlerini veya tüm uygulamanızı kilitlemeyi düşünebilirsiniz.

Parola ve PIN  kimlik doğrulama yöntemlerinde, giriş bilgilerini unutma ya da karıştırma ihtimaliniz yüksektir. Fakat Biyometrik parmak izi doğrulama, parmak ucunuzu dokunmatik sensöre basarak yapılan bir işlem olduğu için uygulaması daha kolaydır. Parola ve PIN kimlik doğrulama gibi yöntemleri kullandığınızda birisinin şifreleri tahmin edemeyeceğinin veya kullanıcının cihazına casus yazılım gibi araçlar yoluyla şifresini sızdırmayacağına dair bir garanti yoktur. Parmak izi ise benzersiz ve tahmin edilmesi imkansız olduğundan güvenliği daha yüksek bir yöntemdir.

Bu makalemde, bir Android uygulamasında AndroidX Biometric kütüphanesini kullanarak, parmak izi kimlik doğrulama yöntemini örnekleyeceğim.

Örneğimizi uyguladığımızda aşağıdaki gibi bir ekran görüntüsünü elde edeceğiz.

androidx-biometric

Örneklediğim projemin kodlarını indirmek isterseniz; yapmanız gereken tek şey aşağıya koyduğum KODLARI İNDİR resmine tıklamak.

Birkaç adımda bir Android uygulamasında AndroidX Biometric kütüphanesini kullanarak, parmak izi kimlik doğrulamayı nasıl yapacağımızı görelim.

1-Gerekli Kütüphanelerin Eklenmesi

Biometric API ile parmak izi doğrulama yapabilmek için AndroidX kütüphanesine geçmeniz gerekir.Bu yüzden projedeki appcompat, constraintlayout ve biometric kütüphanelerinin tanımlamaları androidx ile başlayacaktır.

Dilerseniz AndroidX Kütüphanesine Geciş adlı makalemi okuyarak, var olan projelerinizi AndroidX yapısına kolaylıkla geçişini sağlayabilirsiniz.

Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Biometric kütüphanesini yüklüyoruz.

2-Projede İzinlerin Tanımlanması

Cihazın desteklediği tüm farklı biyometrik kimlik doğrulama işlemlerini kullanabilmek için bir tane izin tanımlamamız gerekir. Aşağıdaki izin kodunu da AndroidManifest.xml dosyasında application tag’nin üst kısmına yerleştirin.

3-Arayüz Kodlaması

Örneğimizdeki görüntüyü elde etmek içim, 1 tane xml dosyasında kodlama yapmamız gerekmektedir. activity_main xml kodlarımızda, constraintlayout içine Button ekledim.

activity_main xml kodlarımız;

4-Java kodlama ile işlevsellik oluşturma

AndroidX Biometric API’nin içinde bulunan BiometricPrompt sınıfını kullanarak, parmağı sensöre dokundurduğunuz anda, telefonda kayıtlı iz ile karşılaştırma yaparak uygulama içinde kimlik doğrulama yapar.Daha detaylı kod açıklamaları, yorum tagları içinde bulunmaktadır.

 

 

Vektörel İllüstrasyon Temelleri- Part 3: Boolean Operations

Oluşturacağınız mobil uygulamalardaki özel şekiller ve vektörel illüstrasyonlar için işinizi kolaylaştıran kavramlardan biri olan boolean operatörlerini anlattığım makaledir. Bir önceki makalelerimde Primitive Şekiller, Stroke ve Paths den bahsettim. Makaleleri sırasıyla okumanızı tavsiye ediyorum. Eğer PART 1 ve PART 2’yi okumadıysanız buradan ulaşabilirsiniz.

İşte daha önce tasarladığım bir şekil. Peki bu nedir? Öncelikle bunun bir daire olduğunu hepimiz biliyoruz. Fakat üst kısımda yıldız şeklinde bir parça ve alt kısımda da elips şeklinde bir parça eksik duruyor. Yani, bu illüstrasyon da o şekilleri çemberden çıkartım. Bu da boolean operatörlerinden biri olan substration yöntemidir.

Substration, çoğu vektör grafik yazılımı tarafından önerilen dört ana boolean operatörlerinden biridir. Bakalım substration ve diğer üç işlemi nasıl yapacağım.

Subtraction

Çıkarmayı gerçekleştirmek için, iki (veya daha fazla) şeklin çakıştığından emin olun. Ardından, “Shift” tuşunu basılı tutarak boolean işlemini gerçekleştirmek istediğiniz tüm şekilleri seçin.

Gravit Designer’da, boolean işlemlerini en üstteki araç çubuğunda açıldığını göreceksiniz. Şöyle görünüyor:

 

Yukarıda gördüğünüz ikona tıklayın ve açılır menüden Subtract’ı seçin. Bu, çakışan iki şekil arasında üst şeklin bir kısmını alttaki şekilden çıkaracaktır. Aşağıdaki görselde daha iyi anlayacaksınız.

Z sıralamasını henüz açıklamadım, ancak şu anda bilmeniz gereken şey şu şekildedir: İlk önce çizdiğiniz şekli, ikinci çizdiğiniz şeklin altında bir seviyeye oturmaktadır. Bu durumda, ilk önce kare çizilmiş ve kare şeklinin üzerine oturacak şekilde bir daire çizildi.

Intersection

Insersection, dört ana boolean operatörlerinden biridir ve yine aynı şekilde, Shift tuşunu basılı tutarak, çakışan şekiller arasından çoklu seçim yapın. Ardından boolean işlemleri açılır menüsünden Insersect’ı seçin.

Bu, nesnelerin kesişen kısımlarını korur ve diğer kısımları kaldırır. Aşağıdaki resimde daha iyi görecekseniz.

Difference

Bir diğer boolean operatörlerden biri ise fark operatörüdür. Burda da yine aynı şekilde çakışan şekilleri seçip, ardından Difference seçin.

Difference, intersection işleminin tam tersidir. Yani çakışan kısımları çıkarıp, geri kalan kısımları korur. Aşağıdaki resimde ne demek istediğimi daha iyi anlayacaksınız.

Union

Son olarak union; boolean birleştirme operatörüdür.

Evet, burada da şekilleri birleştiriyoruz.

Genel olarak toparlamak gerekirse, boolean operatörleri, basit şekillerden, karmaşık şekiller oluşturmak için mükemmel bir yoldur.