Maalesef Uygulamam durdu. Bunu Nasıl Çözebilirim?


785

Bir uygulama geliştiriyorum ve her çalıştırdığımda mesajı alıyorum:

Maalesef Uygulamam durdu.

Bunu çözmek için ne yapabilirim?


Bu soru hakkında - Yığın izleme nedir ve uygulama hatalarımda hata ayıklamak için bunu nasıl kullanabilirim? , başka ayrıntı olmadan uygulamalarının çöktüğünü belirten birçok soru vardır. Bu soru, acemi Android programcılarına sorunlarını nasıl kendileri çözmeye çalışacakları veya doğru soruları soracakları talimat vermeyi amaçlamaktadır.


22
Bununla ilgili iki soru gibi kapanan birçok soru gördüm. Bu, insanların sorularında alakalı veriler yayınlamasına yardımcı olmak için iyi bir referanstır. Ancak, buradaki herhangi bir kök sorununun kopyası değil, sadece kök sorununun kazılması için metodoloji. Ben sadece bu sorunun bağlantısını bir referans olarak sağlamak ve yinelenen kadar yakın değil daha iyi olacağını düşünüyorum.
laalto

33
Bence kapanma fonksiyonu bunun için mükemmel. Bu soruların çoğu temel hata ayıklama becerileri hakkında çok az bilgi göstermektedir. Onları beklemeye almak, cevapta belirtilen yöntemi kullanarak problemlerini netleştirme şansı verir. Daha da iyisi, sorunu kendileri çözebilirler. Bu tartışma meta.stackoverflow.com için daha uygun olabilir.
nhaarman

Bu soru çok belirsiz. Daha iyi bir soru '[myIDE]' ı nasıl hata ayıklayabilirim 'hatasını gösteren bir Android uygulamasında' Maalesef, Uygulamam durdu 'olacaktır
Chris Halcrow

7
@ChrisHalcrow Bu soru-cevap hiç hata ayıklama ile ilgili değildir. Android'de yeni başlayanlara uygulama çökmeleriyle nasıl başa çıkılacağı konusunda rehberlik etmekle ilgilidir.
nhaarman

stackoverflow.com/questions/26609734/… .. apk dönüştürmek multidex becoz hata etkinleştirmek
RejoylinLokeshwaran

Yanıtlar:


717

Bu yanıt, yığın izlemesini alma işlemini açıklar. Yığın iziniz zaten var mı? " Yığın izleme nedir ve uygulama hatalarımda hata ayıklamak için bunu nasıl kullanabilirim? " Bölümünde yığın izlemelerini okuyun.

Sorun

Yakalanmadığınız RuntimeExceptioniçin başvurunuz sonlandırıldı .
Bunlardan en yaygın olanı NullPointerException.

Nasıl çözeceksin?

Bir Android uygulaması her çöktüğünde (veya bu konudaki herhangi bir Java uygulamasının) Stack tracekonsola (bu durumda logcat) yazılır. Bu yığın izlemesi, sorununuzu çözmek için önemli bilgiler içerir.

Android Studio

Android Studio'da yığın izini bulma

Pencerenin alt çubuğunda Logcatdüğmesine tıklayın. Alternatif olarak alt+ tuşuna basabilirsiniz 6. DevicesPanelde öykünücünüzün veya aygıtınızın seçili olduğundan emin olun . Ardından, kırmızı renkle gösterilen yığın izini bulmaya çalışın. Logcat'e giriş yapmış birçok şey olabilir, bu yüzden biraz kaydırmanız gerekebilir. Yığın izini bulmanın kolay bir yolu (sağdaki geri dönüşüm kutusunu kullanarak) logcat'i temizlemek ve uygulamanın tekrar çökmesine izin vermektir.

Yığın izini buldum, şimdi ne olacak?

Yaşasın! Sorununuzu çözmenin yarısındasınız.
Yalnızca yığın izlemesini analiz ederek uygulamanızın tam olarak kilitlenmesini sağlayan şeyi bulmanız gerekir.

" Yığın izleme nedir ve uygulama hatalarımda hata ayıklamak için bunu nasıl kullanabilirim? " Bölümünde yığın izlemelerini okuyun.

Sorunumu hala çözemiyorum!

Kendinizi Exceptionve oluştuğu satırı bulduysanız ve yine de nasıl düzelteceğinizi anlayamıyorsanız, StackOverflow hakkında bir soru sormaktan çekinmeyin.

Mümkün olduğunca kısa ve öz olmaya çalışın: yığın izlemesini ve ilgili kodu (örneğin, atma çizgisine kadar birkaç satır) gönderin Exception.


33
Bu yazının eski olduğunu biliyorum: ancak IntelliJ IDEA kullanıyorsanız içeri Android > Devices|Logcatgirip yeni bir filtre ( i.imgur.com/145dtkx.png ) ekleyebilir ve by Log Messageburaya filtreleyebilirsiniz FATAL EXCEPTION( i.imgur.com/HpELhaU .png ) bu kutuda Exceptionsuygulamanız tarafından atılan her şeyi okuyabilirsiniz . Bununla logcat'i temizleyip kazayı tekrar yapmanız gerekmez. Android Studio'nun da bu seçeneği olduğunu düşünüyorum.
Marco Acierno

1
Eclipse içindeki logcat filtrelemesi, filtrenin uygulama adı alanına java paket adı yazarak yapılabilir.
Stephane

Bence asıl mesele istisna olduğunda kişinin aldığı izini anlamaktır. Geri izleme yok veya kullanılabilir bir değil, FC kıllı biraz nerede kötü olur. ancak bu açıklamanın bu tür hataları bulma / tanımlamada iyi bir ilk giriş olduğunu düşünüyorum.
DooMMasteR

4
Logcat'inizde bir hata izi varsa işler kolaydır, ancak logcat'in hiçbir şeyi yoksa? stackoverflow.com/questions/32455645/…
Marian Paździoch

4
Sorun, satırda yığın izlemesi tarafından yazılan ve gösterilen hatayı içermemesi.
Hilal

115

Sen kullanabilirsiniz Google'ın ADB aracını almak için Logcat filekonuyu analiz etmek.

adb logcat > logcat.txt

logcat.txtdosyayı açın ve uygulama adınızı arayın. Neden başarısız olduğu, satır numarası, Sınıf adı vb. Hakkında bilgi olmalıdır.


Bu harika, hata ayıklayıcının yakalamamasına rağmen cihazda olan her şeyi hızlı bir şekilde gösterecektir, bu da çalışma zamanı yüklenemediğinde Xamarin için olabilir.
jvenema

1
Uygulamamın neden android studio logcat'te çöktüğünü göremedim, hiç hata olmadı. Bu cevap bana ihtiyacım olanı verdi. Ancak daha sonra stüdyo logcat'te hatayı görmemi engelleyen bir filtre olduğunu fark ettim. "Yalnızca seçili uygulamayı göster" e geri döndüm ve tekrar çalışmaya başladım.
Yannick

eklemelisiniz -d, aksi takdirde logcat'ten çıkmak için ctrl-C'ye geçersiniz. Yaparımadb logcat -v time -d > filename.txt
Karakuri

37

İlk olarak, uygulamanızın hangi noktanın çöktüğünü kontrol edersiniz ( Unfortunately, MyApp has stopped.). Bunun için kullanabilirsiniz Log.e("TAG", "Message");, bu satırı kullanarak uygulama logcat oturum açma görebilirsiniz.

Bundan sonra, uygulamanızın hangi noktada durduğunu bulursunuz, sizin tarafınızdan çözülmesi çok kolaydır.


28

Log cat'daki hatayı kontrol edin.

Tutulması içinde log cat seçeneğini alıyorsunuz:

window-> görünümü göster-> diğerleri-> Android-> Logcat

Log cat hata içeriyor.

Aksi takdirde, hata ayıklama modunda bir uygulama çalıştırarak da hatayı kontrol edebilirsiniz. Önce bundan sonra kesme noktasını ayarlayın:

proje-> hata ayıkla-> Android uygulamasına sağ tıklayın


27

Not: Bu cevap Android Studio 2.2.2'yi kullanıyor

Not 2: Cihazınızın başarıyla bağlandığını düşünüyorum.


Uygulamanız çöktüğünde yaptığınız ilk şey, LogCat'a bakmaktır, Android Studio'nun altında menülerin listesini içeren bir araç çubuğu vardır:

görüntü

"Android Monitör" ü tıklayın (Yukarıdaki resimde altını çizdiğim. ^)

Şimdi, böyle bir şey alacaksınız:

görüntü

" Verbose" İle " " arasında değişiklik yapın ErrorArtık yalnızca size kaydedilen hataları gösterecek. Tüm bu hatalar için endişelenmeyin (eğer varsa).

görüntü

Tamam. Şimdi, uygulamanızı kilitlemek için ne yaptığınızı yapın. Uygulamanız kilitlendikten sonra logcat'inize gidin. Çok fazla şey içeren yeni bir kilitlenme günlüğü bulmalısınız at:x.x.x: ve Caused by: TrumpIsPresidentExceptionörneğin. Caused by:Logcat'inizdeki ifadeye gidin .

görüntü

Sonraki için o Caused By:oldu, İstisna olmalıdır. Benim durumumda, bir RuntimeExceptionve altında mavi bir bağlantı içeren bir satır olmalıdır :

görüntü

O takdirdeCaused by: bunun altında mavi bir metin yerde bir çizgi var ETMEZ, sonra başka bakmak Caused by:yapar.

Bu mavi bağlantıyı tıklayın . Sizi sorunun oluştuğu yere götürmelidir. Benim durumumda, bu satırdan kaynaklanıyordu:

throw new RuntimeException();

Şimdi neden çöktüğünü biliyorum. Çünkü istisnayı kendim atıyorum. Bu bariz bir hataydı .


Ancak, başka bir hatayla karşılaştığımı varsayalım:

java.lang.NullPointerException

Logcat'imi kontrol ettim, bana verdiği mavi bağlantıya tıkladım ve beni buraya götürdü:

mTextView.setText(myString);

Şimdi hata ayıklamak istiyorum. Göre bu StackOverflow soru , bir NullPointerException şey olduğunu söylüyor null.

Neyin boş olduğunu bulalım . İki olasılık var. Ya mTextViewboştur ya myStringda boştur. Öğrenmek için mTextView.setText(mString)satırdan önce şu iki satırı ekliyorum:

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

Şimdi, daha önce yaptığımız gibi (Verose'u Hata olarak değiştirdik), "Hata" yı "Hata Ayıklama" olarak değiştirmek istiyoruz. Hata ayıklayarak oturum açtığımızdan beri. İşte tüm Log yöntemleri:

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

Yani, kullandığımızdan beri Log.dDebug'u kontrol ediyoruz. Bu yüzden hata ayıklamak için değiştirdik.

Bildirimin Log.dilk parametresi vardır, bizim durumumuzda "AppDebug". Logcat'in sağ üst kısmındaki "Filtresiz" açılır menüsünü tıklayın. "Filtre Yapılandırmasını Düzenle" yi seçin, filtrenize bir ad verin ve "Günlük Etiketi" ne "Uygulama Hata Ayıklama" yazın. "Tamam" ı tıklayın. Şimdi, logcat'te iki satır görmelisiniz:

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

Artık mTextView'ın boş olduğunu biliyoruz.

Kodumu gözlemliyorum, şimdi bir şey fark ettim.

Ben var private TextView mTextViewbenim sınıfının en üstünde ilan etti. Ama ben onu tanımlamıyorum.

Temelde bunu onCreate () 'de yapmayı unuttum:

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

mTextViewUygulamamın ne olduğunu söylemeyi unuttuğum için BU NEDEN boş. Bu satırı ekledim, uygulamamı çalıştırıyorum ve şimdi uygulama çökmüyor.



1
Bu iyi bir bilgidir, ancak Yığın İzinin görüntülerini kullanmak kullanışlılığını azaltır - görüntüler aranamaz, kopyalanamaz ve yapıştırılamaz, ekran okuyucular tarafından alınamaz ve okunması daha zordur. (Bu arada, sadece bunu işaret ederek aşağı inmedim).
EJoshuaS - Monica'yı

1
@EJoshuaS Görüntü tho sağlamak için söylemedim.
Ab

19

Bu pop-up yalnızca kodunuzda uygulamanın yürütülmesini durduran önemli bir istisna aldığınızda gösterilir. Herhangi istisna olabilir NullPointerException, OutOfMemoryExceptionvs.

Kontrol etmenin en iyi yolu , Android Studio'da yığın izini okumak ve uygulamanın nedenini kontrol etmek için hızlı bir yol olan uygulamayı geliştiriyorsanız, Logcat'ten geçmektir .

Uygulamanız zaten yayındaysa, logcat'i kullanamazsınız . Böylece, bunun için Crashlyticsoluşan herhangi bir istisna hakkında hata raporları sağlamak için uygulayabilirsiniz .


17

LogcatMesajınızı kontrol edin ve Manifestdosyanızı görün. Activity,Kullanıcı iznini tanımlamak gibi eksik bir şey olmalı .


14

Bu araçlardan herhangi birini kullanabilirsiniz:

  1. adb logcat

  2. adb logcat> logs.txt (editörleri hataları açmak ve aramak için kullanabilirsiniz.)

  3. eclipse logcat (eclipse'de görünmüyorsa, Windows-> Görünümü Göster-> Diğerleri-> Android-> LogCat'e gidin)

  4. Android Hata Ayıklama Monitörü veya Android Cihaz Monitörü (komut monitörü yazın veya kullanıcı arayüzü üzerinden açın)

resim açıklamasını buraya girin

  1. Android Studio

Android Hata Ayıklama Monitörü kullanmanızı öneririm , iyi. Çünkü tutulma çok fazla günlük olduğunda ve adb logcat filtresi ile ve zor olduğunda asılı kalıyor.


12

Kontrol etmelisin Stack trace

Bu nasıl yapılır?

IDE'nizde LOGCAT pencerelerini kontrol edin

Logcat pencerelerini göremiyorsanız bu yola gidin ve açın

window->show view->others->Android->Logcat

Google-Api kullanıyorsanız bu yola gidin

adb logcat> logcat.txt


10

Aşağıdaki showToast () yönteminde, bunu deneyebilmeniz için bağlam veya uygulama bağlamı için başka bir parametre geçirmeniz gerekir.

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}

9

Bir Force Close ile karşılaştığınızda (uygulama çalışmayı durdurduğunda) temel bir Logcat analizini paylaşmama izin verin.

DOKÜMANLAR

Günlükleri toplamak / analiz etmek için Android'den temel araç logcat.

HERE , Android'in logcat ile ilgili sayfası

Android Studio kullanıyorsanız, bu LINK'i de kontrol edebilirsiniz .

Yakalama

Temel olarak, aşağıdaki komutu kullanarak manuel olarak logcat'i yakalayabilirsiniz (veya sadece AndroidStudio'da AndroidMonitor penceresini kontrol edin):

adb logcat

İstediğiniz iletiyi filtrelemenize ve görüntülemenize yardımcı olan komuta ekleyebileceğiniz birçok parametre var ... Bu kişisel ... İleti zaman damgasını almak için her zaman aşağıdaki komutu kullanıyorum:

adb logcat -v time

Çıktıyı bir dosyaya yönlendirebilir ve bir Metin Düzenleyicide analiz edebilirsiniz.

Analiz

Uygulamanız Çöküyorsa, şöyle bir şey elde edersiniz:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

Günlüğün bu kısmı size birçok bilgi gösterir:

  • Sorun olduğunda: 07-09 08:29:13.475

Sorunun ne zaman meydana geldiğini kontrol etmek önemlidir ... Bir günlükte birkaç hata bulabilirsiniz ... doğru mesajları kontrol ettiğinizden emin olmalısınız :)

  • Hangi uygulama kilitlendi: com.example.khan.abc

Bu şekilde, hangi uygulamanın çöktüğünü bilirsiniz (iletinizle ilgili günlükleri kontrol ettiğinizden emin olmak için)

  • Hangi HATA: java.lang.NullPointerException

NULL İşaretçi İstisna hatası

  • Hata hakkında ayrıntılı bilgi: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

onBackPressed()Bir FragmentActivitynesneden yöntemi çağırmayı denediniz . Ancak, o nesne nullbunu yaptığınız zamandı.

  • Yığın İzleme: Yığın İzleme size yöntem çağırma sırasını gösterir ... Bazen, hata çağıran yöntemde olur (çağrılan yöntemde değil).

    com.example.khan.abc.AudioFragment $ 1.onTıklayın (AudioFragment.java:125)

Dosyada com.example.khan.abc.AudioFragment.java, onClick()satırdaki yöntemde hata oluştu : 125(stacktrace, hatanın oluştuğu satırı gösterir)

Tarafından çağrıldı:

at android.view.View.performClick(View.java:4848)

Hangi tarafından çağrıldı:

at android.view.View$PerformClick.run(View.java:20262)

denilen:

at android.os.Handler.handleCallback(Handler.java:815)

vb....

genel bakış

Bu sadece bir özetti ... Tüm günlükler basit değil ... Sadece fikri paylaşmak ve giriş seviyesi bilgileri sağlamak ...

Umarım sana bir şekilde yardım edebilirim ...


8

LogCat'i kullanın ve uygulamanın çökmesine neden olan şeyi bulmaya çalışın.

Eğer kullanırsanız LogCat görmek için Android Studio ardından basın ALT + 6 ya

Eğer kullanırsanız Eclipse sonra Window -> Aç Perspektif -> Diğer - LogCat

LogCat'e gidin, açılır menüden hata seçin. Bu, hata ayıklamanıza yardımcı olacak tüm gerekli bilgileri içerir. Bu işe yaramazsa, LogCat'i sorunuza düzenleme olarak gönderin; biri size yardımcı olacaktır.


7

Herhangi bir nedenle uygulamanız iyi stacktrace olmadan çöküyorsa. İlk satırdan hata ayıklamayı deneyin ve kilitlenene kadar satır satır gidin. O zaman cevap alacaksınız, hangi çizgi size sorun çıkarıyor. Muhtemelen daha sonra catch bloğu ve baskı hatası çıkışını deneyebilirsiniz.


5

Bu hata iletisini, yığın izlemesi veya başka hata iletisi olmadan kendi başına da alabilirsiniz.

Bu durumda, Android bildiriminizin doğru yapılandırıldığından emin olmanız gerekir (kitaplıktan gerçekleşen herhangi bir bildirim birleştirmesi ve kitaplıktan gelebilecek herhangi bir etkinlik dahil) ve bildirim dosyalarınızda uygulamanızda görüntülenen ilk etkinliğe özellikle dikkat edin .


3
Bu fenomeni gösteren bir proje yükleyebilirseniz ilgilenirim.
CommonsWare

5

Geliştirme sırasında çökme

Benim favori aracı deneyin LogView günlükleri almak ve gelişme sırasında bunları analiz etmek. Linux'ta çalışırken ve yürütülebilir olarak
işaretlediğinizden emin olun ../logview./lib/logview.jar

Eğer beğenmediyseniz, Android için birçok alternatif masaüstü günlük görüntüleyici var .

Vahşi kazasında

Kullanıcıların cihazlarında gerçekleşen işlenmeyen istisnaların yığınlarını almak için Firebase Crashlytics gibi gerçek zamanlı bir çökme raporlama aracı entegre edin .

Oku (Tale Anlaşılır Ve Canlı) bir Buggy App bırakın Nasıl alandaki hataları işleme hakkında daha fazla bilgi.


4

İnsanlar hata yapar ve kodlar da yapar.

Herhangi bir errorşey olduğunda, her zaman kırmızı renkli metinle logcat ile kontrol edin, ancak u kırmızı renkli metinde altı çizili mavi renkli metindeki gerçek sorunu bulabilirsiniz .

U yeni oluştur emin olun activityher zaman, beyan activityiçinde AndroidManifestdosyanın.

İzin ekliyorsanız, bunu AndroidMainifestdosyada da bildirin.


4

Logcat - Android Studio'nun geliştirme aşamasında günlükleri kontrol etmek için

Başlangıçta Logcat'i temizleyin ve uygulamanın yalnızca kilitlenmiş günlük ayrıntılarını alabilmeniz için tekrar kilitlenmesine izin verin. Yığın izini kontrol etmelisiniz

Ne yazık ki, Uygulamam durdu. Bunun birçok nedeni var. Aynı şeyi günlüklerde de kontrol edebilirsiniz. Bunun için Log.e ("TAG", "Message") kullanabilirsiniz;

Uygulama kilitlenmesi sırasında sık karşılaşılan hata:

  1. Kodlama hatası (Anahtar kelimelerin yanlış kullanımı).
  2. Uyumsuzluk özellik adı.
  3. Desteklenmeyen eklenti (belki).
  4. Uyumsuz sürüm (belki).
  5. AndroidManifest dosyasında etkinlik eksik.
  6. AndroidManifest dosyasında izin eksik.
  7. En yaygın NullPointerException.
  8. Beyan edildi ancak tanımlanmadı.

Uygulama kilitlenme hatasını gidermek için:

  • Noktaların üstünde aklınızda bulundurun ve bunun üzerinden geçin.
  • Hata ile, dosya adını da mavi renkte alacaksınız (üzerlerine tıklayın ve hatadan koda atlayın).

3

İlk olarak, uygulamanızın nerede ve neden çöktüğünü kontrol etmeniz gerekir. (Unfortunately, MyApp has stopped.).Yardımı ile LOGneyin yanlış gittiğini anlayabilirsiniz.

Bundan sonra, uygulamanızın hangi noktayı durdurduğunu bulursunuz.


3

Terminalinizde herhangi bir ilginç günlük yoksa (veya doğrudan uygulamanızla ilgili değilse), sorununuz yerel bir kütüphaneden kaynaklanıyor olabilir. Bu durumda, terminalinizdeki "kaldırıldı olarak işaretleme" dosyalarını kontrol etmelisiniz.

Kaldırıldı olarak işaretleme dosyaları için varsayılan konum her aygıta bağlıdır, ancak durum buysa, aşağıdakileri anlatan bir günlük kaydınız olacaktır: Tombstone written to: /data/tombstones/tombstone_06

Daha fazla bilgi için https://source.android.com/devices/tech/debug adresini ziyaret edin .


0

Terminalde bu komutu çalıştırmak da sorunu bulmanıza yardımcı olabilir:

gradlew build > log.txt 2>details.txt

yukarıdaki günlük dosyalarını okumak için gradlew dosya konumuna gitmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.