Bir Android Uygulamasının Anatomisi


Merhaba, bu yazımda bir android projesinin anatomisinden bahsedicez.

Bir android uygulamasının anatomisini yani proje klasörlerinden ve dosyalarından hangisinin ne için kullanıldığını hangisinin ne işe yaradığını bilmek çok önemlidir ve yararlıdır. Sırasıyla önem arzeden klasör ve dosyaları kısaca tanıyalım.

src klasörü: Bu klasör proje içindeki .java uzantılı kaynak dosyaları içerir. Default(ön tanımlı) olarak içerisinde bir MainActivity.java dosyası vardır ve projenizi çalıştırdığınızda bu activity başlatılır. 

gen klasörü: Bu klasör derleyici tarafında oluşturulan .R dosyasını içerir. Bu dosya projedeki bütün kaynakların referanslarını içerir. Bu dosyayı kesinlikle karışmamalısınız/içeriğini değiştirmemelisiniz.

bin klasörü: Bu klasör .apk uzantılı projenize ait bir nevi .exe dosyası olan dosyayı içerir. Bu dosya projeniz inşa edilirken ADT(Android Developer Tools) tarafından oluşturulur. Ayrıca bu klasörde projenizi çalıştırmak için gerekli olan diğer herşey bulunur.

res/drawable-hdpi: bu klasör drawable nesneleri için kullanılır. Bu klasöre high-density ekranlar için hazırlanmış tasarım için gerekli resim-grafik-ikon vb. herşey atılır.

res/layout: Bu klasörde uygulamanın arayüzünü oluşturucak dosyalar bulunur. 

res/values: Bu klasörde diğer çeşitli xml dosyaları bulunur. Bu xml dosyalarından bazıları şunlardır: strings.xml, colors.xml, dimens.xml. Bunlar çeşitli kaynaklar için oluşturulan bir nevi kimlikleri/özellikleri içeren dosyalardır. İlerledikçe daha iyi anlayacaksınız.

AndroidManifest.xml: Bu dosya uygulamanın temel karakteristiklerini ve her bir bileşenini tanımlar.     

Şimdi de kısaca herhangi bir android uygulaması için bazı önemli dosyalardan bahsederek içerikleri hakkında örnekler verelim.

Main Activity Dosyası

Main Activity kodları bir java dosyasıdır. Uygulamayı çalıştırdığınızda aslen bu dosya dalvik çalıştırılabilir dosyasına dönüştürülüp uygulamanız cihaz üstünde ya da emülatörde çalıştırılır. Örnek olarak yeni bir android uygulama projesi oluşturduğunuzda default olarak gelen MainActivity.java dosyasının içeriğini aşağıda görebilirsiniz.

package com.example.ilkornek;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

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

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

Buradaki R.layout.activity_main kodu  /res/layout klasöründeki activity_main.xml dosyasını refer etmektedir. Üstte verilen kodlarda geçen onCreate() metodu uygulama başlatılırken çağrılan birçok metod tan biridir.

Manifest Dosyası

Hangi proje üstünde çalışıyor olursanız olun projenizle/uygulamanızla alakalı bütün bileşenlerini bu dosyada deklare etmelisiniz. Bu dosya uygulamanız ve Android İşletim sistemi arasında bir arayüz görevi görür. Yani bu dosyaya deklare etmediğiniz bir  uygulama bileşeni Android İşletim sistemi tarafından yok sayılacak – görülmeyecektir. Bir örnek manifest dosyasının içeriği aşağıda verilmiştir.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ilkornek"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.ilkornek.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Burada şunları bilmek iyi olur:

– <application> …. </application> tagları arasında uygulama ile ilgili bileşenler yer alır.

– android:icon=”@drawable/ic_launcher –> android:icon niteliği uygulamanın ikonunu ya da simgesini belirtmek için kullanılır. Burada drawable klasörlerinde bulunan ic_launcher.png adlı resim/simge adres gösterilmiştir.

– <activity> …. </activity> tagları arasında bir activity i tanımlamak için gerekli bütün şeyler yazılır.

1. android:name niteliği ile activity nin tam sınıf adı verilir.

2. android:label niteliği ile activity için actionbar da kullanılacak isim/başlık tanımlanır.

3. <action android:name ….. /> tagı ile bu activity nin uygulama için giriş noktası olduğu belirtilmiştir. Sondaki MAIN kelimesi bunu sağlar. (MAIN –> ana demektir.)

4. <category android:name ……. /> tagı ile bu activity nin uygulamanın başlatılacağı activity olduğu belirtilmiştir. Burada sondaki LAUNCHER kelimesi bunu sağlar. (LAUNCHER –> başlatıcı demektir.)

Bir manifest dosyasında karşılaşabileceğiniz/kullanabileceğiniz bütün taglar aşağıda verilmiştir.

– <activity> elemanları, aktiviteler için

– <service> elemanları, servisler için

– <receiver> elemanları, yayın alıcılar için

– <provider> elemanları, içerik sağlayıcılar için

Strings Dosyası

strings.xml dosyası res/values klasöründe bulunur. Bu dosya proje ile alakalı bütün text-yazı bilgilerini içerir. Örneğin buton isimleri, etiketler, kategori isimleri vb. Örnek bir strings.xml dosyası aşağıda verilmiştir.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">IlkOrnek</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>

</resources>

 R Dosyası

gen/com.example.ilkornek/R.java dosyası MainActivity.java dosyası ile kaynak dosyaları arasında bir yapışkan gibi görev görür. Bu dosyayı kesinlikle modifiye etmemelisiniz. Örnek bir R.java dosyası aşağıda verilmiştir.

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.example.ilkornek;

public final class R {
    public static final class anim {
        public static final int abc_fade_in=0x7f040000;
        public static final int abc_fade_out=0x7f040001;
        public static final int abc_slide_in_bottom=0x7f040002;
        public static final int abc_slide_in_top=0x7f040003;
        public static final int abc_slide_out_bottom=0x7f040004;
        public static final int abc_slide_out_top=0x7f040005;
    }
    public static final class attr {
        /**  Custom divider drawable to use for elements in the action bar. 
         <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarDivider=0x7f01000b;
        /**  Custom item state list drawable background for action bar items. 
         <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarItemBackground=0x7f01000c;
        /**  Size of the Action Bar, including the contextual
         bar used to present Action Modes. 
         <p>Must be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>".
Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
in (inches), mm (millimeters).
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
         */
        public static final int actionBarSize=0x7f01000a;
        /**  Reference to a theme that should be used to inflate widgets
         and layouts destined for the action bar. Most of the time
         this will be a reference to the current theme, but when
         the action bar has a significantly different contrast
         profile than the rest of the activity the difference
         can become important. If this is set to @null the current
         theme will be used.
         <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarSplitStyle=0x7f010008;
        /**  Reference to a style for the Action Bar 
         <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarStyle=0x7f010007;
        /** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarTabBarStyle=0x7f010004;
        /**  Default style for tabs within an action bar 
         <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
        public static final int actionBarTabStyle=0x7f010003;
        /** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>".
         */
}

 Layout Dosyası

activity_main.xml dosyası res/layout klasöründe bulunan ve uygulamanın arayüzünü belirleyen dosyadır. Uygulama yazılırken java kodu içerisinden bu dosya referans gösterilir. Bu dosyayı sıklıkla değiştireceksiniz. İlk örneğimizde(hello world) default olarak oluşacak içerik aşağıdadır.

<RelativeLayout 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" >

<TextView
	    android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_centerHorizontal="true"
		android:layout_centerVertical="true"
		android:text="@string/hello_world"
		tools:context=".MainActivity" />

</RelativeLayout>

Bizi Destekleyin!

Yeni Uygulamamız “Hızlı DNS Değiştirici” yayınlandı! Uygulamayı indirerek, puanlayarak ve yorum yaparak bize destek olabilirsiniz. Emeğimizin karşılığı olarak bize destek verin.

logo_google_play_store_badge

Bir yazımızın daha sonuna geldik. Yazıyı beğendiyseniz paylaşmayı unutmayın!. Desteğiniz bizim için çok önemlidir, bizi daha fazla ders hazırlamaya teşvik edecektir.
CANLI TV İZLEME UYGULAMAMIZ DENEMEK VE/VEYA DESTEK OLMAK İSTERSENİZ MEMNUN OLURUZ :

ic_launcher512


İyi Çalışmalar.

Şunlar da ilginizi çekebilir

1 Yorum

LEAVE A COMMENT