Archive for March, 2010

Android’te varsayılan ikonlar

Çoğu uygulama geliştirici gibi ben de daha çok fonksiyonel detaylara zaman ayırdığımdan genelde UI açısından şık olmaktan uzak uygulamalar geliştiriyorum. Fakat, bu kritik bir hata. Çünkü, ortalama kullanıcı fonksiyonlarından çok uygulamanın ne kadar göze hoş gözüktüğüne bakıyor. IPhone’un bu kadar başarılı olmasında temel nedenlerden biri de tartışmasız bu.

Bu motivasyonla Market’teki Instant Lyrics uygulamama düzgün ikonlar yaratmak için araştırma yaparken Simon’ın blog yazısı dikkatimi çekti. Android environment’indaki varsayılan ikonları kullanabileceğimizi söylüyor. Kullanım şekli de çok basit.

XML’de @android:drawable/<ikon ismi>

veya

kod içerisinde android.R.drawable.<ikon ismi>

şeklinde istediğiniz ikonları çağırabiliyorsunuz. İkon isimlerini öğrenmek için de iki tane alternatif sunuyor. Android 1.5 ikonlarının listesine bakabilirsiniz ya da şu programcıkla çalıştığınız versiyona ait ikonların listesini elde edebilirsiniz. Programcıktaki

String stg = Resources.getSystem().getResourceName(idx);

satırıyla tanımlı aralıktaki index‘lerden resource’un ismi ve kendisini alarak ListView’de gösteriyor.

Peki benim gibi “lazy developer”lara faydasından başka ne işe yarayabilir sorusunu sorabilirsiniz. Uygulamanızın Android’in ilgili versiyonuyla uyumlu bir arayüze sahip olmasını isteyen geliştiriciler için faydalı olabilir veya yeni başlayanlar için de Android’te Resource kullanımı konusunda bir ufuk açtığını söyleyebiliriz.

Yararlı olması dileğiyle…

, , , ,

1 Comment

Robotium ile Test Yazmak

Robotium test framework’ü sayesinde fonksiyonel testler yazmak çok kolaylaşıyor. “Selenium gibi, ama Android için” sloganını kullanan framework, test case’lerinizde kullanıcı ile etkileşim gerektiren kısımları otomatik hale getirmenize yarıyor.

Örnek vermek gerekirse, uygulamanızın login ekranında “Gönder” düğmesine tıkla, “Şifre” kutucuğuna “123456″ gir ve ekranda “Hatalı Şifre” kelimesi geçmediğinden emin ol gibi kontrolleri içeren bir test case’i Robotium kullanarak şöyle yazıyorsunuz:

public void testLogin() throws Exception {
        solo.clickOnButton("Gönder");
        solo.enterText(1, "123456");
        assertFalse(solo.searchText("Hatalı Şifre"));
} 

Bu testler Emulator üzerinde çalıştırıldığı için otomatik hale getirdiğiniz hareketleri gözünüzle görebiliyorsunuz. Yazdığınız testlerin geçip geçmediğini Eclipse’in JUnit ekranından takip edebiliyorsunuz.

robotium

Uygulamanızı Robotium ile test edebilmek için ana projenizin AndroidManifest.xml dosyasına aşağıdaki satırı eklemeniz gerekiyor:

<uses-permission android:name=”android.permission.GET_TASKS” />

Test projesinin Build Path‘ine robotium-solo-1.x.x.jar dosyasını ekledikten sonra ActivityInstrumentationTestCase2 class’ını extend eden bir test case yazmalısınız. Örnek bir test projesi görmek istiyorsanız Robotium’un Getting Started sayfasına bakmanızı öneririm. Hazırladığınız test case’i çalıştırmak için Eclipse’de projenize sağ tıklayarak “Run as Android JUnit Test” demeniz gerekiyor.

Test yazmayı kolay ve eğlenceli bir hale getiren Robotium test framework’ünü denemenizi şiddetle öneriyorum.

, , , ,

1 Comment

Android Geliştirme İpuçları (I)

Android platformunda geliştirme yaparken hayatımı kolaylaştıran ipuçlarını buradan paylaşacağım. İşte ilk ipucu:

1. Google Code Search ile Android Kaynak Kodunu İnceleyin
Tecrübeli yazılımcıların dahil olduğu açık kaynak projelerin kodlarını incelemek bana keyif veriyor, çünkü başkaları tarafından yazılmış kodları okurken farklı düşünme biçimlerini görerek kendimi geliştirme fırsatı buluyorum.

Android platformu açık kaynak olmasına rağmen kaynak koduna erişmek oldukça zahmetli. Bu noktada imdadıma Google Code Search geliyor, kaynak kodunu görmek istediğim class’ı classadı package:android şeklinde aratıyorum.

Mesela AsyncTask class’ının işleyişini merak ediyordum, asynctask package:android şeklinde aratarak AsyncTask.java kaynak kodunu incelediğimde içerisinde LinkedBlockingQueue kullanıldığını gördüm.

Başka bir kullanım alanı ise nasıl çağıracağınızı bilmediğiniz fonksiyonların örnek kullanımını görmek için: Mesela ConnectivityManager‘ın requestRouteToHost metodu argüman olarak integer cinsinden bir hostname istiyordu. hostname’i nasıl integer’a çevireceğim konusunda dökümantasyon da açıklayıcı olmayınca, Code Search üzerinden requestRouteToHost şeklinde arama yaparak örnek bir kullanım buldum.

BONUS: Stackoverflow bildiğiniz gibi Android için resmi destek kanallarından birisi. Daha önce kullanmadığım bir class’ı kullanacaksam öncelikle classadı [android] şeklinde android olarak taglenmiş başlıklar arasında arama yaparak insanların neler yapmaya çalıştığını, ne sorunlarla karşılaştığını inceliyorum.

Siz de yorumlarda kendi ipuçlarınızı paylaşırsanız sevinirim.

, , , ,

No Comments