Hata türü 3 Hata: {} etkinlik sınıfı mevcut değil


397

Android Studio 0.4.0'a başarıyla aktardığım bir IntelliJ Android projem var. Manifestteki hiçbir şeyi değiştirmezsem mükemmel çalışır. Ancak, başlatıcı etkinliğini değiştirmek ve çalıştırmak istediğinizde, bu hatayla başarısız olur:

Launching application: com.trackingeng/LandingActivity.
DEVICE SHELL COMMAND: am start -D -n "com.trackingeng/LandingActivity"  
    -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN  
    cat=[android.intent.category.LAUNCHER] cmp=com.trackingeng/LandingActivity }
Error type 3
Error: Activity class {com.trackingeng/LandingActivity} does not exist.

Project'i Gradle dosyalarıyla eşitle'yi tıklattığımda çıktı verir:

Project Sync
The project 'TrackingEng' is not a Gradle-based project

Çalıştırma ayarları: resim açıklamasını buraya girin


Orijinal AndroidManifest.xml dosyanızın nerede ?
twlkyao

Aynı yerde, projedeki ana klasörün altında.
Jacob

Demek istediğim, yazıdaki bu resim orijinaliniz AndroidManifest.xmlya da değil.
twlkyao

7
Bir iplik buldum, umut yardımcı olabilir. stackoverflow.com/questions/19670607/…
twlkyao

4
OP davasında etkili olmasa da, Error: Activity class {...} does not exist.benim için daha yüksek bir senkronizasyon yapmak çözüldü .
dinozor

Yanıtlar:


612

Yeniden düzenleme sonrasında da benzer bir sorunla karşılaştım.
Bu sorunu çözmek için yaptım:

  1. Projeyi Temizle
  2. silinen Builddizin
  3. Yeniden başlatılan Android Studio
  4. Projeyi Yeniden İnşa Et
  5. Çalıştırmak
  6. İsteğe bağlı olarak (Android'deki dosyalar menüsüne gidin, "Önbellekleri Geçersiz Kıl / Yeniden Başlat ..." seçeneğini tıklayın, telefonunuzdaki uygulamayı kaldırın ve tekrar deneyin)

Ve her şey yolunda gitti!
Bence anahtar IDE'nizi yeniden başlatmak .

Umarım bu size veya başka birine yardımcı olur!

Düzenleme 1:
Yukarıdaki adımlar sizin için işe yaramazsa, Gradle önbelleğini silmek @Yasitha tarafından işaret edildiği gibi bir çözüm gibi görünüyor.

Düzenle 2
Aşağıdaki yorumlarda birkaç kullanıcı tarafından önerildiği gibi, bazen uygulama tamamen cihazınızdan kaldırılıp yeniden yüklenerek sorun çözülebilir. Uygulamayı cihazdan tamamen kaldırmak için terminali
yazmanız yeterlidir adb uninstall <package>.

Düzenle 3 Abhishek'in Yanıtında
belirtildiği gibi , cihazınızda birden fazla kullanıcı ayarlanmışsa uygulamayı cihazınızdan silmeyi de denemelisiniz. Sadece
Mobile Settings > Apps > [Your App] > More > Uninstall App for All Users

Android Studio 2.1 ve sonraki sürümler için GÜNCELLEME

Android Studio 2.1 ve sonraki sürümlerini çalıştırırken, tercihlerinizde anında çalıştırma seçeneği etkinleştirildiğinde (varsayılan olarak etkindir) bu sorunla da karşılaşabilirsiniz.

Bu seçeneği devre dışı bırakmak Preferencesiçin Android Studioüst menüdeki seçeneğe gidin ve Instant Runo ekrandaki ilk onay kutusunun işaretini kaldırabilmeniz için arayın .

Android Studio 2.1 ve sonraki sürümlerinde Anında Çalıştırmayı devre dışı bırakma

Her neyse, bunu benim için düzeltti. Başlangıçta @yusufonder kullanıcısı tarafından işaret edildi. Gradle install hala çalıştığından bu sorunun olduğunu keşfettim.


2
Yapım dizinini silmeden bile iyi çalışır.
Shivam Bhalla

12
Burada açıklandığı gibi gradle önbellek silmek vardı stackoverflow.com/a/25602161/630833
jayeffkay

4
Bu geç bir giriş olsa da, ben sadece Android Studio 1.5'e güncelledikten sonra bu sorunla karşı karşıya ve yukarıdaki çözüm benim durumumda çalışmıyor.
zulkarnain shah

42
Uygulamayı cihazdan tamamen kaldırmak için terminalde 'adb uninstall <package>' i çalıştırmayı deneyin
Mikhail Sharin

3
Android 7.0'da uygulamayı cihazdan kaldırdığınızda (cihazın ana ekranındaki "Kaldır" etiketine sürükleyerek), uygulama aslında "devre dışıdır". Ayarlar / Uygulamalar'a gitmeli ve uygulamayı oradan manuel olarak kaldırmalısınız (alternatif olarak ADB komutunu kullanın). Birkaç kez zıplıyorum, ancak birkaç ağızdan sonra bu Android 7.0'ı sözde özelliği unutuyorum.
Mike Keskinov

325

Birisi için yardımcı olabilir: -

Bazen bir cihazda test ederken uygulama düzgün şekilde kaldırılmaz . Bunu doğrulamak ve düzeltmek için:

  1. Ayarlar'a gidin .
  2. Uygulamalar'a gidin .
  3. Uygulamanızı seçin. (burada uygulamanızın düzgün şekilde kaldırılmadığını doğrulayabilirsiniz) .
  4. Sağ üstteki taşma menüsünü açın ve tüm kullanıcılar için Kaldır'ı seçin .
  5. Bitti. Yüklemeyi deneyin ve ardından uygulamanızı yeniden başlatın.

12
Android O geliştirici önizleme 3'ü kullanarak, uygulamanın uygulamalar listesinde olmadığını söylediğinden, tüm kullanıcılar için Kaldır eylemini gerçekleştiremedim. Koşmak adb uninstall {packageName}sorunu çözdü.
alexbchr

1
Emülatör için Ankit'in cevabı işe yaramadı. Uygulamamı başlatıcıdan sildim, ancak sistemde kaldı ve bu da soruna neden oldu. Bu yöntemi tamamen kaldırmak için kullanmak zorunda kaldım.
Lanet Sebzeler

2
thnx adam ben uygulama tamamen kaldırılmayan android oreo bu sorunla karşı karşıya idi
Salman500

3
Bu tam olarak benim sorunumdu, uygulama bu kullanıcı için yüklenmedi. Sadece yukarıda belirtilen prosedürle kaldırıldı ve çalışmaya başladı
Bugs Happen

2
Uygulamam devre dışı bırakıldı
iamsujan

81

Uygulamayı cihaz üzerinden kaldırırken bu sorunla karşılaşırdım (örneğin, uygulamayı "Kaldır" seçeneğine sürükleyerek). Ancak kaldırmanın doğru yolu:

./gradlew uninstallAllKomutu kullanın . Bu Error: Activity class {HomeActivity} does not exist.hatayı önleyecektir .

Güncelleme:

Eğer tembel Eğer bu görev için kısaltma kullanabilirsiniz: ./gradlew uA.

Veya, ortak sınıf görevleri için takma adlar tanımlayın .bash_profile, böylece zaman kazanacak, yazacak ve her komutu hatırlamanıza veya yazım hataları konusunda endişelenmenize gerek kalmayacak. Bunu yapmanızı öneririm.


Kötü olduğu için hala daha iyi olduğunu düşünüyorum. Gradle iğrenç bir IMO'dur.
JJF

4
Android Studio 3.1 Canary 7 ile benim için çalışan tek şey bu.
NOTiFY

2
mükemmel cevap. Bazı cihazların yüklemeyle ilgili bir sorunu var gibi görünüyor. Benim için, AB Build ile Xiaomi Mi Mix 2. Cihazın Build sürümünde bir hata olduğunu düşünüyorum.
Opiatefuchs

1
Bu benim için çalışıyor. Çalıştırdıktan sonra ./gradlew kaldırmaTüm
Shanison

1
2020 başı itibariyle, benim için çalışan tek çözüm buydu.
PGMacDesign

73

Bu, aşağıdakileri yaptığınızda olur

  • cihazınızı / emülatörünüzü bağlayın
  • uygulamayı Android Studio'dan (AS) çalıştırın
  • uygulamayı bilgisayarınıza bağlıyken kullanın / test edin ve cihazdan kaldırın
  • uygulamayı AS'den tekrar çalıştırmayı deneyin

AS, uygulamanın hala cihazınızda olduğunu düşünüyor.

tl; dr - Bunu çözmek için, uygulamayı kaldırdıktan ve yeniden bağladıktan sonra cihazınızın bağlantısını kesmeniz yeterlidir.


11
Uygulama Başlatıcı'da görünmüyorsa kafanızın karışmasına izin vermese de, uygulama listelenmişse ayarları / Uygulamaları -> "Tümü" nü kontrol edin. Uygulamamda durum buydu ve kaldırdıktan sonra her şey tekrar işe yaradı.
Daniel Gilbert

1
@DanielGilbert'in dediği gibi Başlatıcı'da görünmüyorsa, "adb uninstall package.name" ile kolayca kaldırabilirsiniz. Bu benim için de işe yaradı.
Mike

Bu benim için de işe yaradı. İki versiyonu olan örnek bir proje yürütüyordum. İlk sürümü yükledim ve ikinci sürümü yüklemek için kaldırdım. Hatayı düzeltmek için çok zaman harcadım. Bu Android geliştirme bu tür garip, çözülemez sorunları ilk kez değil ...
Lanet Sebzeler

Benim olayım. Cihazın bağlantısını kesin ve bağlayın - bu benim için çalıştı! Uygulama cihazda değildi, ancak AS uygulamanın hala cihazımda olduğunu düşünerek yüklemedi
Victoria Klimova

35

Uygulama Başka bir kullanıcı için zaten yüklü. Lütfen tüm kullanıcı için aynı uygulamayı kaldırmayı deneyin. O zaman dene.

Veya adb komutunu çalıştırdıktan sonra deneyebilirsiniz.

adb uninstall PACKAGE_NAME

burada PACKAGE_NAME com.example.myapp gibi tam addır


Bu çalışıyor! benim durumumda adb uninstall com.demobenim uygulaması adı nerededemo
Muhammed Ovi

com.demo paket adınız olacak
Dipendra Sharma

3
Çalışan tek cevap! Android Studio 3.4.2, API Seviye 28
ykonda

Tek çözüm. Teşekkürler!
Juan Ignacio Barisich

cihazın komut ile bağlandığından emin olunadb devices
G. Ciardini

33

Aynı sorunu yaşadım ve bu şekilde düzelttim.

Git yükleyin> Gradle> Görevler> UninstallAll

resim açıklamasını buraya girin


1
Bu benim için çalışıyor. Teşekkür ederim.
Malwinder Singh

Bu benim için de geçerli. Ama sorun neden olur ve nasıl uninstallAllçözülür? Teşekkürler.
LiuWenbin_NO.

Benim için de çalıştı!
Fluffy T Rex

Bu doğru cevap olmalı! Optimal ve etkili
HatemTmi

27

Yeniden adlandırma / yeniden düzenleme sonra aynı hatayla karşılaştım. Yaptığım şey applicationIdbuild.gradle dosyasına özellik özniteliğini eklemek ve değerini uygulama paketine ayarlamaktı.

In build.gradle :

android {
defaultConfig {
    applicationId "com.example.myapp"  
  }
}

Buidl.gradle nasıl applicationId ekleneceğini açıklayınız!
realtebo

Alternatif olarak uygulamanın modül ayarlarına uygulama kimliği de ekleyebilirsiniz
Michael Kern

19

AndroidManifest.xmlDosyanızdaki Etkinliğin adını değiştirmeyi deneyin .

Şu anda diyor ki:

<activity android:name="LandingActivity" >

Etkinlik adının başına bir nokta eklemeyi deneyin :

<activity android:name=".LandingActivity" >

Veya paketin adını Etkinlik adının başına eklemek için :

<activity android:name="com.trackingeng.LandingActivity" >

Paket adınızın noktalarla ayrılmış yalnızca iki bileşeni olması da bir sorun olabilir (paket adınız "com.trackingeng"; daha standart bir paket adı "com.trackingeng.app" olacaktır)


2
@Siavash, Correct ™ hariç
dcow

2
Nasıl yani @dcow? Burada kabul edilen cevap benim için işe yaramadı, ama bu cevap verdi.
Siavash

Hangisi? nokta veya 3 seviyeli isim mi ekliyorsunuz?
realtebo

15

Aşağıdaki Adımları İzleyin Mobil ayar> Uygulamalar> Uygulamanız> Diğer> Tüm kullanıcılar için Kaldırma uygulamasını indirin.

Sebep: Telefonunuzda birden fazla kullanıcı olduğundan ve bu uygulamayı yalnızca bir tanesi için kaldırdığınızdan.

ZEVK ALMAK:


Seçilen cevabın bunu da eklemesi gerektiğini düşünüyorum. Benim için işe yarayan şey bu.
jasxir

13

Bu sorunun gerçekleşmesinin bir başka nedeni, cihazdaki tüm kullanıcılar için tamamen silinmemesidir.

Ayarlar -> Uygulamalar -> Uygulamalarınız -> Sağ üstteki 3 noktayı tıklayın -> Tüm kullanıcılar için kaldır

Benim için çalışıyor. Özellikle uygulamanın simgelerini değiştirir veya AndroidManifest.xml dosyasıyla uğraşırsınız.


1
Bunun işe yaradığına inanamıyorum. Cihazımda 2 hesap vardı ve diğer kullanıcı için yüklendi.
StarWind0

evet biraz sinir bozucu ama normalde uygulama geliştirme aşamasında olduğu için yükleme simgeleri ve şeyler vb değiştirmek isteyebilirsiniz çünkü
Long Dao

12

Benim için sorun, uygulamanın hala cihazda olduğunu AndroidStudio düşünüyordu .

Tamir etmek için:

  1. adbarka plan programını yeniden başlatın ; bir terminalde veya komut isteminde şunu girin:

    adb kill-server
    adb start-server
  2. uygulamanızı başlatmayı deneyin.

  3. eğer hala çalışmıyorsa, bu cevaba göz atın .

Emin olun platform-toolsbir Android SDK sizin eklenir sistem yolu değişkenler !


11

Benim durumumda, sorun başladıktan sonra uygulamayı telefondan kaldırdım, ancak aşağıdaki komut benim için çalıştı.

Terminal / cmd'de aşağıdaki komutu yürütün

adb uninstall <package_name>

package_name com.example.applicationname gibi bir şey Sonra uygulamayı yeniden yüklemeyi deneyin. İşe yaramalı.


1
Daha önce adb aracılığıyla apk'yi kurduğumdan beri bu benim için çalıştı, ancak bir şekilde telefonun uygulama yöneticisi aracılığıyla kaldırılması bazı uygulama izleri bıraktı.
dekaru

9

benim için, uygulamayı kaldırdığımda android 6'da aslında cihazdan kaldırılmak yerine devre dışı bırakıldı.

Ayarlar> Uygulamalar> uygulamanızı tıklayın ve yüklemesini kaldırın

bu benim için düzeltti


Bu işe yarıyor, ama biraz daha puan. Adb ile silerseniz, sorunun çözüldüğünü garanti etmez, bu paketi adb pm aracılığıyla görmüyorsanız olay. Bunu elinizle yapmanız, Ayarlar-> Uygulama'da bulmanız ve tüm kullanıcılar için Sil'i seçmeniz gerekir. Bundan sonra tekrar yükleyebilirsiniz
Silwester

9

Aşağıdaki komut benim için çalıştı. Bazen uygulamanın kısmi olarak kaldırılması da buna neden olur.

Terminal / cmd'de aşağıdaki komutu yürütün

adb uninstall <package_name>

Ardından, uygulamayı yeniden yüklemeyi deneyin. İşe yaramalı.


7

Cihazda birden fazla Profil varsa, uygulamanızın diğer Profillerden birinde zaten mevcut olabileceği konusunda uyarıda bulunun.

Uygulamanın tüm Profillerden kaldırılması sorunu çözdü benim için.


6

Benim için çok özel bir sorundu, uygulamamı test etmek ve uygulama verilerimi sıfırlamak için bir Lg g5'im var Telefonda kaldırdım, ancak telefonun uygulamaları kaldırmamak için "güzel" bir özelliği var Hemen bir gün içinde yeniden yükleyebilirsiniz. Uygulamayı telefondan kaldırdıktan sonra uygulama yüklendi, ancak kullanılamaz ( devre dışı ) çalıştı.


Benim için çalıştı. LG G6 aynı "özelliğe" sahip - Devre dışı bırakmanın yolunu bulamadım.
11'de Çığlık

6

Benim durumumda, başlatmaya çalıştığım uygulamanın cihazdaki farklı bir kullanıcı için yüklenmiş olmasıydı. Ayarlar -> Uygulamalar (Tüm uygulamalar) bölümüne gidin ve uygulamayı seçin. Taşma menüsünü tıklayın ve "Tüm kullanıcılar için kaldır" ı seçin. Bu sorunu çözmelidir.


Bu da e'ye oldu ve Ayarlar> Uygulamalar ve Bildirimler> Uygulama bilgileri'ne gitmek zorunda kaldım. "Tüm kullanıcılar için Kaldır" ve tekrar yüklemek zorunda kaldı.
luckylukein

Aynı sorunla karşılaştım ve muhtemelen cevap da bu çözümle güncellenmelidir
Panduka DeSilva

Projemde birden çok derleme türü yapılandırdığımda bu hata oluştu.
Rahul Rastogi

6

Aynı sorunla karşılaşan Android Studio 3.2 Beta 5 kullanıyorum

Adresine git

File -> Invalidate Caches / Restart...

Benim için sorun çözüldü


6

Bu sorunu aldığımda her zaman bu çözümü deniyorum ve işe yarıyor.

Instant Run disable 

Build -> Clean Project

File -> Invalidate Caches / Restart

Ama bu kez bir istisna buldum. Bu çözüm benim için işe yaramıyor. Sonra sorunun Emulator nakit olduğunu öğrendim. Sadece yapıyorum Wipe datave Cold boot nowsorun çözüldü.

resim açıklamasını buraya girin


5

Herkesin benim sorunumla karşılaşması ve diğer çözümlerle şansı olmaması durumunda ... Amazon başlatıcı entegrasyonunda hata ayıklarken FireTV için adb aracılığıyla bir etkinlik başlatmaya çalışıyordum. Ancak, projemde 60 farklı derleme varyantı vardı (çoklu platform, çoklu uygulama projesi) ve ApplicationId, çalışma zamanı paketi (ve sınıfyolları) applicationId'den farklı olduğu için herhangi bir sınıfyoluyla eşleşmedi.

Koşmaya çalışıyordum adb shell am start -n com.myappid.example.packageone.packagetwo/com.myappid.example.packageone.packagetwo.MySplashActivity

(Tabii ki birçok kombinasyon denedim com.runtimepath.example build.gradle ve çalışma zamanında başka bir applicationId ekledi zorluk beri )

Sonunda neye yardımcı oldu bu yazı https://stackoverflow.com/a/36255727/5970652

Hangi farklı bir format ortaya! com.myappid.example/com.runtimepath.example.packageone.packagetwo.MySplashActivity

Farklı bir çalışma zamanı sınıfyolunuz varsa, eğik çizgi ve daha sonra çalışma zamanı sınıfyolundan önce build.gradle applicationId ile belirtmeyi deneyin.

Bu değerleri logcat'te oturum açmak istiyorsanız sırasıyla BuildConfig.APPLICATION_IDve this.getLocalClassName()sırasıyla alabilirsiniz .


1
Bu benim sorunumdu! Bir süre hayal kırıklığına uğradım, ancak bir kez uygulama paketinin adını eğik çizgiden önce ve eğik çizgiden sonra tam nitelikli paket / sınıf adını koydum.
Chad Schultz

4

Ben bile aynı sorunu yaşadım ama yukarıdaki çözümlerin hiçbiri benim için işe yaramadı. Sorun şu ki, yukarıdaki hatayı aldım çünkü Titanyum Yedekleme üzerinden çalıştırmaya çalışıyorum belirli bir uygulama dondu. Eclipse ve Android Studio'da denedim.

Aydınlanmadan sonra sadece uygulamayı unistalled ve sonra tekrar koştu.

Sorun çözüldü :-)


4

Benim durumumda yardımcı olan numarayı paylaşmak istiyorum. Uygulamayı cihazdan kaldırdım ve temiz / yeniden oluşturma / Android Studio yeniden başlatma işlemlerinin hiçbir şey yardımcı olmadı.

Android Studio, uygulamanın hala cihazda yüklü olduğunu düşündüğünden ve dağıtmadığından, ADB'yi kullanarak yüklemeyi zorlayabilirsiniz:

adb install -r <your_application_from.apk>

burada -rverileri koruyarak uygulamayı yeniden yükleyin.


Bu benim için işe yarayan tek şey teşekkür ederim!
Hugo

4

Bir Samsung Galaxy'm var. Yukarıdaki ayarlarda arama işe yaramadı çünkü Apps ayarlarımda hiç görünmedi.

Arama alanına uygulamanın adını yazarak uygulamayı telefonumda buldum. "Work" (Mobile @ Work kullanarak) profilinde olduğunu fark ettim ve kaldırdım. Profilin ayarlarını Ayarlar-> İş profili-> Uygulamalar'a giderek bulabilirsiniz.

Umarım bu, diğer cevapların çoğunun ayarlarda bulunabileceğini belirttiği şekilde bulamayabilecek birine yardımcı olur.


1
OMG teşekkürler dostum, günümü kurtardın. Fckn samsung ile aynı sorun
Peter

4

Android Studio 3.5.1 bu sorunla karşı karşıya kaldım Bu sorunu çözmek için bana bir gün sürdü, önbellek temizleme, yeniden başlatma ve paket adını yeniden adlandırma da dahil olmak üzere her şeyi denedim. Yani yukarıdakilerden herhangi biri işe yaramadıysa, bunu denemek.

Sıralamaya git> Görevler> Yükle> Kaldır

Bağlantı: Hata türü 3: Etkinlik Sınıfı {...} mevcut değil


4

Bazı kez uygulama cep telefonunuza Konuk kullanıcı yüklemek, Bu yüzden Konuk geçişi deneyin ve uygulamayı kaldırın.

Ayrıca, uygulama adb kaldırma paketini "Paket Adınız" kaldırmak için aşağıdaki komutu yürütmeye çalışın


3

Aynı problemle geçmişte bir yerde karşılaştım. Bu tür sorunlar aslında yeniden adlandırma, proje içinde dosyaları taşıma vb. Gibi bazı yeniden düzenleme yaptığımızda ortaya çıkar.

Derleme -> Projeyi Temizle

Projeyi temizlemek .class dosyalarını kaldırır ve projeyi yeniden derler . Temel olarak, bir projenin yeniden inşasını zorlar.

Bazen bu tür hatalar temizleme projesinde temizlenmez, ardından uygulamayı cihazdan kaldırmaya çalışır (emülatör veya fiziksel olanıdır) ve uygulamayı tekrar çalıştırır. Umarım bu size yardımcı olur, bana% 50 kez yardımcı olur.

Not: - Herhangi bir hatayla karşılaştığınızda sadece google'a gitmeyin, bu işe yaramazsa projeyi temizleyin.


3

Aynı sorunu yaşadım ve etkinlik başlatıcımı yeniden düzenleyerek çözdüm, sadece sınıf adını değiştirin ve işe yarıyor.


3

Benzer bir sorunla karşılaşıyorum, lütfen aşağıdaki adımları izleyin.
Sana yardım edecektir:

1- Projenizi
temizleyin 2- İnşa dizininizi silin
3- Android Studio'nuzu yeniden başlatın
4- Projeyi yeniden oluşturun
5- başarıyla çalışacaktır.

Teşekkürler


3

LG Stylus var ve test telefonumda uygulama kalıcı olarak kaldırılmıyor. Ayarlar -> Uygulamada, adnotation off ile kapalı hata ayıklama uygulamasını (AS tarafından yüklemeyi ve hata ayıklamayı deniyorum) buldum. Uygulamayı telefonumdan kaldırdığımda hata kayboldu.


Bu bana bir cevap gibi görünmüyor.
mpaskov

3

Benim durumumda bir sonraki neden vardı:

2 kullanıcı var: ben ve Misafir. ve uygulama her ikisine de yüklendi, ancak yalnızca ilk başta silindi.

Misafir ekranına geçip uygulamayı oradan sildiğimde, uygulama tamam.

Umarım bu birine yardımcı olur :)

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.