13 Aralık 2011 Salı

Android Apk Dosyasını Sanal Makinede Çalıştırma

Burada anlatacağım işlemleri yapabilmek için sanal ,içerisinde Android işletim sistemi kurulmuş olan bir sanal makienin bilgisayarınızda yüklü olması gerekir. Ben burada sanal makineye dışarıdan bir apk dosyasını nasıl yükleyeceğimizden ve nasıl çalıştıracağımızdan bahsettim.Öncelikle ADB (Android Debug Bridge) ile sanal makinemize bağlantı kurabiliyor olmamız gereklidir. ADB ile sanal makinemize bağlanmak için şu işlemleri yapmalıyız.

-Sanal makineyi açtıktan sonra Ayarlar-->Ağ ı seçtikten sonra eklendi kısmını Bridged Adapter olarak  değiştirip isim olarakta bulunduğumuz ağı seçiyoruz ve  Tamam diyoruz.


-Bunu yaptıktan sonra Başlat diyerek Anroid i çalıştırıyoruz ve Alt+F1 ile Android in konsol moduna geçmesini sağlıyoruz. Konsol açıldıktan sonra konsola netcfg yazarak sanal makinemizin ip adresini öğreniyoruz.Bu ip yi no ederek Alt+F7 ile konsol modundan çıkıyoruz.

-Kendi ev sahibi bilgisayarımızda konsolu açarak bilgisayarımızda  bulunan android sdk sının (bende ki android-sdk-linux_x86 ) içinde bulunan platform-tools dizininin içine gidiyoruz.Bu dizinin içinde adb yi göreceksiniz. Şimdi bu dizinin içinde ./adb connect 192.168.2.12 (sanal makinenizin ip adresi) yazıyoruz ve bunu yaparak sanal makinemiz ile bağlantı kurmuş olduk.

-Şimdi daha önceden oluşturmuş olduğumuz apk dosyasını  platform-tools dizininin içine kopyalıyoruz ve bu apk dosyasını çalıştırmak için yine konsola ./adb install HelloWidget.apk( oluşturduğunuz apk dosyasının adı)  yazıyoruz. Daha önceden çalıştırdığınız bir apk dosyasını tekrar çalıştırıyorsanız install -r  yazmalısınız bu -r parametresi sayesinde daha önceden çalıştırılmış olan apk dosyası uninstall yapılır ve bu yeni apk dosyası çalıştırılır aksi halde eskisi çalışmaya devam eder.

-Şimdi Apk dosyamızı sanal makinemizde Settings-->Applications-->Manage Applications-->Downloaded kısmında bulabiliriz.



Eclipse İle Android Apk Dosyası Oluşturma

Bugün geliştirdiğimiz Android programını herhangi bir Android cihazda çalıştırabilmek için gereken apk dosyasını oluşturma yani yazdığımız programı derleme üzerine yazacağım.

- Eclipsede seçtiğimiz program üzerinde File-->Export diyoruz.




-Açılan pencere üzerinden Export Android Applicacion a tıklıyoruz.



-Bu pencerede apk sını oluşturmak istediğimiz projemizi seçiyoruz.


- Projemizi seçtikten sonra bir keystore oluşturabilmemiz için bir pencere açılıyor.Cerate New Keystore u tıkladıktan sonra  keystore için bir dosya yolu ve bir parola belirliyoruz.Next diyerek devam ediyoruz.



-Bu pencerede key oluşturabilmek için gerekli bilgileri giriyoruz.  Bu yazıcaklarınızı kendiniz belirleyebilirsiniz fakat ülke kodu ve Validity degeri aynı kalsın.Bu bilgileri yazdıktan sonra yine Next diyoruz.




-Son olarakta oluşturacağımız apk dosyası için bir  dosya yolu belirleyip Finish diyoruz.


Şimdi bu apk dosyasını bir android cihazında çalıştırabiliriz. Bu çalıştırmayla ilgili olarak hangi cihazda çalıştırdığımıza göre değişiklik gösterebiliyor ben bir sonraki yazımda apk dosyasını android sanal makinede nasıl çalıştırılacağından bahsedeceğim.







12 Aralık 2011 Pazartesi

Eclipse'e Android SDK Plugin Yükleme

Bir süredir Android ile ilgili çalışmalara başladığım için bundan sonra bir süre Android ile ilgili yazılar yazacağım. Bugün başlangıç olarak  Eclipse'e android sdk'sının nasıl kurulacağından bahsedeceğim.Android Sdk'sı Android uygulamaları geliştirmek için gerekli tüm kütüphaneleri içeren bir eklentidir.
Eclipse'in zaten bilgisayarınızda kurulu olduğunu düşünerek  o kısıma girmeyeceğim. Öncelikle Android sdk'sını buradan indirebilirsiniz: http://developer.android.com/sdk/index.html
Kullanacağınız Sdk'yı indirdikten sonra Eclipse'in  menu kısmında bulunan Help menüsünden Check for Updates kısmını tıklayıp Eclipse'i güncelleyelim.Ben Eclipse'imi Indigo sürümüne güncelleştirip sdk kurulumunu gerçekleştirdim. Güncelleştirmeyi yaptıktan sonra sırasıyla;
 Eclipse -->Help-->Install New Software i tıklıyoruz





Burada Add kısmına tıklayarak açılan pencereye location olarak https://dl-ssl.google.com/android/eclipse bu adresi kopyalayıp, isim kısmına belirlediğimiz bir ismi yazarak  tamam diyoruz. Alttaki pencerede adresin alt kısmında beliren Developer Tools kısmını seçtikten sonra Finish diyoruz.Eğer yükleme işlemi başarılı bir şekilde tamamlanırsa Eclipse kendiliğinden restart yapacaktır yada siz kendiniz de restart yapabilirsiniz.      
Bunları yaptıktan sonra şimdi sıra  indirmiş olduğumuz sdk yı Eclipse'e tanıtmaya geldi. Eclipse-->Window-->References i tıkladıktan sonra gelen pencereden Android'i seçerek sdk location bölümüne indirmiş olduğumuz sdk yı gösteriyoruz. Sdk Targets kısmında ise yükleyeceğimiz Android versiyonunu seçerek Tamam diyoruz. Sonra yine Eclipse-->Windows-->Android SDK and ADV Manager'ı seçiyoruz.Açılan pencerenin solundan Available Packages'ı tıkladığımızda sağ kısımda açılan tüm paketleri seçerek Install Selected diyoruz. Bu işlem biraz uzun sürebilir. Şimdi android sdk sını kullanabiliriz.Sanal cihaz oluşturmak içinse yine Eclipse-->Window-->Android SDK and AVD Manager'ı tıklıyoruz. Açılan pencerenin  sol kısmından Virtual devices seçtikten sonra sağ kısımda ki New'e tıklıyoruz. Sanal aygıta bir isim yazdıktan sonra Target kısmından kullandığımız Android sürümünü seçiyoruz ve Create AVD diyoruz.

Bu işlemi de gerçekleştirdikten sonra ,artık Android projeleri oluşturabilecek  ve bunları android emülatöründe çalıştırabileceksiniz. 









19 Temmuz 2011 Salı

Konsol Bölümlerini Kapatma

Bugün daha önce yaptığım konsol bölümlendirmelerini  kapatma işini tamamladım.Bu iş basit gibi gözüksede beni çok oyaladı , çünkü iç içe bir çok splitter yerleştirildiğinden kapatacağımız splitterın parentını alma ve bu parent üzerinden çeşitli kontroller yapılması gerekiyordu. Neyse ki bugün tamamlandı.

Bölümleri kapatma işini rekursif olarak yapmam gerektiğini biliyordum fakat bunu tek bir metotla halledemedim, çünkü nedenini bilmediğim bir şekilde shortcut içinde çağrılan fonksiyona parametre gönderildiği zaman shortcut düzgün çalışmadı. Bende bunu iki farklı fonksiyon tanımlayarak hallettim. Tanımladığım ilk fonksiyonda seçilen widgetın parentını alarak splittera ulaştım ve termwidget nesnesini deleteLater() metodunu kullanarak sildim. Sonrasında seçilen splitterı rekursif olarak çağıracağım fonksiyona parametre olarak gönderdim.


def yokedici(self):
        secilenWidget=self.focusWidget().parent()
        secilenSplitter=secilenWidget.parent()
        secilenWidget.deleteLater()
        self.rekursiveDelete(secilenSplitter)

 Rekursif fonksiyonun içinde öncelikle bu splitterın mainwindowa yerleştirilen ilk widget olup olmadığını kontrol ettim ve eğer bu splitter ilk splitter ise splitterı silmeden içine yeni bir termwidget nesnesi oluşturarak fonksiyondan çıktım. Fakat eğer splitter ilk splitter değilse gelen splitterın parentını aldım ve bu splitterı sildim.
Elde ettiğim parent splitterın içinde kaç tane splitter olduğu kontrolunu yaptıktan sonra eğer başka splitter yoksa parent splitterı rekursif fonksiyona parametre olarak gönderdim. Eğer parentın sileceğimiz splitterdan başka splitterı varsa parent splitter içindeki sonraki çocuk splittera fareyi odaklayarak  fonksiyondan çıktım.


parent=gelenSplitter.parent()
            gelenSplitter.deleteLater()
            if(parent.count()==1):
                self.rekursiveDelete(parent)
            print "splitter siliniyor"
            parent.focusPreviousChild()
Bu aşamada cink konsolu ile ilgili yapılacak sağ tıklama ve konsolun f12 ile açılması işleri kaldı. Bu işlerinde  kısa zamanda tamamlanacağını düşünüyorum.

Cink Konsolunu Bölümlendirme

Bir süre önce başladığımız cink projesinde almış olduğum konu konsolu yakuakedeki gibi bölümlendirebilmekti. Stajın ilk iki haftası boyunca bu konuyla ilgilendim. İlk haftanın sonunda bölümlendirmenin nasıl yapılacağını kavramıştım,sadece bunu cink'in kodlarına aktarmak kalmıştı. PyQt ile geliştirmekte olduğumuzdan Qt'nin QSplitter sınıfını kullandım. QSplitter tam olarak içine istediğiniz gibi widget ve splitter yerleştirebileceğiniz bir widgettır . İlk olarak QMainWindow dan bir nesne oluşturdum ve bu nesneden bir splitter yarattım,bu splittere mainwindoun içine yerleştirdikten sonra splitterda bir değişiklik yapmadan içine bir QTermWidget nesnesi oluşturarak yerleştirdim. Bölümlendirme yatay ve dikey olacağından bende Horizontal ve Vertical olarak iki ayrı metot tanımladım ve bu metotlara erişimi QShortcut ile gerçekleştirdim. Bu shortcutları kodda mainin içinde yazdım.


shortcut = QShortcut("Ctrl+Shift+a",w,w.Horizontal)
shortcut = QShortcut("Ctrl+Shift+g",w,w.Vertical)


Daha sonrasında Vertical ve Horizontal metotlarının içine bölümlendirmeyi yapabilmek için birbirine çok benzer kodlar yazdım. Bu iki metodun tek farkı yönlendirme yapma kısmıydı yani :

selectedSplitter.setOrientation(Qt.Qt.Horizontal)

Bu kısım splittera ,bu splitterdan oluşturduğumuz nesneleri nasıl yerleştireceğini söylüyor. Başlangıçta splitterın içine yerleştirdiğim termwidget nesnesinin bu metotlarda kapatmam gerekti, bu şekilde oluşturduğum splittera yönlendirme yapabildim. Termwidget nesnesinin splitterdan kaldırdıktan sonra bu splitterdan iki tane splitter oluşturdum : splitter1=Qt.QSplitter(selectedSplitter)
 Bu splitterları oluşturduktan sonra başlangıctaki splittera yatay/dikey yönlendirme yaptım ve splitter içine yatar/dikey olarak yerleşen splitterların birinin içine daha önceden gizlemiş olduğum splitterı diğerine de yeni bir termwidget nesnesi oluşturarak yerleştirdim.


selectedWidget.setParent(splitter1)  yazdıktan sonra birde bu widgetı gösterebilmek için selectedWidget.show() satırını ekledim.


Bu şekilde her seferinde seçmiş olduğum termwidget nesnesini focusWidget() metodu ile alıp , bu nesnenin parent'ını alarak seçilen splittera ulaşmış oldum ve seçilen splitterdan  yatay/dikey olarak yönlendirme yaptıktan sonra iki tane splitter oluşturdum ve bu splitterların içine önceden focuswidget ile aldığım widget nesnesini ve yeni oluşturduğum widget nesnesini yerleştirerek konsolu yatay ve dikey olarak bölümlendirmeyi sağlamış oldum.
Konsolu bölümlendirdikten sonra şimdi ise bu bölümleri tekrar kapatma işi ile uğraşıyorum. Kapatmayı da tamamladıktan sonra o konuyla ilgili de açıklama yazacağım.

Anlatmış olduğum işin kodlarını incelemek isterseniz kodlara buradan bakabilirsiniz: http://svn.comu.edu.tr/websvn/filedetails.php?repname=Cink&path=%2Fproje%2Fcink.py