Archive for March, 2009
Android Markete Uygulama Göndermek
Posted by Sezer Yeşiltaş in Android, Genel on March 30th, 2009
Android platformları için uygulama geliştirme niyetindesiniz, bir geliştirici olarak en büyük sıkıntı geliştirdiğiniz uygulamayı nasıl dağıtacağınızdır, ne kadar kaliteli bir yazılım geliştirirseniz geliştirin bunu kullanıcılara ulaştıramadığınız sürece bir başarı elde etmeniz mümkün değildir. Android geliştiricilerin bir avantajı var, eğer Android Developer hesabınız varsa uygulamanızı dağıtmak çok kolay, tek yapmanız gereken Android Developer olmak…
Android işletim sistemli ortamlarda bulunacağı kesin olan Android Market yazılımı, Android geliştiricileri ile kullanıcıları biraraya getirmektedir. Mobil platformlarda ilk örneğini iPhone’da AppStore ile gördüğümüz bu yaklaşım, yavaş yavaş diğer mobil platformalara da yayılmaktadır.
Bu yazıda geliştirdiğiniz bir uygulamayı Android Market’e koyabilmek için geçmeniz gereken tüm adımları anlatmaya çalıştık.
Andorid Developer Hesabı Açmak
Android Markete uygulama koyabilmek için öncelikle bir Market hesabı açtırmanız gerekiyor. Market hesabı açtırmanın tek koşulu 25 $. Bunu da Google Checkout hesabı açarak yapıyorsunuz. Bu linkten başvuru yapabilirsiniz.

Artık bir Google Checkout bir de Android Developer hesabına sahipsiniz. Şimdi geliştirmiş olduğunuz uygulamayı anında Android Market’e gönderebilirsiniz. “Anında” diyorum çünkü yayınlanan uygulamalar herhangi bir kontrol mekanizmasından geçirilmiyor. Tek beklenti uygulamanızı Sign etmiş olmanız, Market’e yüklerken uygulamanın düzgün bir şekilde Sign edilip edilmediği kontrol ediliyor.
Android Uygulamasını Sign Etmek
Geliştirdiğimiz uygulamayı sign edebilmek için aşağıdaki üç adımı gerçekleştirmemiz gerekiyor:
- projenin sign edilmemiş halini export edeceğiz
- projemiz için bir keystore dosyası oluşturacağız
- sign edeceğiz
aşağıdaki ekran görüntüleri ve komutlarda örnek olarak aScore isimli Android uygulamasını kullandık
Export etme:
Öncelikle, Android Uygulama Geliştirme platformunu kullanarak geliştirdiğiniz uygulamayı apk paketi olarak export etmeniz gerekmektedir. Bu işlem için Eclipse’te Project Explorer bölümünde, aScore isimli Android projesinin üstüne sağ tıklayıp Android Tools->Export Unsigned Application Package demeniz lazım. Böylece diskinizde istediğiniz bir lokasyonda paketi oluşturabiliyorsunuz.
Eclipse üzerinde geliştirdiğiniz uygulamayı, emulator ile çalıştırmak istediğinizde bir paket oluşturulur ve emulatöre gönderilir, bu paket proje klasöründe bin dizininde yer alır, bu paket demo key ile sign edildiğinden tekrar sign edilemez. Paketi muhakkak Export ederek oluşturmalısınız.

Export işleminde sonra şimdi uygulamayı sign etme zamanı geldi. Bunun için önce bir keystore oluşturmanız daha sonra bu keystore’u kullanarak jarsigner ile uygulamayı sign etmeniz gerekiyor.
Keystore oluşturma:
Keystore için JDK ile gelen keytool kullanılır. Basitçe kullanımı şu şekildedir:
keytool -genkey -v -keystore ascore-key.keystore -alias aScore -keyalg RSA -validity 10000
Bu örnekte aScore isimli uygulamayı sign etmek üzere ascore-key.keystore adında bir keystore oluşturulmaktadır. Komutu çalıştırınca keystore için şifre ve KEY’de yer alacak bilgiler sorulacaktır, sorular bitince dosya oluşacaktır. -validity bölümünde belirtildiği üzere bu key 10000 gün için geçerli olacaktır.
C:\test>"C:\Program Files\Java\jre6\bin\keytool" -genkey -v -keystore ascore-key.keystore -alias aScore -keyalg RSA -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: Sezer Yesiltas
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]: Istanbul
What is the name of your State or Province?
[Unknown]: Turkey
What is the two-letter country code for this unit?
[Unknown]: TR
Is CN=Sezer Yesiltas, OU=Unknown, O=Unknown, L=Istanbul, ST=Turkey, C=TR correct?
[no]: yes
Generating 1.024 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10.000 days
for: CN=Sezer Yesiltas, OU=Unknown, O=Unknown, L=Istanbul, ST=Turkey, C=TR
Enter key password for <aScore>
(RETURN if same as keystore password):
[Storing ascore-key.keystore]
C:\test>
Sign etme:
Sign işlemi için jarsigner aracı kullanılır. Bu araç da JDK ile gelir. Basitçe kullanımı şu şekildedir:
jarsigner -verbose -keystore ascore-key.keystore aScore.apk aScore
Komutu çalıştırdığınızda size key dosyasını oluştururken kullandığınız şifre sorulacaktır, bu şifreyi doğru girerseniz paketiniz başarılı bir şekilde sign edilecektir:
C:\test>"C:\Program Files\Java\jdk1.5.0_09\bin\jarsigner" -verbose -keystore ascore-key.keystore aScore.apk aScore
Enter Passphrase for keystore:
adding: META-INF/MANIFEST.MF
adding: META-INF/ASCORE.SF
adding: META-INF/ASCORE.RSA
signing: assets/jsonic-0.9.5.jar
signing: res/drawable/alert.png
signing: res/drawable/android.jpg
signing: res/drawable/arg.gif
signing: res/drawable/bel.gif
signing: res/drawable/bg.jpg
signing: res/drawable/bih.gif
signing: res/drawable/bra.gif
signing: res/drawable/bul.gif
signing: res/drawable/calendarbw.gif
signing: res/drawable/cro.gif
signing: res/drawable/cupbw.png
signing: res/drawable/cze.gif
signing: res/drawable/den.gif
signing: res/drawable/donate.gif
signing: res/drawable/eng.gif
signing: res/drawable/esp.gif
signing: res/drawable/flash.gif
signing: res/drawable/fra.gif
signing: res/drawable/geo.gif
signing: res/drawable/ger.gif
signing: res/drawable/gre.gif
signing: res/drawable/hun.gif
signing: res/drawable/icon.png
signing: res/drawable/isr.gif
signing: res/drawable/ita.gif
signing: res/drawable/livebw.png
signing: res/drawable/ned.gif
signing: res/drawable/pol.gif
signing: res/drawable/por.gif
signing: res/drawable/refresh.gif
signing: res/drawable/rou.gif
signing: res/drawable/sco.gif
signing: res/drawable/srb.gif
signing: res/drawable/star_big_on.png
signing: res/drawable/svk.gif
signing: res/drawable/svn.gif
signing: res/drawable/tur.gif
signing: res/drawable/ukr.gif
signing: res/layout/about.xml
signing: res/layout/addleague.xml
signing: res/layout/fikstur.xml
signing: res/layout/live.xml
signing: res/layout/main.xml
signing: res/layout/row.xml
signing: res/layout/tabhost.xml
signing: res/layout/table.xml
signing: res/layout/title.xml
signing: res/layout/web.xml
signing: res/xml/preferences.xml
signing: AndroidManifest.xml
signing: resources.arsc
signing: classes.dex
signing: net/arnx/jsonic/JSON.properties
signing: net/arnx/jsonic/JSON_ja.properties
C:\test>
Dikkat:
Oluşturduğunuz keystore dosyasını saklayınız, uygulamanızın yeni sürümlerini çıkardığınızda aynı keystore dosyası ile sign etmelisiniz, aksi takdirde Market kullanıcıları upgrade esnasında hata alacaklardır.
Android Uygulamasını Upload Etmek
Android Market hesabımız ile basit bir web sayfası aracılığıyla sign ettiğimiz uygulamayı markete yükleyebiliyoruz. Uygulamayı yükledikten sonra başlık ve açıklama bilgilerini giriyor ve hangi ülke marketlerinde yayınlanacağını seçiyoruz. Bir uygulamayı birden fazla dil desteği ile yayınlamak için her dil için yeni bir paket yapma zorunluluğumuz bulunuyor, her bir paketi ilgili ülkeler için ayrı ayrı yüklememiz gerekiyor.

Uygulamayı yükledikten sonra anında Android işletim sistemli telefonlarda görebiliyoruz. Web sitesi aracılığı ile uygulamanın kaç kişi tarafından yüklendiğini, kaç kişinin yorum girdiğini ve ortalama kaç yıldız aldığı bilgilerini izleyebiliyoruz.

Android Market sayesinde Dünya’da farklı marka ve modelde Android kullanan tüm cihazlarda yerinizi alabiliyorsunuz, bundan sonrası kullanıcıların beğenisine kalıyor. Bu yazıyı hazırladağımız tarihte henüz Türkiye marketi bulunmuyordu, bu nedenle ülkemize özel bir uygulama yazsak da tüm Dünya ile paylaşmak zorundayız. Ayrıca Market’e ücretli yazılım yüklenebilmekte ama henüz ülkemiz geliştiricilerine bu izin verilmiyor, ileride gerekli ticari düzenlemeler yapıldıktan sonra bu da mümkün olacaktır.
PhoneGap ile Kolayca iPhone ve Android Uygulamaları Geliştirin
Posted by Mustafa Tan in Android, Genel, iPhone on March 23rd, 2009
Mobil dünyanın geliştiricilerin en büyük şikayeti, bir cihaz için yazdıkları uygulamanın diğer cihazlarda çalışmamasıdır. Aynı üreticiye ait cihazlar arasındaki farklar çok büyük olmasa da, farklı üreticilerin cihazları arasındaki uçurum çok büyüktür. Dolayısıyla bir uygulamanın bir çok cihazda/platformda çalışabilir hale gelmesinin maliyeti çok yüksek olmaktadır.
İlk bakışta, bu maliyeti azaltmak için, sayıları her geçen gün artan yeni nesil mobil cihazların web tarayıcılarının daha gelişmiş olmasından dolayı native yerine artık web tabanlı uygulamalar geliştirmek daha mantıklı gibi görülebilir. Fakat klasik web (html/javascript) uygulamaları, mobil cihazların donanım fonkisyonlarına (GPS, Camera, Accelerometer, Contacts, etc.) erişemedikleri için yetenekleri kısıtlıdır. Dolayısıyla heme yetenekli, hem de kolay mobil uygulama geliştirmek mümkün değildir.
İşte PhoneGap, web sayfaları içerisinden iPhone, Android ve BlackBerry cihazlarının donanımsal fonksiyonlarına erişim imkanı vererek bu ihtiyacı karşılamayı hedeflemektedir. PhoneGap’in cross-platform desteği sayesinde html/javacscript tabanlı web uygulamaları çok fazla değişikliğe uğramadan hem iPhone’da, hem Android’de hem de BlackBerry’de çalışabilmektedir.
PhoneGap is a development framework that lets HTML and JavaScript developers build native mobile phone apps that take advantage of native capabilities of the phone. And it will run on iPhone, Android and BlackBerry, and eventually it will run on other platforms.
Objective-C’nin diğer programlama dillerine göre öğrenilmesinin daha zor oluşu, PhoneGap’in aslında en çok iPhone’da uygulama geliştirmek isteyenlerin rağbet edeceği bir platform olacağını gösteriyor. PhoneGap’te uygulama geliştirmek de çok kolay, çünkü klasik bir web uygulaması nasıl geliştiriliyorsa PhoneGap uygulamaları da aynı şekilde geliştiriliyor. Tek fark GPS, Accelerometer, vs gibi donanıma özel bir fonksiyon çağırılmak istendiğinde aşağıdaki javascript fonksiyonlarının ilgili html kodunda çağırılması gerekiyor.
getLocation();
watchAccel();
vibrate();
var getLocation = function() {
var suc = function(p){
alert(p.latitude + " " + p.longitude);
};
var fail = function(){};
navigator.geolocation.getCurrentPosition(suc,fail);
}
var vibrate = function(){
navigator.notification.vibrate(0);
}
var watchAccel = function() {
var suc = function(a){
document.getElementById('x').innerHTML = roundNumber(a.x);
document.getElementById('y').innerHTML = roundNumber(a.y);
document.getElementById('z').innerHTML = roundNumber(a.z);
};
var fail = function(){};
var opt = {};
opt.frequency = 100;
timer = navigator.accelerometer.watchAcceleration(suc,fail,opt);
}
Bu javascript fonksiyonları da phonegap.js isimli bir javascript dosyasında hazır olarak bulunuyor. PhoneGap’in tek yaptığı önceden tanımladığımız uygulamanın giriş sayfasını (index.html) çalıştırmak ve sanki bir native uygulamasındaymış gibi html sayfalarını web tarayıcısı içinde göstermek. Yukarıdaki javascript fonksiyonlarını çağırdığımızda da kendi API’si üzerinden sayfada göstermek. PhoneGap ayrıca web sayfalarını istersek offline modda cihaz üzerinden, istersek de online modda internet üzerinden çalıştırmamıza imkan veriyor.

PhoneGap ile geliştirdiğimiz uygulamaları benzer mantıkla nerdeyse hiç değiştirmeden Anroid ve BlackBerry tabanlı cihazlarda da çalıştırabiliyoruz. Fakat PhoneGap halen geliştirme aşamasında olduğu için cihaza özel yetenekleri tüm platformlarda aynı değil. Merak edenler için hemen belirtelim Apple PhoneGap’le geliştirilmiş uygulamalara engel olmuyor. Bu linkte App Store’a kabul edilmiş PhoneGap ile geliştirilmiş uygulamaların bir listesini bulabilirsiniz.
Eğer PhoneGap’in çok detaylı olmasa da giriş seviyesi için yeterli bir dokümantasyonu bulunuyor. Eğer ilginizi çektiyse PhoneGap’e aşağıdaki linkten ulaşabilirsiniz.
iPhone Hello World Uygulaması
Posted by Kayhan Bölükbaş in Genel, iPhone on March 18th, 2009
Xcode’u açtıktan sonra “File” menüsünden “New Project” seçeneğine ile yeni bir proje oluşturarak işe başlayabilirsiniz. Açılan ekranı sağ tarafında iPhone ve Mac Os X şeklinde 2 başlık altında değişik şablonlar(template) ile işe başlamak mümkün. Buradan “View-based Application” şablonunu seçelim.
Xcode proje için bir isim isteyecek:

İsim olarak “ViewBasedHelloWorld” girdikten sonra devam edebilirsiniz. Bundan sonra otomatik oluşturulmuş bir proje açılacaktır. Bu şablon açıldığında artık çalışan bir iPhone uygulaması var demektir. Hemen “Build and Go” butonuna tıklayarak, iPhone simulator üzerinde uygulamanın çalıştığını görebilirsiniz. Tabii ilk anda içi boş bir ekrandan fazlası olmayacak.

“Tasks” butonuna basarak tekrar Xcode’a dönüp geliştirmemize devam edebilirsiniz.
Artık kod yazmaya başlayalım:
ViewBasedHelloWorldAppDelegate.h ve ViewBasedHelloWorldAppDelegate.m dosyalarına baktığımızda Xcode’un bizim için uygulamanın çalışacağı “Window” ve birde “View Controller” için kodları zaten ürettiğini göreceksiniz. Bu dosyalarda herhangi bir değişiklik yapmamız gerekmiyor.
“View”, “Button” ve butona basıldığında “Hello World” yazacak “Label”:
ViewBasedHelloWorldViewController.h yani view controller interface dosyasını değiştirerek aşağaki kodu ekleyin.
UIView *myView;
UIButton *roundedButtonType;

Asıl işin yapılacağı bölüme geldiniz. ViewBasedHelloWorldViewController.m dosyasını açın. Bu “view controller” içinde “View” için gerekli fonksiyonların Xcode tarafından yaratılmış olduğunu göreceksiniz. Dosya içinde “View” hiyerarşisini oluşturacabileceğiniz “loadView” fonksiyonunu bulabilirisiniz. Bu fonksiyon üzerinde aşağıdaki gibi değişiklikleri yapın. Bu kod uygulama çalıştığında ”View” oluşturacak ve onu ekrana yerleştirecektir. Ardından “View” üzerinde bir buton oluşturacaktır.
- (void)loadView {
// create and configure the view
myView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
[myView setBackgroundColor:[UIColor whiteColor]];
self.view = myView;
// create a UIButton (UIButtonTypeRoundedRect)
roundedButtonType = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
roundedButtonType.frame = CGRectMake(110.0, 40.0, 100.0, 40.0);
[roundedButtonType setTitle:@"Display" forState:UIControlStateNormal];
roundedButtonType.backgroundColor = [UIColor clearColor];
[roundedButtonType addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
[myView addSubview:roundedButtonType];
[roundedButtonType release];
[myView release];
}
“Build and Go” butonuna basıp şu ana kadar yaptıklarımızı simulator üzerinden görebilirsiniz. Uygulama açıldığında ekranda “Display” yazan bir buton görebilirsiniz. Ama henüz bir aksiyon belirtmediğmiz için butona basıldığında herhangi bir değişiklik olmayacaktır.

Şimdi “Hello World” yazacak aksiyonu belirtecek fonksiyonu yazabilirsiniz. Bunun için aşağıdaki fonksiyonu ViewBasedHelloWorldViewController.m dosyasına ekleyerek bu işlemide tamamlayabilirsiniz. Bu fonksiyon butona basıldığında çalışıp, bir “Label” yaratarak üzerine “Hello World!” yazacak ve ekranda gösterecektir.
- (void)action:(id)sender{
CGRect labelFrame = CGRectMake(110.0, 90, 100, 40);
UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
label.textAlignment = UITextAlignmentCenter;
[label setText:@"Hello World!"];
label.minimumFontSize = 20;
[myView addSubview:label];
}
Tekrar “Build and Go” butonuna basıp yaptıklarınızı test edebilir aşağıdaki gibi bir ekran görüntüsü görebilirsiniz.

Böylece “Hello World” uygulamasını tamamlamış olacaksınız.
Güncel Yorumlar