Android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2 Mart 2016 Çarşamba

Android NDK Kullanımı

        Android Native Development Kit(NDK) bir android uygulamasında C ve C++ kodlarını kullanmamıza olanak sağlayan tool'ları barındırmaktadır.Bu C ve C++ kodlarını android uygulamamızda kullanabilmemiz için derleyerek dinamik veya statik kütüphanelere donüştürmemiz lazım.Bunun için NDK kullanırız.NDK kullanımına geçmeden önce NDK'nın kurulumunu  buradan  indirdikden sonra yapılabilir.Kurulum talimatları sayfada vardır.NDK yazdığımız C ve C++ kodlarını kütüphanelere dönüştürürken gnumake aracına ihtiyaç duymaktadır.Bunun için eğer kurulu değilse sisteminize Cygwin'i kurmanız  tavsiye  olunur.Bir örnek üzerinden giderek bu aracın kullanımına yakından bakalım.Bu yazıya geçmeden önce Java Native Interface yazısını okumanız  tavsiye olunur.

HelloNDK adında bir Android uygulamamız olsun ve bu uygulamanın Ana activitesinden bir native method çağıralım.

MainActivity.java
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package com.example.hellondk;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
 
public native String getString();
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main); 
 }
}

Görüldüyü gibi getString() adında bir native method tanımladık ama henüz çağırılmasına dair herhangi bir kod satırı yazmadık çünkü önce bu metodu içinde barındıran bir header(.h) dosyası oluşturup bu metodun implementasyonunu gerçekleştirmemiz lazım.(Not:method tanımlandığına göre herhangi bir yerden çağrılabilir fakat methoda ait kütüphane henüz olmadığı için runtime anında hata oluşacaktır)
Header dosyamızı olşuturmak için;

1
2
>mkdir jni && cd jni
>javah -classpath "<proje_yolu>/bin/classes/;<sdk>/platforms/android-xx/android.jar" -o main.h <paket_yolu>.MainActivity

(Not:Bu durumda paket_yolu'muz "com.example.hellondk"dir.)

main.h
1
2
3
4
5
6
7
/*
 * Class:     com_example_hellondk_MainActivity
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getString
  (JNIEnv *, jobject);

Aynı dizinde main.c dosyası oluşturarak  getString metodunun implementasyonunu yapalım.

main.c
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <main.h>
#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getString(JNIEnv *env, jobject obj){

 return (*env)->NewStringUTF(env, "Hello from native code!!!");
  }


JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *javaVm, void *reserved) {
 
    return JNI_VERSION_1_6;
}

Buradaki JNI_OnLoad metodu android işletim sistemine jni hakkındaki version bilgisini döndürmektedir.Bu metod kullanılmadığı takdirde hata oluşabilir.Şimdi ise yazdığımız getString metodunu derleyerek androidin kullanabileceği bir kütüphaneye dönüştürelim. Android NDK yı kullanacağımız yer burasıdır.main.c kod dosyamızı derlemek için ndk iki makefile dosyasına ihtiyaç duymaktadır.

1.Android.mk
1
2
3
4
5
6
7
8
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := myjni
LOCAL_SRC_FILES := main.c

include $(BUILD_SHARED_LIBRARY)

Bu makefile dosyasında  ndk'ın derleyeceği native kod hakkındaki parametreleri tanımlanmaktadır. LOCAL_SRC_FILES parametresi derlenecek native kod dosyalarını LOCAL_MODULE ise oluşturulacak olan kütüphanenin adını tanımlar.

2.Applicaiton.mk
1
APP_ABI := all

Bu makefile dosyasında ise oluşturulacak olan kütüphanenin hangi platform veya mimariye spesifik olacağını tanımlayan  parametreler tanımlanmaktadır.Şuan için gereken tek parametre uygulamanın kullanılacağı android mimarilerini tanımlayan APP_ABI parametresidir.Bu iki makefile  dosyasını projemizin jni klasörüne kaydetdikden sonra ndk'ın ndk-build scriptini çalıştırmamız lazım . Projemizin kök dizinine giderek aşağıdaki komutu çalıştırırsak bizim için gereken native kütüphanemiz oluşturulacakdır.

1
ndk-build

Bu komut çalıştırıldıkdan sonra projemizin libs kalsörü altında oluşturulan kütüphanenin her mimariye göre bir örneğinin oluşturulduğunu görebiliriz.Bu kütüphaneyi,dolayısıyla native metodumuzu kullanmak için MainActivity'mizi aşağıdaki şekilde değişirsek;

MainActivity.java
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package com.example.hellondk;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {
 
 static{
  System.loadLibrary("myjni");
 }
public native String getString();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main); 
  Toast.makeText(getApplicationContext(), getString(), Toast.LENGTH_LONG).show();
 }
}

ve uygulamamızı çalıştırırsak aşağıdaki gibi bir sonuç elde ederiz.



[1]http://developer.android.com/ndk/guides/index.html

14 Mart 2014 Cuma

Android Olay Yönetimi(Event Handling)

Android Olay Yönetimi bize uygulamamızdaki bileşenlerle(button,textfield,Menü,textview vs)  herhangi bir şekilde temasa geçtiyimizde devreye girer.Örnegin bir Button'a tıkladıgımızda uygulamamızın  herhangi  birşey yapmasını istiyorsak o zaman olay yönetimini kullanmalıyız.Olay yönetiminin 4 esas özelliyi vardır.

  1. Olay Kaynağı(Event Source)
    Olayı gerçekleştiren bir uygulama bileşenidir(button,textfield,textview,listview vs).
  2. Olay Dinleyicisi(Event Listener)
    Olay gerçekleştiyinde napılacagı yönünde karar veren bir Listener Classıdır.Örnegin OnClickListener classı.Olay gerçekleştiyinde bilgilendirilir.
  3. Olay Nesnesi(Event Object)
    Olay gerçekleştirildigi zaman oluşturulur ve olay ile ilgili bilgileri tutan nesnedir.
    Örnegin olay nesnemiz event olsun,event.getId() diyerek olayın hangi bileşen uzerinde gerçekleşdiyini oyrene biliriz.
  4. Olay İşleyicileri(Event Handler)
    Olay dinleyicisi tarafından olay yakalandıgında gereken kodun çalıştırılacagı metotlardır.
    Örneğin OnClickListener dinleyicisinin onClick(View event) metodu.
İki Button ve birde TextView'u olan bir örnege bakalım.
  • activity_main.xml
    --RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/RelativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" --
    
        --Button
            android:id="@+id/button1"
            android:layout_width="208dp"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button2"
            android:layout_alignParentTop="true"
            android:layout_marginTop="28dp"
            android:text="@string/bbutton" /--
    
        --Button
            android:id="@+id/button2"
            android:layout_width="205dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button1"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="14dp"
            android:text="@string/kbutton" /--
    
        --TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button2"
            android:layout_alignRight="@+id/button2"
            android:layout_below="@+id/button2"
            android:layout_marginTop="14dp"
            android:text="@string/textview" /--
    
    --/RelativeLayout--
  • strings.xml
    --?xml version="1.0" encoding="utf-8"?--
    --resources--
    
        --string name="app_name"--Android Event Handling--/string--
        --string name="action_settings"--Settings--/string--
        --string name="kbutton"--Küçült--/string--
        --string name="bbutton"--Büyüt--/string--
        --string name="textview"--Android Event Handler--/string--
      
    --/resources--
    
    
strings.xml dosyasında uygulamamızda kullanılan butun stringler tutulur,buradan uygulamamıza stringler ekleye bilir ve istediyimiz yerde onları uygun degişken isimleri ile kullana biliriz.
  • MainActivity.java
    public class MainActivity extends Activity{
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
                     
      //olay kaynakları tanımlanıyor    
      Button bButton=(Button)findViewById(R.id.button1);
      Button kButton=(Button)findViewById(R.id.button2);
                    
      //buttonlara tıklandıgında
      bButton.setOnClickListener(new View.OnClickListener() {
       
       @Override
       public void onClick(View v) {
        // TODO Auto-generated method stub
        //olay işleyicisi
        TextView text=(TextView)findViewById(R.id.textView1);
        text.setTextSize(25);
       }
      });
      kButton.setOnClickListener(new View.OnClickListener() {
       
       //olay işleyicisi  
       @Override
       public void onClick(View v) {
        // TODO Auto-generated method stub
        TextView text=(TextView)findViewById(R.id.textView1);
        text.setTextSize(15);
       }
      });
     }
    }
Uygulamayı çalıştıralım.Eger Büyüt buttonuna tıkladıgımızda mevcut textview'un boyutu buyuyecek,Küçült buttonuna tıkladıgımızda ise mevcut textview'un boyutu kuçulecekdir.



MainActivity.java sınıfındaki kodlardan gorduyumuz gibi her Button için ayrı bir dinleyici ve işleyici kullandık.
İstersek her iki Button için ortak bir dinleyici ve işleyici  de kullana biliriz.Bunu için OnClickListener interface'ni implement etmemiz lazım.
  • MainActivity.java
    public class MainActivity extends Activity implements OnClickListener{
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
          
      Button bButton=(Button)findViewById(R.id.button1);
      Button kButton=(Button)findViewById(R.id.button2);
      
      bButton.setOnClickListener(this);
      kButton.setOnClickListener(this);
     }
    
     @Override
     public void onClick(View event){
      // TODO Auto-generated method stub
      TextView text=(TextView)findViewById(R.id.textView1);
      
      if(event.getId()==R.id.button1){
       text.setTextSize(25);
      }
      if(event.getId()==R.id.button2){
       text.setTextSize(15);
      } 
     }
    }
Böylece her iki Button için ortak bir Listener kullana biliriz.



3 Mart 2014 Pazartesi

Android Uygulamasına Arkafon Müziği Ve Arkaplan Resmi Ekleme






Merhaba arkadaşlar.Bu yazımda Android uygulamamıza nasıl arka fon müziği ve resim  ekliyebiliriz onu yazıcam.
Önce resimden başlayalım.Arka plana eklemek istediyimiz resmi kopyalayın ve projenizdeki res(resource) klasorü içindeki drawable-hdpi klasörune yapıştırın.



Görduyumuz uzere res klasörunde drawable türünden 5 farklı dosya var.(eyer Android sürümünüz 4.4.2 ise.eski  sürümlerde 5 olmaya bilir).

  • drawable-hdpi
  • drawable-ldpi
  • drawable-mdpi
  • drawable-xhdpi
  • drawable-xxhdpi
Dikkat etdiyseniz kopyaladıgımız resmi drawable-hdpi klasörüne diyilde diğer 4 klasörden herhangi birinede yapıştıra bilirdik,bunu yapmamamın sebebi uygulamayı çalıştıracagım emulatör(sanal makine)'ün boyutunun 
hdpi'ye göre ayarlamamdır.Daha dogru şekilde soylesek kullanacagım layout'un buyukluyu örneğin 150x150 boyutundaysa hdpi'yi,200x200 ise xhdpi'yi,100x100 ise mdpi'yi,75x75 ise ldpi'yi seçmem lazım.(kaynak)
Klasöre ekleme işleminden sonra bu resim dosyasını xml dosyasına eklemekde gerekiyor.Bunun için
activity_main.xml dosyasını açıp aşagıdaki kodu bu dosyaya ekliyoruz.

   android:background="@drawable/android"
Resim dosyamızın ismi "android.jpg" dir,ama gorduyumuz gibi dosya uzantısını dikkate almıyoruz.
Ekledikden  sonra kodlarımız bu şekilde gözükücek.

  • activity_main.xml
--AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/android"
    tools:context=".MainActivity"-- 
--AbsoluteLayout--

(arkadaşlar  yukarıdaki kod blogunda < ve > işaretleri yenine -- kullandım,kod blogunda ,< ve > html gibi yorumlandıgından kod blogu gosterilmiyordu)
Uygulamamızı çalıştıralım.Gördüyümüz gibi arka plana resim eklenmiştir


Şimdie ise arkafon  müziği ekleyelim.Yeniden ekleyeceğimiz müzik dosyasını kopyalayıp res klasöründeki drawable-hdpi klasörüne yapıştıralım.


Şimdi ise MainActivity.java(uygulama çalışırken çalıştırılacak kodların bulundugu sınıf) sınıfını açalım.
MainActivity.java
package com.example.ilkuygulamam;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

}
Arkafonda müzügin çalmasını istiyorsak,önce sınıfımızda  bir MediaPlayer oluşturmamız lazım.
Oluşturma kodu aşagıdaki gibidir.
MediaPlayer music=MediaPlayer.create(MainActivity.this, R.drawable.mymusic);             

Bu kodu classımıza ekliyoruz ve MediaPlayer'i çalıştırmak içinde ayrıca 
music.start();
kodunu eklememiz gerekiyor.
  • MainActivity.java
package com.example.ilkuygulamam;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.media.MediaPlayer;
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  MediaPlayer music=MediaPlayer.create(MainActivity.this, R.drawable.mymusic);
  music.start();
  
 }

}
Şimdi uygulamamızı çalıştıralım,uygulamamız çalıştıgında goruntu aşagıdaki gibidir,ama arka fonda muzik çalmakdadır ;).


2 Mart 2014 Pazar

Android Uygulaması Oluşturma Ve Çalıştırma

Merhaba arkadaşlar,bu yazımda Android uygulaması oluşturma ve çalıştırılmasını anlatıcam,ayrıca
oluşturulan uygulamanın bileşenlerindende bahsedeceğim.
Uygulama oluşturmak için File->New->Project yolunu takip edelim.



Android Application Project'i seçip Next diyelim.


2 kere next dedikden sonra boyle bir sonuçla karşılaşmamız gerekiyor.
Buradaki Activity Name oluşturulacak Activity'nin ismi,Layout Name ise bu Activity için oluşturulacak Arayuz penceresi için oluşturulacak olan xml dosyasının ismini temsil ediyor.Finish    dedikten    sonra uygulamamız otomatik oluşturulucak.  

.

  • MainActivity.java


MainActivity.java sinifı,uygulamamız çalıştırıldıgında,çalıştırılıcak olan kodları barındıran sınıfdır.

  • onCreate() Metodu
OnCreate() metodu hem yeni bir aktivite oluşturulurken hem de aktivitenin yeniden oluşturulması esnasında çağrılan bir metotdur.Bu metotta Bundle nesnesinin okunması gerekir. Eğer bundle nesnesi null  ise sistem yeni bir aktivite oluşturur ,bundle null deyilse  activitiyeyi yeniden oluşturur ve önceki bilgileri bu aktiviteye  aktarır.
  • setContentView() Metodu
setContentView() metodu, çalıştıracagımız Activity için kendimizin oluşturdugu veya oluşturulan xml dosyasının bu activity'ye eklenmesini saglar,ve her bir Activity sinifının en az bir xml dosyası olması gerekir.


  • activity_main.xml


Bu activity_main.xml dosyamızın Graphical Layout kısmıdır.Buradan Uygulamamızın Arayüzünü surukle-bırak yoluyla oluştura biliriz,activity_main.xml'e tıkladıgımızda bu arayuzun arka plan kodlarını gorebiliriz.


Kod gorunumu bu şekildedir.

Buradan arayuzumuzun bileşenlerinin ozelliklerini deyişe,ve arayuzumuze yeni bileşenler ekleye biliriz.


  • AndroidManifest.xml


AndroidManifest.xml dosyası uygulamamızın tüm kurallarının bulundugu dosyadır,uygulamamız çalıştırılmadan once,uygulamammızın  butun Activityleri bu dosyada  tanımlanmalıdırlar,
Bir Android uygulamasının bileşenlerinin bir kısmından bahsetdik,diger kısımlarındanda ilerde uygulamalar gelişdirirken bahsedeceğim.
Şimdi gelelim uygulamamızın çalıştırılmasına.
Uygulamamızın kodlarının derlenmesi işini Android SDK Tools görur,çalıştırmak içinse ya gerçek bir Android işletim sistemli makineye(örn:Android işletim sistemli bir telefon),yada kendimizin oluşturacagı Sanal Makine'ye  ihtiyacımmız vardır.

  • Sanal Android Makinesi nasıl oluşturulur?
Bunu yapmak için Android Virtual Device Manager'i kullanıyoruz.




Android Virtual Device Manager'i açdıktan sonra New diyoruz ve makinemizi oluşturuyoruz.
Oluşturdugumuz bu sanal makinelerin çalışması uzun surdugunden,alçak ozellikli makine oluşturmanız tavsiyedir.Sanal Makineyide oluşturdukdan sonra artık uygulamamızı çalıştıra biliriz,bunun için Run dememiz yeterli.Umarım  bu yazım herkese yardımcı olur,İy Çalışmalar.



28 Şubat 2014 Cuma

Eclipse'e Android Kurulumu

Öncelikle neden Eclipse?.Eclipse açık kaynak kodlu tümleşik bir yazılım geliştirme ortamıdır(IDE'dir).Ana odak noktası Java ve Java ile ilgili teknolojiler olsada plug-ins based yapısı sayesinde Python,C/C++,Ruby,PHP,JavaScript ve başka diller ile yazılım geliştirme içinde kullanılmaktadır.
Android yazılımı geliştirmek için Eclipse'i seçmemin en önemli  sebebi ise Internetde Android ile ilgili egitim derslerinin nerdeyse hepsinin Eclipse uzerinden anlatılmasıdır,yani yardımcı kaynak ne kadar fazla ise oyrenmek o kadar hızlı ve verimli olur mantıgı uzerinden yurumek lazım bence.
Eclipse'in Java için standart sürümünü  buradan indirebilirsiniz,indirdikden sonra kuruluma gerek yoktur,Eclipse'i direk çalıştıra bilirsiniz.
1.Yüklediyiniz Standart surumde veya Eclipse'in diger mevcut surumlerinde Android geliştirme ortamı bulunmaz,bu ortamı kendimizin oluşturması gerekiyor,bunun için gerekenlerden ilki ve en onemlisi Android SDK(Software Development Kit)'dir.bu addresten SDK'yı indirin.
2.Eclipse'i açın ve Help->Install New Software->Add yolunu takip edin.

Açılan küçük pencerede 'Name' kısmına 'Android','Location' kısmına ise https://dl-ssl.google.com/android/eclipse/ bu addresi kopyalayın.Ok'e tıklayıp bekleyin.

Karşınıza boyle bir pencerenin çıkması lazım,sadece Developer Tools'u seçin(NDK Plugins Android'i C/C++ ile geliştirmek  içindir),Next diyin ve bekleyin.Yükleme bitdikden sonra Eclipse'i yeniden başlatın,yeniden başlatdıgınızda karşınıza boyle bir pencere çıkacakdır.
Eclipse burada indirdiyiniz SDK nın dizinini istiyor,dizini gosterin ve Next diyin.SDK nında yuklenmesi bitdikden sonra Android SDK Manager'i açın.

 Android SDK Manager'den gereken paketlerin kurulması gerekiyor.

Resimde gorduyunuz gibi Tools'u ve Android'in istediyiniz herhangi bir surumunu seçe bilirsiniz,seçdikden sonra Install diyin ve bekleyin,kurulum işlemi uzun surebilir.
Kurulum bitdikden sonra artık Eclipse'niz Android Uygulamaları geliştirmek için hazırdır.
İy Çalışmalar!!!