THT DUYURU

chat
Android Geliştirme Software Development Kit – Android Native Development Kit ile ilgili dökümanlar ve projelerin paylaşım alanıdır.

ugursuz reklam
takipci
Seçenekler

💻 Android Uygulama Geliştirmek | Dev Konu

Ego1st - ait Kullanıcı Resmi (Avatar)
Stajyer Yazılımcı
Üyelik tarihi:
03/2018
Mesajlar:
929
Konular:
88
Teşekkür (Etti):
183
Teşekkür (Aldı):
320
Ticaret:
(0) %
18
868
2 Hafta önce
#1
Merhabalar dostlar, sizler ile yeni bir seriye başlıyoruz, Android Geliştirme serisi. Bu seride Android Geliştirme içinde ne varsa hepsinin detayına ineceğiz hepsine bakacağız. Şimdi lafı çok uzatmadan başlayalım.

Öncelikle Android geliştirebilmek için Kotlin ya da Java bilmemiz gerekiyor. Bu seriye başlamadan önce Kotlin'i detaylı bir şekilde anlattığım bir anlatım serisi vardı okumak isteyenler için buraya bırakıyorum


https://www.turkhackteam.org/java/19...temelleri.html
https://www.turkhackteam.org/java/19...-non-null.html
https://www.turkhackteam.org/java/19...ogramlama.html
https://www.turkhackteam.org/java/19...outineler.html

Bu eğitim'de Kotlin üzerinden ilerleyeceğiz eğer Kotlin bilmiyorsanız, benim bıraktığım linklerden veyahut kendiniz öğrenebilirsiniz. Şimdi geliştireceğimiz platform kurulumlarına geçelim.

JDK İndirmek

İlk olarak JDK (Java Development Kit) Java Geliştirici Kit'ini indirmemiz gerekiyor. JDK yazdığımız kodun derlenmesi için gerekiyor. Şimdi arama çubuğuna "jdk download" yazalım.



Gelen sayfadan sistemimize uygun olan sürümü seçiyoruz. Eğer sistemimiz 32 bit ise Java SE 8'i, 64 bit ise en son sürümü indirebiliriz, bende şu an Java SE 15 gözüküyor siz de en son sürüm neyse onu indirebilirsiniz, zaten ben çok büyük değişim olursa konuyu güncellerim. Neyse şimdi buradan Oracle JDK kısmından JDK Download seçeneğine tıklıyoruz



Tıkladıktan sonra gelen sayfadan sisteminize uygun olan indirme seçeneğini seçiyorsunuz.



Dosyamızı indirdikten sonra next -> next şeklinde kurabilirsiniz lakin burada dikkat etmeniz gereken bir husus var. İndirme dizinin C:\Program Files\Java\jdk-15 şeklinde olması lazım, bu standart olandır. Değilse de bu duruma getirebilirsiniz.

Kurulum işlemleri bittikten sonra java'yı sistemimize tanıtmamız lazım bunun için; Bu Bilgisayar -> Özellikler -> Gelişmiş Sistem Ayarları -> Ortam Değişkenleri. Daha sonra buradan Sistem Değişkenleri altından Path'e çift tıklıyoruz ve C:\Program Files\Java\jdk-15\bin yazıyoruz.



Bunu yaptıktan sonra tamam, tamam deyip çıkıyoruz. Şimdi Android Studio yani Android uygulamalar geliştireceğimiz ortamın kurulmasına geldik.

Android Studio İndirmek

Android Studio İndirmek İçin https://developer.android.com/studio adresine gidiyoruz ve Download Android Studio diyoruz.



Şimdi kurulumu detaylandıralım;

İndirdiğimiz dosyayı açıyoruz

Bu adımları izleyelim.















Ardından gelen Select Default JDK ******** Android Dizininin altında olmalıdır.

Sonra Gelen UI Teme kısmından Darcula ya da Light seçebilirsiniz. Benim favorim Darcula



Bu eski bir ekran görüntüsü olduğu için API 30 değil de 29 gözüküyor zaten sizde en son sürüm gelecektir. Android Virtual Device'ı işaretlemeyi unutmayın. Bu uygulamaları deneyeceğimiz emülatör cihazıdır. Yani bu olmazsa olmaz.

Android SDK ******** da yine çok önemlidir. SSD'niz varsa oraya kaydetmeyi unutmayın. VE EN ÖNEMLİSİ BU LOKASYONDA TÜRKÇE KARAKTER NOKTA VS OLMAMALI YOKSA HATA VERİYOR.



Burada RAM'i kendi raminize göre ayarlamanız gerek benim 8 gb ramim var. 2gb'da sorun çıkmıyor, bu şekilde kullanabilirsiniz.



Finish deyip yüklenmesini bekliyoruz.

Yüklendikten ve bir hata ile karşılaşmadıktan sonra Finish deyip kapatabiliriz.

Kurulum işlemlerimiz burada sona eriyor şimdi ise kodlamaya & uygulamaya başlayalım.

Proje Oluşturmak

Gelen ekranımızdan yeni bir proje oluşturuyoruz



Empty Activity yani Boş Aktiviteyi seçelim.



Name'e MyFirstApp dedim siz istediğiniz diyebilirsiniz. Package name'in açılımı şu şekildedir com.<SİZİNADINIZ>.<UYGULAMAİSMİ> bu şekilde yaptıktan sonra Save ********'da Türkçe karakter olmamasına dikkat edin. Dil tabi ki Kotlin seçiyoruz. Minimum SDK ise, en düşük olarak hangi telefon'da çalışacağıdır. Android Studio standart olarak API 16 Android 4.1 seçmekte. Eğer burada karar vermekte zorlanırsanız, aşağısında kalın bir şekilde yazan dünyadaki bütün Android cihazlarının ortalama kaçında çalışacağını yazan sayıya bakabilirsiniz. Hala karar veremediyseniz Help Me To Choose yazan yere basıp grafiği inceleyebilirsiniz.



Daha sonra Finish deyip projeyi oluşturuyoruz.

İlk açıldığında hem Kotlin hem de bazı Gradle dosyalarını yüklediği için ilk açılışa mahsus biraz uzun sürebilir. Bu sürede dosyalarda değişiklik yapmayalım



Bittiğinde Build penceresi altından BUILD SUCCESSFUL yazısını görüyorsanız, hazırız demektir

İlk App'im Hello World

Evet dostlar bütün kurulum işlemlerimiz hallolduğuna göre artık başlayabiliriz.

activity_main.xml dosyamızı ilk açtığımızda bu şekil bir ekran geliyor.



Ekranın tam ortasında bir TextView var ve içinde Hello World! yazıyor. İsterseniz yazıyı değiştirip Selam THT Ailesi yapalım.

Yaptıktan sonra uygulamayı bir çalıştıralım bakalım gerçekten çalışıyor mu?



Burada normalde yükleme ekranında seçtiğimiz gibi hazır olarak bir telefon gelmesi gerekiyor eğer gelmediyse, sağdan 4. bir telefonun önündeki Android logosu olan butona tıklayalım. Bu AVD (Android Virtual Device) Manager yani Android Sanal Cihaz Yöneticisi'dir, buradan sanal telefonlarımızı kontrol edebiliriz.



Buradan Create Virtual Device diyoruz.



İstediğimiz telefonu seçip Next diyoruz.

Burada sürümü soruyor. Güncel olarak R gelmesi lazım seçip Next diyoruz.

Cihaza isim veriyoruz ve daha sonra hiç bir şeyi ellemeden finish diyoruz.

Ve cihaz geliyor. Şimdi AVD'yi kapatıp sağ üstteki menüden yeşil çalıştır tuşuna basalım.

Eğer hata çıkmazsa cihaz açılacak ve uygulama çalışacaktır

Hata çıkarsa sormayı unutmayın dostlar



Gördüğünüz gibi uygulama başarılı bir şekilde çalıştı. Bunlar arkada dursun şimdilik.

Şimdi kısa bir uygulama yapalım. Bu uygulama şöyle olsun. Bir kişi adını soyadını ve yaşını girsin daha sonra onu başka bir sayfada gösterelim. Biliyorum çok basit gibi geliyor ama bir sürü şey öğreneceğiz, başlayalım.

Öncelikle 2 tane EditText ve 1 tane Button koymamız gerek, bunlar sol kısımdaki palette kısmından bulabilirsiniz.



Sağ taraftaki attributes kısmından istediğiniz özellikleri değiştirebilirsiniz.

Ben açık olması için PlainText'lerimizin en üst tarafta bulunan id'lerin adsoyadtext ve yastext olarak değiştiriyorum.

Button'da ise yine özellikler kısmından onClick kısmına tiklandi yazıyorum. Tasarım tarafındaki işlemlerimiz bu kadar şimdi kodlara gelelim. Öncekikle onClick yani tıklandığında ne olacağını belirten metodumuzu bir yazmamız gerekiyor.

onClick nedir?

onClick bir görünümün (buton, yazı, resim) üstüne kullanıcı tarafından basıldığında ne olacağını belirten fonksiyondur.

Şimdi "tiklandi" olarak belirttiğimiz onClick fonksiyonumuzu onCreate()'nin dışında ama MainActivity'nin içine yazmamız gerekiyor.

Kod:
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun tiklandi(view: View){
        
    }
}
NOT: fun tiklandi() yapıp parantezin içini boş bırakırsanız hata verir çalışmaz, burada view yazmamızın sebebi bu fonksiyonun bir görünüm (bizim örneğimizde buton) tarafından çağrıldığını & kullanıldığını belirtmek.

Bu yazdığımız kod sayesinde butona tıklandığında olacak bütün işlemleri buradan belirtebiliyoruz.

Aşağıdaki kodları tiklandi'nın içine yazalım:

Kod:
var adsoyad = String()
var yas = String()
        
adsoyad = adsoyadtext.text.toString()
yas = yastext.text.toString()
adsoyad.text = Buradaki text'in kendisine erişir, adsoyad.text.toString() ise o Text'i String' çevirir, bu yüzden böyle bir tanımlama yaptık
Burada adsoyad ve yas isimli iki değişken oluşturduk ve daha sonra kullanıcı tarafından girilen değerleri eşitledik.

adsoyad ve yas değelerini kolaylık olması açısından String olarak aldım.

Değerlerimizi aldık şimdi sıra diğer aktiviteyi oluşturmakta.



Bu şekilde yeni bir aktivite oluşturuyoruz. Açılan ekranda direkt olarak finish diyebiliriz. Böylece MainActivity2 isimli bir aktivitemiz ve onun tasarım dosyası oluştu onun içine de iki tane textview koydum ve id'lerini adsoyadgoster ve yasgoster yaptım.

Şimdi diğer aktiviteye geçelim bunun için bir Intent oluşturmamız gerekiyor ve daha sonra bu Intent'i başlatarak 2. aktiviteye geçeceğiz.

Intent Nedir?

Intent, Android'de bir Activity'den diğerine geçmek için kullanılan yapıdır. Sırasıyla önceki aktiviteyi kapatır ve diğerini başlatır. Intent ile verileri de aktarabiliriz. Şimdi MainActivity içinde bir Intent oluşturalım ve içine bazı değişkenler koyalım.

Kod:
val intent = Intent(this, MainActivity2::class.java)
intent.putExtra("adsoyad", adsoyad)
intent.putExtra("yas", yas)
startActivity(intent)
Bir Intent oluşturduk ve this'ten yani MainActivity'den (this MainActivity'e işaret ediyor) MainActivity2'ye geçeceğimiz söyledik
İki tane değişken koyduk adsoyad ve yas isimli bunlar Intent'le beraber gidiyorlar.
ve Intent'i başlattık. Bundan sonra ise MainActiviy2'deki kodlar çalışacak.

Peki yapmak istediğimiz ne? Değişkenleri alıp textview'larımızda göstermek.

MainActivity2 içinde değişkenlerimizi alalım:

Kod:
val adsoyad = intent.getStringExtra("adsoyad")
val yas = intent.getStringExtra("yas")
Bu kodlar ile değişkenlerimizi almayı başardık. Burada belki bir gariplik fark etmişsinizdir. bir intent oluşturmadan direkt olarak intent.getStringExtra diyebildik, bunun sebebi aktivitelere intent ile gelmemiz ve her aktivite oluşturulduğunda otomatik olarak bir Intent oluşması.
Burada intent.getStringExtra ile aktardığımız String'leri aldık başka bir değer atsaydık atıyorum boolean. O zaman getBoolExtra dememiz gerekecekti. getDegiskenAdiExtra bu işleme yarıyor.

Kod:
adsoyadgoster.text = adsoyad
yasgoster.text = yas
Bu kodlar ile de değişkenlerimizi aktivitemizde daha önceden oluşturduğumuz textview'larda gösterdik. Yani textview'daki textlerle bu değerlerimizi eşitledik. İşlemlerimiz bu kadar, çalıştırmadan önce yapmamız gereken son bir şey daha var. İki Aktivite de



Bu kısımdan ucunda mavi şeyler parıldayan çubuğa yani Infer Constraints'e dokunmamız gerek. Bu görüntümüzün kaymamasını sağlıyor.

Şimdi çalıştıralım ve deneyelim.



Değerlerimizi girelim ve butona basalım.



Gördüğünüz gibi değerlerimizi başarılı bir şekilde göstermeyi başardık.

Peki şimdi ne öğrendik?

- EditText'deki değerleri kullanıcıdan almayı
- Buton'a tıklayınca işlem yaptırmayı
- Başka Sayfalara Geçmeyi
- Geçiş Yaparken Veri Aktarmayı
- Aldığımız Verileri Kullanıcılara Göstermeyi


öğrendik.

Şuan sadece bu öğrendiklerimizle bile güzel uygulamalar çıkartabiliriz

Bilmemiz Gereken Bazı Şeyler

Android App Components yani Uygulama Bileşenleri

Uygulama Bileşenleri, uygulamanın yapı taşlarıdır. Her bir bileşen kullanıcıların uygulamayı kullanmasında kullanılır, her uygulamada temel 4 tür bileşen vardır. Bunlar;

Aktiviteler
Servisler
Broadcast Alıcıları
İçerik Sağlayıcıları


Aktiviteler;

Aktiviteler kullanıcıyla uygulamanın buluştuğu yerdir. Aktivite ekranda kullanıcı arayüzü gösterir. Örneğin, bir e-posta uygulaması, yeni e-postaların listesinin gösterildiği bir aktiviteye sahip olabilir, başka bir aktivite ise e-posta yazmak için, başka bir tanesi okumak için vesaire vesaire. Buna ayrılığa karşın aktiviteler, birbirleriyle iyi bir kullanıcı deneyimi oluşturmak için bağlıdırlar. Örneğin, bir kamera uygulaması, kullanıcının bir resmi paylaşmasına izin vermek için yeni posta oluşturan e-posta uygulamasında aktivite başlatabilir.
Aktivitelerin kendilerine ait yaşam döngüleri vardır.



Gördüğünüz resim Android'in kendi sayfasından alınmıştır. Yaşam döngüsünü açıklayacak olursak

onCreate() = Aktivite ilk oluşturulduğunda çağrılır.
onStart() = Aktivite oluşturulduktan sonra başladığında çağrılır.
onResume() = Devam ettirildiğinde çağrılır, ilk açıldığında da çağrılır.

Bunlar olduktan sonra aktivite çalışıyor demektir.

onPause() = Başka bir uygulama ekrana geldiğinde veya uygulama aşağı alındığında çağrılır. Daha yüksek öncelikli uygulamalar belleğe ihtiyaç duyduğu zaman ve başka bir aktiviteye geri tuşuyla gidildiğinde eski aktivitede çağrılır
onStop() = Aktivite artık görünür değildir. Kullanıcı uygulamayı yan veya düz çevirdiğinde de çağrılır.
onDestroy() = Aktivite tamamen biter ve sistem tarafından yok edilir.

Destroy çağrıldıktan sonra aktivite tamamen kapanır.

Bunların hepsini uygulamamızda çağırabiliriz.

Kod:
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onStart() {
        super.onStart()
    }

    override fun onResume() {
        super.onResume()
    }

    override fun onPause() {
        super.onPause()
    }

    override fun onStop() {
        super.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
    }
Bu şekilde her bir işlemde ne olacağını belirtebiliriz.

Servisler;

Servis uygulamanın arka planında herhangi bir sebepten ötürü çalışan genel amaçlı bileşene denir. Servisler, uzun süreli işlemler için arka planda çalışan bileşendir. Bir serviste kullanıcı arayüzü olmaz. Örnek verecek olursak; bir servis, kullanıcı başka bir uygulamadayken arkaplanda bir müzik çalıyor olabilir ya da kullanıcının telefonla etkileşimini bloklamadan internetten veri indiriyor olabilir.

Broadcast alıcıları;

Broadcast alıcıları, sistemin cihazda olan biteni kullanıcı akışını bloklamadan göndermesini sağlayan ve uygulamanın bu sistem duyurularına yanıt vermesini sağlayan bileşendir. Broadcast alıcıları, uygulamaya yönelik tanımlanmış olduğundan sistem, anlık olarak çalışmayan uygulamalara bile broadcast gönderebilir. Dolayısıyla, bir uygulama kullanıcıya yaklaşan bir olay hakkında bilgi vermek için bildirim göndermek üzere broadcast sağlayabilir.

İçerik Sağlayıcıları;

Bir içerik sağlayıcısı, dahili hafızada, bir veritabanında, web'de veya uygulamanın erişebileceği herhangi bir kalıcı hafızada depolayabileceğiniz her türlü veriyi bütün cihazla paylaşan bir uygulama verileri kümesini yönetir. İçerik sağlayıcısı aracılığıyla, diğer uygulamalar, içerik sağlayıcı izin verirse verileri alabilir veya değiştirebilirsiniz. Örneğin, Android sistemi, kullanıcının iletişim bilgilerini yöneten bir içerik sağlayıcısı sağlar. Böylece, uygun izinlere sahip herhangi bir uygulama, belirli bir kişi hakkında bilgi okumak ve yazmak için ContactsContract.Data gibi içerik sağlayıcısını kullanabilir.

AndroidManifest.xml Nedir?

AndroidManifest, Android derleme araçları, Android işletim sistemi ve Google Play için uygulamanızla ilgili temel bilgileri tanımlar. Her uygulama projesinin root dizininde bir AndroidManifest.xml(tam olarak bu isim) olmalıdır.

Her Android Manifest dosyasının sahip olması gerekenler;

Tüm aktiviteler, hizmetleri, broadcast alıcılarını ve içerik sağlayıcıları içeren uygulamanın bileşenleri. Her bileşen, Kotlin veya Java sınıfının adı gibi temel özellikleri ile tanımlanmalıdır. Ayrıca, hangi cihaz ayarlarını kullanabileceği ve bileşenin nasıl başlatılabileceğini açıklayan Intent Filters'a sahip olmalıdır.

Sistemin saklanan kısımlarına veya diğer uygulamalar erişmek için uygulamanın ihtiyaç duyduğu izinler. Ayrıca bu uygulamadaki içeriğe erişmek istiyorsa, diğer uygulamanın sahip olması gereken bütün izinleri bildirmek zorundadır.

Google Play'den hangi cihazların yükleyebileceğini etkileyen uygulamanın gerektirdiği donanım ve yazılım özelliklerini belirtmek zorundadır.

Uygulamanın paket adı (package name)'i belirtilmelidir.

Umarım bu içerik yararlı olmuştur, işinize yaradıysa, okumaktan keyif aldıysanız veya hoşunuza gittiyse teşekkür etmeyi unutmayın. Sağlıcakla kalın
--------------------- null zero
Konu Ego1st tarafından (bir Hafta önce Saat 09:29 ) değiştirilmiştir. Sebep: Başlık
MendeburMarul - ait Kullanıcı Resmi (Avatar)
Hesap Askıya Alındı
Üyelik tarihi:
06/2020
Nereden:
Andromeda
Yaş:
21
Mesajlar:
677
Konular:
41
Teşekkür (Etti):
30
Teşekkür (Aldı):
115
Ticaret:
(0) %
2 Hafta önce
#2
Sadece java ile yapilabilir diye birsey yok. Su anda en havali olani GoLang ile yapmak.
"aqua - ait Kullanıcı Resmi (Avatar)
Hunter
Üyelik tarihi:
08/2019
Nereden:
867619
Mesajlar:
666
Konular:
97
Teşekkür (Etti):
1514
Teşekkür (Aldı):
496
Ticaret:
(0) %
2 Hafta önce
#3
Eline sağlık. Konu cidden olmuş
AquieLL - ait Kullanıcı Resmi (Avatar)
Kıdemli Üye
Üyelik tarihi:
07/2014
Nereden:
aquu.php
Mesajlar:
4.017
Konular:
629
Teşekkür (Etti):
816
Teşekkür (Aldı):
2314
Ticaret:
(0) %
2 Hafta önce
#4
Başarılı bir konu.Tebrikler..
---------------------

WWW.TÜRKHACKTEAM.ORG/TV
- AquieLL -
Siber Güvenlik


Profesör - ait Kullanıcı Resmi (Avatar)
Uzman Üye
Üyelik tarihi:
04/2020
Nereden:
-Türkistan-
Mesajlar:
1.715
Konular:
181
Teşekkür (Etti):
555
Teşekkür (Aldı):
582
Ticaret:
(0) %
2 Hafta önce
#5
Eline sağlık gayet güzel bir konu olmuş
---------------------



SELAM SANA
EY YILLARI HEBA OLAN GENÇ!



BH80
Reiɴα
Rey


Rumexus - ait Kullanıcı Resmi (Avatar)
Stajyer Moderatör
Üyelik tarihi:
01/2016
Nereden:
7
Mesajlar:
1.656
Konular:
39
Teşekkür (Etti):
961
Teşekkür (Aldı):
385
Ticaret:
(0) %
2 Hafta önce
#6
Elinize sağlık, bu alanda merakı olanlar için çok güzel bir başlangıç konusu olmuş.
maj344 - ait Kullanıcı Resmi (Avatar)
Katılımcı Üye
Üyelik tarihi:
02/2019
Mesajlar:
261
Konular:
27
Teşekkür (Etti):
994
Teşekkür (Aldı):
73
Ticaret:
(0) %
2 Hafta önce
#7
Alıntı:
MendeburMarul´isimli üyeden Alıntı Mesajı göster
Sadece java ile yapilabilir diye birsey yok. Su anda en havali olani GoLang ile yapmak.
Doğru aslında ama hocamız da öyle bir şey dememiş zaten. Ben mesela Emacs Lisp ve Japt ile yazıyorum (Nasıl yazdığımı sormayın).
---------------------
Kod:
(signature
 (type 'formatted-text)
 (text "Sahici bir sarsıntı, sahte bir dengeden iyidir."))
Cold-Shadow - ait Kullanıcı Resmi (Avatar)
Anka Red Team
Üyelik tarihi:
02/2015
Yaş:
23
Mesajlar:
3.406
Konular:
180
Teşekkür (Etti):
841
Teşekkür (Aldı):
1811
Ticaret:
(0) %
2 Hafta önce
#8
Ellerine sağlık, Android zordur ama becebilirseniz para kazanırsınız. Böyle kaynakları değerlendirin
"aqua Teşekkür etti.
Ego1st - ait Kullanıcı Resmi (Avatar)
Stajyer Yazılımcı
Üyelik tarihi:
03/2018
Mesajlar:
929
Konular:
88
Teşekkür (Etti):
183
Teşekkür (Aldı):
320
Ticaret:
(0) %
2 Hafta önce
#9
Alıntı:
maj344´isimli üyeden Alıntı Mesajı göster
Doğru aslında ama hocamız da öyle bir şey dememiş zaten. Ben mesela Emacs Lisp ve Japt ile yazıyorum (Nasıl yazdığımı sormayın).
Alıntı:
Rumexus´isimli üyeden Alıntı Mesajı göster
Elinize sağlık, bu alanda merakı olanlar için çok güzel bir başlangıç konusu olmuş.
Alıntı:
Profesör´isimli üyeden Alıntı Mesajı göster
Eline sağlık gayet güzel bir konu olmuş
Alıntı:
AquieLL´isimli üyeden Alıntı Mesajı göster
Başarılı bir konu.Tebrikler..
Alıntı:
"aqua´isimli üyeden Alıntı Mesajı göster
Eline sağlık. Konu cidden olmuş
Teşekkürler herkese

Alıntı:
MendeburMarul´isimli üyeden Alıntı Mesajı göster
Sadece java ile yapilabilir diye birsey yok. Su anda en havali olani GoLang ile yapmak.
Merhaba, sadece Java ile yapılır gibi bir şey söylemedim. Keza kullandığım dil de Kotlin.
--------------------- null zero
Ghost Killer - ait Kullanıcı Resmi (Avatar)
Hesap Askıya Alındı
Üyelik tarihi:
01/2019
Nereden:
J İ T E M
Mesajlar:
2.097
Konular:
99
Teşekkür (Etti):
86
Teşekkür (Aldı):
523
Ticaret:
(0) %
2 Hafta önce
#10
eline sağlık bilmeyenler için çok faydalı bir konu olmuş.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler