Telif hakkı © 2010, Google Inc. Tüm hakları saklıdır.
compatibility@android.com
1. Giriş
Bu belgede, cep telefonlarının Android 2.1 ile uyumlu olması için karşılanması gereken şartlar listelenmiştir.
"Zorunlu", "Zorunlu değil", "Gerekli", "Olmalıdır", "Olmamalıdır", "Olması gerekir", "Olmaması gerekir", "Önerilen", "Olabilir" ve "İsteğe bağlı" ifadeleri RFC2119 [Kaynaklar, 1] belgesinde tanımlanan IETF standardına göre kullanılmalıdır.
Bu dokümanda "cihaz uygulayıcısı" veya "uygulayıcı", Android 2.1 çalıştıran bir donanım/yazılım çözümü geliştiren kişi veya kuruluştur. "Cihaz uygulaması" veya "uygulama", bu şekilde geliştirilen donanım/yazılım çözümüdür.
Android 2.1 ile uyumlu olarak kabul edilmek için cihaz uygulamalarının:
- Referansla dahil edilen tüm dokümanlar dahil olmak üzere bu Uyumluluk Tanımlama Belgesi'nde sunulan şartları karşılamalıdır.
- Cihazın yazılımı tamamlandığında mevcut olan Android Compatibility Test Suite (CTS) sürümünün en son sürümünü GEÇMELİDİR. (CTS, Android Açık Kaynak Projesi'nin [Kaynaklar, 2] bir parçası olarak kullanılabilir.) CTS, bu dokümanda belirtilen bileşenlerin tümünü olmasa da çoğunu test eder.
Bu tanım veya CTS'de açıklık yoksa, belirsizlik varsa ya da eksiklik varsa mevcut uygulamalarla uyumluluğu sağlamak cihaz uygulayıcının sorumluluğundadır. Bu nedenle Android Açık Kaynak Projesi [Kaynaklar, 3], Android'in hem referans hem de tercih edilen uygulamasıdır. Cihaz uygulayıcılarının, uygulamalarını Android Open Source Project'ten edinilebilen "yukarı yönlü" kaynak koduna dayandırmaları önemle tavsiye edilir. Bazı bileşenler teorik olarak alternatif uygulamalarla değiştirilebilir olsa da CTS testlerinden geçmek önemli ölçüde daha zor olacağından bu uygulamanın yapılması kesinlikle önerilmez. Uyumluluk Testi Paketi dahil olmak üzere standart Android uygulamasıyla davranışsal olarak tam uyumluluğu sağlamak uygulayıcının sorumluluğundadır. Son olarak, belirli bileşen değişimlerinin ve modifikasyonlarının bu dokümanda açıkça yasaklandığını unutmayın.
2. Kaynaklar
- IETF RFC2119 Şart Seviyeleri: http://www.ietf.org/rfc/rfc2119.txt
- Android Uyumluluk Programına Genel Bakış: http://source.android.com/compatibility/index.html
- Android Açık Kaynak Projesi: http://source.android.com/
- API tanımları ve dokümanları: http://developer.android.com/reference/packages.html
- Android izinleri referansı: http://developer.android.com/reference/android/Manifest.permission.html
- android.os.Build referansı: http://developer.android.com/reference/android/os/Build.html
- Android 2.1'de izin verilen sürüm dizeleri: http://source.android.com/docs/compatibility/2.1/versions.html
- android.webkit.WebView sınıfı: http://developer.android.com/reference/android/webkit/WebView.html
- HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
- Dalvik sanal makinesi spesifikasyonu: Android kaynak kodunda, dalvik/docs adresinde mevcuttur.
- Uygulama widget'ları: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
- Bildirimler: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
- Uygulama Kaynakları: http://code.google.com/android/reference/available-resources.html
- Durum çubuğu simgesi stil kılavuzu: http://developer.android.com/guide/practices/ui_guideline /icon_design.html#statusbarstructure
- Arama Yöneticisi: http://developer.android.com/reference/android/app/SearchManager.html
- Toast'lar: http://developer.android.com/reference/android/widget/Toast.html
- Canlı Duvar Kağıtları: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
- Android için Uygulamalar: http://code.google.com/p/apps-for-android
- Referans araç dokümanları (adb, aapt, ddms için): http://developer.android.com/guide/developing/tools/index.html
- Android apk dosyası açıklaması: http://developer.android.com/guide/topics/fundamentals.html
- Manifest dosyaları: http://developer.android.com/guide/topics/manifest/manifest-intro.html
- Maymun test aracı: https://developer.android.com/studio/test/other-testing-tools/monkey
- Birden fazla ekranı destekleme: http://developer.android.com/guide/practices/screens_support.html
- android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
- android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
- android.hardware.Camera: http://developer.android.com/reference/android/hardware/Camera.html
- Sensör koordinat alanı: http://developer.android.com/reference/android/hardware/SensorEvent.html
- Android Güvenlik ve İzinler referansı: http://developer.android.com/guide/topics/security/security.html
- Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html
Bu kaynakların çoğu doğrudan veya dolaylı olarak Android 2.1 SDK'sından türetilmiştir ve işlevsel olarak bu SDK'nın dokümanlarında yer alan bilgilerle aynıdır. Bu Uyumluluk Tanımlama Belgesi'nin veya Uyumluluk Testi Paketi'nin SDK dokümanlarıyla çeliştiği durumlarda SDK dokümanları yetkili kabul edilir. Yukarıda yer alan referanslarda sağlanan tüm teknik ayrıntılar, bu Uyumluluk Tanımı'nın bir parçası olarak kabul edilir.
3. Yazılım
Android platformu, yönetilen API'ler, yerel API'ler ve Intent sistemi ile web uygulaması API'leri gibi "yumuşak" API'lerden oluşur. Bu bölümde, uyumluluğun ayrılmaz parçası olan zorunlu ve isteğe bağlı API'lerin yanı sıra diğer bazı ilgili teknik ve kullanıcı arayüzü davranışları ayrıntılı olarak açıklanmaktadır. Cihaz uygulamaları bu bölümdeki tüm şartlara UYGUN OLMALIDIR.
3.1. Yönetilen API Uyumluluğu
Yönetilen (Dalvik tabanlı) yürütme ortamı, Android uygulamalarının birincil aracıdır. Android uygulama programlama arayüzü (API), yönetilen sanal makine ortamında çalışan uygulamalara sunulan Android platform arayüzleri grubudur. Cihaz uygulamalarında, Android 2.1 SDK'sı [Kaynaklar, 4] tarafından kullanıma sunulan tüm belgelenmiş API'lerin, belgelenmiş tüm davranışlar da dahil olmak üzere eksiksiz uygulamaları sağlanmalıdır.
Cihaz uygulamalarında, bu Uyumluluk Tanımı'nda özellikle izin verildiği durumlar hariç olmak üzere yönetilen API'ler atlanmamalı, API arayüzleri veya imzaları değiştirilmemeli, belirtilen davranıştan sapılmamalı ya da işlem yapmama işlemleri dahil edilmemelidir.
3.2. Soft API Uyumluluğu
Android, 3.1 Bölümü'ndeki yönetilen API'lere ek olarak, Android uygulamalarının derleme sırasında uygulanamayan Intent'ler, izinler ve benzer özellikleri gibi yalnızca çalışma zamanında önemli bir "yumuşak" API içerir. Bu bölümde, Android 2.1 ile uyumluluk için gereken "soft" API'ler ve sistem davranışları ayrıntılı olarak açıklanmıştır. Cihaz uygulamalarının bu bölümde sunulan tüm koşulları karşılaması GEREKİR.
3.2.1. İzinler
Cihaz uygulayıcıları, izin referans sayfasında [Kaynaklar, 5] belirtildiği gibi tüm izin sabitlerini desteklemeli ve uygulamalıdır. 10. Bölüm'de Android güvenlik modeliyle ilgili ek şartların listelendiğini unutmayın.
3.2.2. Derleme Parametreleri
Android API'leri, android.os.Build
sınıfında [Resources, 6] mevcut cihazı tanımlamak için tasarlanmış bir dizi sabit içerir. Cihaz uygulamalarında tutarlı ve anlamlı değerler sağlamak için aşağıdaki tabloda, cihaz uygulamalarının UYGUN OLMASI GEREKEN bu değerlerin biçimleriyle ilgili ek kısıtlamalar yer almaktadır.
Parametre | Yorumlar |
android.os.Build.VERSION.RELEASE | Şu anda çalışan Android sisteminin, kullanıcılar tarafından okunabilir biçimdeki sürümü. Bu alanda [Kaynaklar, 7] bölümünde tanımlanan dize değerlerinden biri bulunmalıdır. |
android.os.Build.VERSION.SDK | Şu anda çalışan Android sisteminin sürümü (üçüncü taraf uygulama kodunun erişebileceği bir biçimde). Android 2.1 için bu alanda 7 tam sayı değeri OLMALIDIR. |
android.os.Build.VERSION.INCREMENTAL | Cihaz uygulayıcısı tarafından seçilen ve o anda çalışan Android sisteminin belirli derlemesini kullanıcılar tarafından okunabilir biçimde belirten bir değer. Bu değer, son kullanıcılara gönderilen farklı derlemeler için yeniden KULLANILAMAZ. Bu alanın tipik bir kullanımı, derlemeyi oluşturmak için hangi derleme numarasının veya kaynak denetimi değişiklik tanımlayıcısının kullanıldığını belirtmektir. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş dize ("") veya null değer OLMAMASI gerekir. |
android.os.Build.BOARD | Cihaz uygulayıcısı tarafından seçilen ve cihaz tarafından kullanılan belirli dahili donanımı kullanıcı tarafından okunabilir biçimde tanımlayan bir değer. Bu alanın olası bir kullanımı, cihazı besleyen kartın belirli bir revizyonunu belirtmektir. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir. |
android.os.Build.BRAND | Cihazı üreten şirketin, kuruluşun, şahsın vb. adını kullanıcı tarafından okunabilir biçimde tanımlayan, cihaz uygulayıcısı tarafından seçilen bir değer. Bu alanın olası bir kullanımı, cihazı satan OEM'i ve/veya operatörü belirtmektir. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI ZORUNLUDUR. |
android.os.Build.DEVICE | Cihaz uygulayıcısı tarafından seçilen ve cihazın gövdesinin (bazen "endüstriyel tasarım" olarak da adlandırılır) belirli yapılandırmasını veya düzeltmesini tanımlayan bir değer. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI gerekir. |
android.os.Build.FINGERPRINT | Bu derlemeyi benzersiz şekilde tanımlayan bir dize. Makul ölçüde okunaklı OLMALIDIR. Şu şablonu İZLEMESİ GEREKİR:
$(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS) Örneğin: acme/mydevice/generic/generic:2.1-update1/ERC77/3359:userdebug/test-keys Parmak izi boşluk İÇERMEMELİDİR. Yukarıdaki şablona dahil edilen diğer alanlarda boşluk varsa bunlar parmak izinde ASCII alt çizgi ("_") karakteriyle DEĞİŞTİRİLMELİDİR. |
android.os.Build.HOST | Derlemenin oluşturulduğu ana makineyi benzersiz şekilde tanımlayan, kullanıcı tarafından okunabilir biçimde bir dize. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir. |
android.os.Build.ID | Cihaz uygulayıcısı tarafından, belirli bir sürümü belirtmek için kullanıcı tarafından okunabilir biçimde seçilen bir tanımlayıcı. Bu alan, android.os.Build.VERSION.INCREMENTAL ile aynı olabilir ancak son kullanıcıların yazılım derlemeleri arasında ayrım yapması için yeterince anlamlı bir değer OLMALIDIR. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI gerekir. |
android.os.Build.MODEL | Cihaz uygulayıcısı tarafından seçilen ve son kullanıcının bildiği cihaz adını içeren bir değer. Bu, cihazın pazarlandığı ve son kullanıcılara satıldığı adla aynı OLMALIDIR. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI ZORUNLUDUR. |
android.os.Build.PRODUCT | Cihaz uygulayıcısı tarafından seçilen ve cihazın geliştirme adını veya kod adını içeren bir değer. Kullanıcılar tarafından okunabilir OLMALIDIR ancak son kullanıcıların görüntülemesi için tasarlanmayabilir. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI ZORUNLUDUR. |
android.os.Build.TAGS | Cihaz uygulayıcısı tarafından seçilen ve derlemeyi daha da ayırt edici hale getiren, virgülle ayrılmış bir etiket listesi. Örneğin, "unsigned,debug". Bu alan null veya boş dize ("") OLMAMALIDIR ancak tek bir etiket ("release" gibi) kullanılabilir. |
android.os.Build.TIME | Derlemenin gerçekleştiği zamanın zaman damgasını temsil eden bir değer. |
android.os.Build.TYPE | Derlemenin çalışma zamanı yapılandırmasını belirten, cihaz uygulayıcısı tarafından seçilen bir değer. Bu alanda, üç tipik Android çalışma zamanı yapılandırmasına karşılık gelen değerlerden biri OLMALIDIR: "user", "userdebug" veya "eng". |
android.os.Build.USER | Derlemeyi oluşturan kullanıcının (veya otomatik kullanıcının) adı veya kullanıcı kimliği. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir. |
3.2.3. Intent Uyumluluğu
Android, uygulamalar arasında gevşek bağlı entegrasyon elde etmek için Intent'leri kullanır. Bu bölümde, cihaz uygulamalarının uyması GEREKEN Intent kalıplarıyla ilgili şartlar açıklanmaktadır. "Uygulanır" ifadesi, cihaz uygulayıcının eşleşen bir Intent filtresi belirten ve belirtilen her Intent kalıbı için doğru davranışı bağlayan ve uygulayan bir Android Etkinliği veya Hizmeti sağlaması GEREKTİĞİ anlamına gelir.
3.2.3.1. Temel Uygulama Amaçları
Android yayın öncesi projesi, telefon çevirici, takvim, kişi defteri, müzik çalar gibi çeşitli temel uygulamaları tanımlar. Cihaz uygulayıcıları bu uygulamaları alternatif sürümlerle DEĞİŞTİREBİLİR.
Ancak bu tür alternatif sürümler, yayın öncesi proje tarafından sağlanan aynı Intent kalıplarını UYGUNLAŞTIRMALIDIR. Örneğin, bir cihazda alternatif bir müzik çalar varsa şarkı seçmek için üçüncü taraf uygulamaları tarafından yayınlanan Intent kalıbını yine de dikkate almalıdır.
Aşağıdaki uygulamalar temel Android sistem uygulamaları olarak kabul edilir:
- Masa Saati
- Tarayıcı
- Takvim
- Hesap Makinesi
- Kamera
- Kişiler
- E-posta
- Galeri
- GlobalSearch
- Roketatar
- LivePicker (yani Animasyonlu Duvar Kağıdı seçici uygulaması; 3.8.5 numaralı bölüme göre cihaz Animasyonlu Duvar Kağıtlarını desteklemiyorsa atlanabilir.)
- Mesajlaşma ("MMS" olarak da bilinir)
- Müzik
- Telefon
- Ayarlar
- SoundRecorder
Temel Android sistem uygulamaları, "herkese açık" olarak kabul edilen çeşitli etkinlik veya hizmet bileşenleri içerir. Yani "android:exported" özelliği eksik olabilir veya "true" değerine sahip olabilir.
Temel Android sistem uygulamalarından birinde tanımlanan ve "false" değerine sahip bir android:exported özelliği aracılığıyla herkese açık olmayan olarak işaretlenmeyen her etkinlik veya hizmet için cihaz uygulamalarında, temel Android sistem uygulamasıyla aynı Intent filtresi kalıplarını uygulayan aynı türde bir bileşen BULUNMASI GEREKİR.
Diğer bir deyişle, cihaz uygulaması temel Android sistem uygulamalarını DEĞİŞTİREBİLİR. Ancak bu durumda, cihaz uygulaması, değiştirilen her temel Android sistem uygulaması tarafından tanımlanan tüm Intent kalıplarını DESTEKLEMELİDİR.
3.2.3.2. Intent Geçersiz Kılmaları
Android genişletilebilir bir platform olduğundan cihaz uygulayıcıları, temel sistem uygulamalarında tanımlanan her Intent kalıbının üçüncü taraf uygulamaları tarafından geçersiz kılınmasına İZİN VERMELİDİR. Yukarı yönlü Android açık kaynak projesi buna varsayılan olarak izin verir. Cihaz uygulayıcıları, sistem uygulamalarının bu Intent kalıplarını kullanmasına özel ayrıcalıklar eklememeli veya üçüncü taraf uygulamalarının bu kalıplara bağlanmasını ve bu kalıpların kontrolünü devralmasını engellememelidir. Bu yasak, özellikle kullanıcının aynı Intent kalıbını işleyen birden fazla uygulama arasında seçim yapmasına olanak tanıyan "Seçici" kullanıcı arayüzünün devre dışı bırakılmasını içerir ancak bunlarla sınırlı değildir.
3.2.3.3. Intent Ad Alanları
Cihaz uygulayıcıları, android.* ad alanındaki bir ACTION, CATEGORY veya başka bir anahtar dizesi kullanarak yeni Intent veya Broadcast Intent kalıplarını dikkate alan herhangi bir Android bileşeni İÇERMEMELİDİR. Cihaz uygulayıcıları, başka bir kuruluşa ait bir paket alanında ACTION, CATEGORY veya başka bir anahtar dizesi kullanarak yeni Intent veya Broadcast Intent kalıplarını destekleyen Android bileşenleri İÇERMEMELİDİR. Cihaz uygulayıcıları, 3.2.3.1 numaralı bölümde listelenen temel uygulamalar tarafından kullanılan Intent kalıplarından hiçbirini DEĞİŞTİRMELİ veya GENİŞLETMEMELİDİR.
Bu yasak, Bölüm 3.6'da Java dil sınıfları için belirtilene benzer.
3.2.3.4. Yayın Amaçları
Üçüncü taraf uygulamaları, donanım veya yazılım ortamındaki değişiklikler hakkında bilgilendirilmek için belirli Intent'leri yayınlamak üzere platformdan yararlanır. Android uyumlu cihazlar, uygun sistem etkinliklerine yanıt olarak herkese açık yayın Intent'lerini YAYINLAMALIDIR. Yayın intent'leri SDK dokümanlarında açıklanmaktadır.
3.3. Yerel API Uyumluluğu
Dalvik'te çalışan yönetilen kod, uygulama .apk dosyasında uygun cihaz donanım mimarisi için derlenmiş bir ELF .so dosyası olarak sağlanan yerel kodu çağırabilir. Cihaz uygulamalarında, standart Java Native Interface (JNI) semantiğini kullanarak yerel kodu çağırmak için yönetilen ortamda çalışan kod desteği ZORUNLUDUR. Aşağıdaki API'ler yerel kod tarafından KULLANILABİLİR OLMALIDIR:
- libc (C kitaplığı)
- libm (matematik kitaplığı)
- JNI arayüzü
- libz (Zlib sıkıştırması)
- liblog (Android günlük kaydı)
- C++ için minimum destek
- Aşağıda açıklandığı şekilde OpenGL desteği
Cihaz uygulamaları OpenGL ES 1.0'ı DESTEKLEMELİDİR. Donanım hızlandırması olmayan cihazlar, yazılım oluşturma aracı kullanarak OpenGL ES 1.0'u UYGULAMALIDIR. Cihaz uygulamalarında, cihaz donanımı desteklediği kadar OpenGL ES 1.1 uygulanmalıdır. Donanım bu API'lerde makul performans sağlayabiliyorsa cihaz uygulamaları OpenGL ES 2.0 için bir uygulama sağlamalıdır.
Bu kitaplıklar, Android Open Source projesi tarafından Bionic'te sağlanan sürümlerle kaynak uyumlu (ör. başlık uyumlu) ve ikili uyumlu (belirli bir işlemci mimarisi için) OLMALIDIR. Bionic uygulamaları, GNU C kitaplığı gibi diğer uygulamalarla tam uyumlu olmadığından cihaz uygulayıcıları Android uygulamasını KULLANMALIDIR. Cihaz uygulayıcıları bu kitaplıkların farklı bir uygulamasını kullanıyorsa başlık, ikili ve davranış uyumluluğunu sağlamalıdır.
Cihaz uygulamaları, cihaz tarafından desteklenen yerel uygulama ikili program arayüzünü (ABI) android.os.Build.CPU_ABI
API üzerinden doğru şekilde bildirmelidir. ABI, Android NDK'nın en son sürümünde docs/CPU-ARCH-ABIS.txt
dosyasında belirtilen girişlerden biri OLMALIDIR. Android NDK'nın ek sürümlerinde ek ABI'ler için destek sunulabileceğini unutmayın.
Yerel kod uyumluluğu zordur. Bu nedenle, cihaz uygulayıcılarının uyumluluğu sağlamak için yukarıda listelenen kitaplıkların yayın öncesi uygulamalarını kullanmalarının ÇOK önemle tavsiye edildiği tekrar vurgulanmalıdır.
3.4. Web API Uyumluluğu
Birçok geliştirici ve uygulama, kullanıcı arayüzleri için android.webkit.WebView
sınıfının [Resources, 8] davranışını kullandığından Web Görünümü uygulaması, Android uygulamalarıyla uyumlu olmalıdır. Android Open Source uygulaması, WebView'i uygulamak için WebKit oluşturma motorunu kullanır.
Bir web tarayıcısı için kapsamlı bir test paketi geliştirmek mümkün olmadığından, cihaz uygulayıcıları WebView uygulamasında WebKit'in belirli bir yayın derlemesini KULLANMAK ZORUNDADIR. Özellikle:
- WebView, Android 2.1 için yayındaki Android Open Source ağacındaki 530.17 WebKit derlemesini KULLANMAK ZORUNDADIR. Bu derleme, Web Görünümü için belirli bir işlev grubu ve güvenlik düzeltmeleri içerir.
- WebView tarafından bildirilen kullanıcı aracısı dizesi şu biçimde OLMALIDIR:
Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
- $(VERSION) dizesinin değeri
android.os.Build.VERSION.RELEASE
değeriyle AYNI OLMALIDIR - $(LOCALE) dizesinin değeri, ülke kodu ve dil için ISO kurallarına uymalı ve cihazın mevcut yapılandırılmış yerel ayarını belirtmelidir.
- $(MODEL) dizesinin değeri
android.os.Build.MODEL
değeriyle AYNI OLMALIDIR. - $(BUILD) dizesinin değeri
android.os.Build.ID
değeriyle AYNI OLMALIDIR
- $(VERSION) dizesinin değeri
Uygulamalar, bağımsız tarayıcı uygulamasında özel bir kullanıcı aracısı dizesi GÖNDERMEYEBİLİR. Ayrıca, bağımsız tarayıcı, alternatif bir tarayıcı teknolojisine (ör. Firefox, Opera vb.) dayalı OLABİLİR. Ancak alternatif bir tarayıcı uygulaması gönderilse bile üçüncü taraf uygulamalarına sağlanan WebView bileşeni yukarıda belirtildiği gibi WebKit'e dayalı OLMALIDIR.
WebView yapılandırması, HTML5 veritabanı, uygulama önbelleği ve coğrafi konum API'leri için destek İÇERMELİDİR [Kaynaklar, 9]. Web Görünümü, bir şekilde HTML5 <video>
etiketini desteklemelidir. Bağımsız Tarayıcı uygulaması (üst akış WebKit Tarayıcı uygulamasına veya üçüncü taraf bir değişime dayalı olsun), Web Görünüm için listelenen HTML5 özelliklerinin aynısını desteklemelidir.
3.5. API Davranış Uyumluluğu
API türlerinin her birinin (yönetilen, yumuşak, yerel ve web) davranışları, yayın öncesi Android açık kaynak projesinin tercih edilen uygulamasıyla tutarlı olmalıdır [Kaynaklar, 3]. Uyumluluğun bazı belirli alanları şunlardır:
- Cihazlar, standart bir Intent'in davranışını veya anlamını DEĞİŞTİRMEMELİDİR.
- Cihazlar, belirli bir sistem bileşeni türünün (ör. Hizmet, Etkinlik, İçerik Sağlayıcı vb.) yaşam döngüsünü veya yaşam döngüsü anlamlarını DEĞİŞTİRMEMELİDİR.
- Cihazlar belirli bir iznin anlamını DEĞİŞTİREMEZ
Yukarıdaki liste kapsamlı değildir ve davranış uyumluluğunu sağlamak cihaz uygulayıcılarının sorumluluğundadır. Bu nedenle, cihaz uygulayıcıları, sistemin önemli bölümlerini yeniden uygulamak yerine mümkün olduğunda Android Açık Kaynak Projesi aracılığıyla sunulan kaynak kodu KULLANMALIDIR.
Uyumluluk Test Paketi (CTS), platformun önemli bölümlerini davranışsal uyumluluk açısından test eder ancak platformun tamamını test etmez. Android Open Source Project ile davranışsal uyumluluğu sağlamak uygulayıcının sorumluluğundadır.
3.6. API ad alanları
Android, Java programlama dili tarafından tanımlanan paket ve sınıf ad alanı kurallarına uyar. Cihaz uygulayıcıları, üçüncü taraf uygulamalarla uyumluluğu sağlamak için aşağıdaki paket ad alanlarında yasaklanmış herhangi bir değişiklik YAPMAMALIDIR:
- java.*
- javax.*
- güneş.*
- android.*
- com.android.*
Yasaklanan değişiklikler şunlardır:
- Cihaz uygulamaları, herhangi bir yöntem veya sınıf imzasını değiştirerek ya da sınıfları veya sınıf alanlarını kaldırarak Android platformunda herkese açık olarak sunulan API'lerde değişiklik YAPMAMALIDIR.
- Cihaz uygulayıcıları, API'lerin temel uygulamasını DEĞİŞTİREBİLİR ancak bu tür değişiklikler, herkese açık olarak sunulan API'lerin belirtilen davranışını ve Java dili imzasını ETKİLEMEmelidir.
- Cihaz uygulayıcıları, yukarıdaki API'lere herkese açık öğeler (ör. sınıflar veya arayüzler ya da mevcut sınıflara veya arayüzlere ait alanlar ya da yöntemler) EKLEMEMELİDİR.
"Herkese açık olarak sunulan öğe", yayın öncesi Android kaynak kodunda "@hide" işaretçisiyle süslenmemiş tüm yapılardır. Diğer bir deyişle, cihaz uygulayıcıları yukarıda belirtilen ad alanlarında yeni API'ler göstermemeli veya mevcut API'leri değiştirmemelidir. Cihaz uygulayıcıları yalnızca dahili değişiklikler YAPABİLİR ancak bu değişiklikler geliştiricilere reklamı yapılmamalı veya başka bir şekilde gösterilmemelidir.
Cihaz uygulayıcıları özel API'ler EKLEYEBİLİYOR ancak bu tür API'ler başka bir kuruluşa ait veya başka bir kuruluşa atıfta bulunan bir ad alanında OLMAYACAK. Örneğin, cihaz uygulayıcıları com.google.* veya benzer bir ad alanına API ekleMEmelidir; bunu yalnızca Google yapabilir. Benzer şekilde, Google da diğer şirketlerin ad alanlarına API ekleMEmelidir.
Bir cihaz uygulayıcısı yukarıdaki paket ad alanlarının birini iyileştirmeyi önerirse (ör. mevcut bir API'ye yararlı yeni işlevler ekleyerek veya yeni bir API ekleyerek) uygulayıcının source.android.com adresini ziyaret etmesi ve bu sitedeki bilgilere göre değişiklik ve kod katkıda bulunma sürecini başlatması GEREKİR.
Yukarıdaki kısıtlamaların, Java programlama dilinde API'leri adlandırmayla ilgili standart kurallara karşılık geldiğini unutmayın. Bu bölüm, bu kuralları pekiştirmeyi ve bu uyumluluk tanımına dahil ederek bağlayıcı hale getirmeyi amaçlamaktadır.
3.7. Sanal Makine Uyumluluğu
Cihaz uygulamaları, Dalvik Yürütülebilir (DEX) bayt kodu spesifikasyonunun tamamını ve Dalvik Sanal Makinesi anlamlarını [Kaynaklar, 10] desteklemelidir.
Cihaz uygulamaları, Dalvik'i orta veya düşük yoğunluk olarak sınıflandırılan ekranlara sahip cihazlarda her uygulamaya en az 16 MB bellek ayıracak şekilde yapılandırmalıdır. Cihaz uygulamalarında Dalvik, ekranı yüksek yoğunlukta olarak sınıflandırılan cihazlarda her uygulamaya en az 24 MB bellek ayıracak şekilde yapılandırılmalıdır. Cihaz uygulamalarının bu rakamlardan daha fazla bellek ayırabileceğini ancak bunu yapmak zorunda olmadığını unutmayın.
3.8. Kullanıcı Arayüzü Uyumluluğu
Android platformu, geliştiricilerin sistem kullanıcı arayüzüne bağlanmasına olanak tanıyan bazı geliştirici API'leri içerir. Cihaz uygulamalarında, aşağıda açıklandığı gibi bu standart kullanıcı arayüzü API'leri, geliştirilen özel kullanıcı arayüzlerine DAHİL EDİLMELİDİR.
3.8.1. Widget'lar
Android, uygulamaların son kullanıcıya "AppWidget" göstermesine olanak tanıyan bir bileşen türü ve ilgili API ile yaşam döngüsü tanımlar [Kaynaklar, 11]. Android Açık Kaynak referans sürümü, kullanıcının ana ekrana AppWidget eklemesine, görüntülemesine ve kaldırmasına olanak tanıyan kullanıcı arayüzü öğeleri içeren bir Başlatıcı uygulaması içerir.
Cihaz uygulayıcıları, referans başlatıcıya (ör. ana ekran) alternatif bir seçenek KULLANABİLİR. Alternatif başlatıcılar, uygulama widget'ları için yerleşik destek içermeli ve uygulama widget'larını doğrudan başlatıcıdan eklemek, yapılandırmak, görüntülemek ve kaldırmak için kullanıcı arayüzü öğeleri sunmalıdır. Alternatif başlatıcılar bu kullanıcı arayüzü öğelerini EKSİLTİREBİLİR. Ancak bu öğeler atlanırsa cihaz uygulayıcısı, kullanıcıların AppWidget'ları eklemesine, yapılandırmasına, görüntülemesine ve kaldırmasına olanak tanıyan, başlatıcıdan erişilebilen ayrı bir uygulama sağlamalıdır.
3.8.2. Bildirimler
Android, geliştiricilerin kullanıcıları önemli etkinlikler hakkında bilgilendirmesine olanak tanıyan API'ler içerir [Kaynaklar, 12]. Cihaz uygulayıcıları, tanımlanan her bildirim sınıfı için destek sağlamalıdır. Özellikle: sesler, titreşim, ışık ve durum çubuğu.
Ayrıca, uygulamada API'lerde [Kaynaklar, 13] veya durum çubuğu simgesi stil kılavuzunda [Kaynaklar, 14] sağlanan tüm kaynaklar (simgeler, ses dosyaları vb.) doğru şekilde oluşturulmalıdır. Cihaz uygulayıcıları, bildirimler için referans Android açık kaynak uygulaması tarafından sağlanan alternatif bir kullanıcı deneyimi SUNABİLİR. Ancak bu tür alternatif bildirim sistemleri, yukarıda belirtildiği gibi mevcut bildirim kaynaklarını DESTEKLEMELİDİR.
3.8.3. Arat
Android, geliştiricilerin aramayı uygulamalarına dahil etmesine ve uygulamalarının verilerini küresel sistem aramasında göstermesine olanak tanıyan API'ler [Kaynaklar, 15] içerir. Genel olarak bu işlev, kullanıcıların sorgu girmelerine olanak tanıyan, kullanıcılar yazarken öneriler gösteren ve sonuçları gösteren tek bir sistem genelinde kullanıcı arayüzünden oluşur. Android API'leri, geliştiricilerin kendi uygulamalarında arama sağlamak için bu arayüzü yeniden kullanmalarına ve ortak küresel arama kullanıcı arayüzüne sonuç sağlamalarına olanak tanır.
Cihaz uygulamalarında, kullanıcı girişine yanıt olarak anlık öneriler sunabilen tek bir paylaşılan sistem genelinde arama kullanıcı arayüzü BULUNMASI GEREKİR. Cihaz uygulamalarında, geliştiricilerin kendi uygulamalarında arama sağlamak için bu kullanıcı arayüzünü yeniden kullanmalarına olanak tanıyan API'ler UYGULANMALIDIR. Cihaz uygulamalarında, üçüncü taraf uygulamalarının genel arama modunda çalıştırıldığında arama kutusuna öneri eklemesine olanak tanıyan API'ler UYGULANMALIDIR. Bu işlevi kullanan üçüncü taraf uygulaması yüklü değilse varsayılan davranış, web arama motoru sonuçlarını ve önerilerini göstermek OLMALIDIR.
Cihaz uygulamalarında alternatif arama kullanıcı arayüzleri bulunabilir ancak API dokümanlarında belirtilen davranışla birlikte arama çerçevesini çağırmak için herhangi bir uygulamada dilediğiniz zaman kullanılabilecek özel bir arama düğmesi bulunmalıdır.
3.8.4. Durum mesajları
Uygulamalar, son kullanıcıya kısa süre sonra kaybolan kısa, modal olmayan dizeler göstermek için "Toast" API'yi ([Kaynaklar, 16] bölümünde tanımlanmıştır) kullanabilir. Cihaz uygulamalarında, uygulamalardan son kullanıcılara gönderilen pop-up'lar yüksek görünür bir şekilde gösterilmelidir.
3.8.5. Animasyonlu Duvar Kağıtları
Android, uygulamaların son kullanıcıya bir veya daha fazla "canlı duvar kağıdı" göstermesine olanak tanıyan bir bileşen türü ve ilgili API ile yaşam döngüsü tanımlar [Kaynaklar, 17]. Canlı duvar kağıtları, diğer uygulamaların arkasında duvar kağıdı olarak görüntülenen, sınırlı giriş özelliklerine sahip animasyonlar, desenler veya benzer resimlerdir.
Donanım, tüm canlı duvar kağıtlarını işlevsellik açısından herhangi bir sınırlama olmadan, diğer uygulamalar üzerinde olumsuz bir etkisi olmadan makul bir kare hızında çalıştırabiliyorsa canlı duvar kağıtlarını güvenilir bir şekilde çalıştırabilir. Donanımdaki sınırlamalar, duvar kağıtlarının ve/veya uygulamaların kilitlenmesine, hatalı çalışmasına, aşırı CPU veya pil gücü tüketimine ya da kabul edilemeyecek kadar düşük kare hızlarında çalışmasına neden oluyorsa donanım, canlı duvar kağıdını çalıştıramaz. Örneğin, bazı canlı duvar kağıtları içeriklerini oluşturmak için Open GL 1.0 veya 2.0 bağlamı kullanabilir. OpenGL bağlamının canlı duvar kağıdı kullanımı, OpenGL bağlamı kullanan diğer uygulamalarla çakışabileceğinden canlı duvar kağıdı, birden fazla OpenGL bağlamını desteklemeyen donanımlarda güvenilir bir şekilde çalışmaz.
Yukarıda açıklandığı gibi canlı duvar kağıtlarını güvenilir bir şekilde çalıştırabilen cihaz uygulamaları canlı duvar kağıtlarını UYGULAMALIDIR. Yukarıda açıklandığı şekilde animasyonlu duvar kağıtlarını güvenilir bir şekilde çalıştıramayacağı belirlenen cihaz uygulamalarında animasyonlu duvar kağıtları uygulanmamalıdır.
4. Referans Yazılım Uyumluluğu
Cihaz uygulayıcıları, aşağıdaki açık kaynak uygulamaları kullanarak uygulama uyumluluğunu TEST ETMELİDİR:
- Hesap makinesi (SDK'ya dahildir)
- Ay iniş aracı (SDK'ya dahildir)
- "Android için Uygulamalar" uygulamaları [Kaynaklar, 18].
Uygulamanın uyumlu olarak kabul edilebilmesi için yukarıdaki her uygulamanın uygulamada başlatılması ve doğru şekilde çalışması GEREKİR.
Ayrıca cihaz uygulamaları, aşağıdaki ilk test uygulamalarının her birinin her menü öğesini (tüm alt menüler dahil) TEST ETMELİDİR:
- ApiDemos (SDK'ya dahildir)
- ManualSmokeTests (CTS'ye dahildir)
Yukarıdaki uygulamalardaki her test durumu, cihaz uygulamasında doğru şekilde ÇALIŞMALIDIR.
5. Uygulama Paketleme Uyumluluğu
Cihaz uygulamaları, Android ".apk" dosyalarını resmi Android SDK'sına [Kaynaklar, 19] dahil edilen "aapt" aracı tarafından oluşturulduğu şekilde yükleyip çalıştırmalıdır.
Cihaz uygulamalarında .apk [Kaynaklar, 20], Android Manifest [Kaynaklar, 21] veya Dalvik bayt kodu [Kaynaklar, 10] biçimleri, bu dosyaların diğer uyumlu cihazlarda doğru şekilde yüklenmesini ve çalışmasını engelleyecek şekilde UZATILMAMALIDIR. Cihaz uygulayıcıları, Dalvik'in referans yayın öncesi uygulamasını ve referans uygulamanın paket yönetim sistemini KULLANMALIDIR.
6. Multimedya Uyumluluğu
Cihaz uygulamaları aşağıdaki multimedya codec'lerini DESTEKLEMELİDİR. Bu codec'lerin tümü, Android Açık Kaynak Projesi'nin tercih edilen Android uygulamasında yazılım uygulamaları olarak sağlanır.
Google veya Open Handset Alliance'ın bu codec'lerin üçüncü taraf patentleriyle ilgili herhangi bir beyanda bulunmadığını lütfen unutmayın. Bu kaynak kodunu donanım veya yazılım ürünlerinde kullanmak isteyenlerin, açık kaynak yazılım veya paylaşımlı yazılım da dahil olmak üzere bu kodun uygulanabilmesi için ilgili patent sahiplerinden patent lisansı almaları gerekebileceğini göz önünde bulundurmaları önerilir.
Ses | ||||
Ad | Kodlayıcı | Kod çözücü | Ayrıntılar | Dosya/Kapsayıcı Biçimi |
AAC LC/LTP | X | 160 kb/sn.'ye kadar standart bit hızları ve 8 ila 48 kHz arasındaki örnekleme hızlarının herhangi bir kombinasyonunda mono/stereo içerik | 3GPP (.3gp) ve MPEG-4 (.mp4, .m4a). Ham AAC (.aac) desteklenmez. | |
HE-AACv1 (AAC+) | X | |||
HE-AACv2 (gelişmiş AAC+) | X | |||
AMR-NB | X | X | 8 kHz'te örneklenmiş 4,75 ila 12,2 Kb/sn | 3GPP (.3gp) |
AMR-WB | X | 16 kHz'te örneklenen 6,60 kbit/sn ile 23,85 kbit/sn arasında 9 hız | 3GPP (.3gp) | |
MP3 | X | Mono/Stereo 8-320 Kb/sn sabit (CBR) veya değişken bit hızı (VBR) | MP3 (.mp3) | |
MIDI | X | MIDI Türü 0 ve 1. DLS 1 ve 2 sürümü. XMF ve Mobil XMF. RTTTL/RTX, OTA ve iMelody zil sesi biçimleri için destek | 0 ve 1 türü (.mid, .xmf, .mxmf). Ayrıca RTTTL/RTX (.rtttl, .rtx), OTA (.ota) ve iMelody (.imy) | |
Ogg Vorbis | X | Ogg (.ogg) | ||
PCM : (always use short version (long version) in the first occurrence in any content) | X | 8 ve 16 bit doğrusal PCM (donanım sınırına kadar hızlarda) | WAVE (.wav) | |
Resim | ||||
JPEG | X | X | base+progressive | |
GIF | X | |||
PNG | X | X | ||
BMP | X | |||
Video | ||||
H.263 | X | X | 3GPP (.3gp) dosyaları | |
H.264 | X | 3GPP (.3gp) ve MPEG-4 (.mp4) dosyaları | ||
MPEG4 Basit Profili | X | 3GPP (.3gp) dosyası |
Yukarıdaki tabloda çoğu video codec'i için belirli bit hızı koşullarının listelenmediğini unutmayın. Bunun nedeni, mevcut cihaz donanımlarının pratikte ilgili standartlar tarafından belirtilen gerekli bit hızlarıyla tam olarak eşleşen bit hızlarını desteklememesidir. Bunun yerine, cihaz uygulamalarında, donanımda mümkün olan en yüksek bit hızı (özelliklerle tanımlanan sınırlara kadar) DESTEKLENMELİDİR.
7. Geliştirici Aracı Uyumluluğu
Cihaz uygulamaları, Android SDK'da sağlanan Android Geliştirici Araçları'nı DESTEKLEMELİDİR. Daha ayrıntılı olarak, Android uyumlu cihazlar ŞUNLARLA uyumlu OLMALIDIR:
- Android Debug Bridge (adb olarak bilinir) [Kaynaklar, 19]
Cihaz uygulamaları, Android SDK'da belirtildiği şekilde tümadb
işlevlerini desteklemelidir. Cihaz tarafındakiadb
daemon'ı varsayılan olarak etkin OLMAMALIDIR ancak Android Hata Ayıklama Köprüsü'nü etkinleştirmek için kullanıcının erişebileceği bir mekanizma OLMALIDIR. - Dalvik Hata Ayıklama İzleyici Hizmeti (ddms olarak bilinir) [Kaynaklar, 19]
Cihaz uygulamaları, Android SDK'sında belirtildiği gibi tümddms
özelliklerini DESTEKLEMELİDİR.ddms
,adb
kullandığındanddms
desteği varsayılan olarak devre dışı OLMALIDIR ancak kullanıcı yukarıda belirtildiği gibi Android Hata Ayıklama Köprüsü'nü etkinleştirdiğinde desteklenmelidir. - Monkey [Kaynaklar, 22]
Cihaz uygulamaları Monkey çerçevesini İÇERMELİ ve uygulamaların kullanabileceği şekilde HAZIRLAYACAK.
8. Donanım Uyumluluğu
Android, yenilikçi form faktörleri ve yapılandırmalar oluşturan cihaz uygulayıcılarını desteklemek için tasarlanmıştır. Aynı zamanda Android geliştiricileri, tüm Android cihazlarda belirli donanım, sensör ve API'lerin kullanılmasını bekler. Bu bölümde, tüm Android 2.1 uyumlu cihazların desteklemesi gereken donanım özellikleri listelenmektedir.
Bir cihazda, üçüncü taraf geliştiriciler için ilgili bir API'ye sahip belirli bir donanım bileşeni varsa cihaz uygulaması bu API'yi Android SDK dokümanlarında tanımlandığı şekilde UYGULAMALIDIR. SDK'daki bir API, isteğe bağlı olduğu belirtilen bir donanım bileşeniyle etkileşime geçiyorsa ve cihaz uygulamasında bu bileşen yoksa:
- Bileşenin API'leri için sınıf tanımları BULUNMASI GEREKİR
- API'nin davranışları makul bir şekilde işlemsiz olarak uygulanmalıdır.
- API yöntemleri, SDK dokümanlarında izin verildiğinde null değerler DÖNDÜRMELİDİR.
- API yöntemleri, SDK dokümanlarında null değerlere izin verilmeyen sınıfların işlemsiz uygulamalarını DÖNDÜRMELİDİR.
Bu koşulların geçerli olduğu bir senaryoya tipik bir örnek telefon API'sidir: Telefon olmayan cihazlarda bile bu API'ler makul bir şekilde işlem yapmaz olarak uygulanmalıdır.
Cihaz uygulamaları, android.content.pm.PackageManager
sınıfındaki getSystemAvailableFeatures()
ve hasSystemFeature(String)
yöntemleri aracılığıyla doğru donanım yapılandırma bilgilerini doğru şekilde bildirmelidir.
8.1. Ekran
Android 2.1, üçüncü taraf uygulamalarının çeşitli donanım yapılandırmalarında makul düzeyde iyi çalışmasını sağlamak için bazı durumlarda belirli otomatik ölçeklendirme ve dönüştürme işlemlerini gerçekleştiren olanaklar içerir [Kaynaklar, 23]. Cihazlar, bu bölümde ayrıntılı olarak açıklandığı şekilde bu davranışları düzgün şekilde uygulamalıdır.
Android 2.1 için en yaygın ekran yapılandırmaları şunlardır:
Ekran Türü | Genişlik (piksel) | Yükseklik (piksel) | Çapraz Uzunluk Aralığı (inç) | Ekran Boyutu Grubu | Ekran Yoğunluğu Grubu |
QVGA | 240 | 320 | 2,6 - 3,0 | Küçük | Düşük |
WQVGA | 240 | 400 | 3,2 - 3,5 | Normal | Düşük |
FWQVGA | 240 | 432 | 3,5 - 3,8 | Normal | Düşük |
HVGA | 320 | 480 | 3,0 - 3,5 | Normal | Orta zorlukta |
WVGA | 480 | 800 | 3.3 - 4.0 | Normal | Yüksek |
FWVGA | 480 | 854 | 3,5 - 4,0 | Normal | Yüksek |
WVGA | 480 | 800 | 4,8 - 5,5 | Büyük | Orta zorlukta |
FWVGA | 480 | 854 | 5,0 - 5,8 | Büyük | Orta zorlukta |
Yukarıdaki standart yapılandırmalardan birine karşılık gelen cihaz uygulamaları, belirtilen ekran boyutunu android.content.res.Configuration
[Resources,
24] sınıfı aracılığıyla uygulamalara bildirecek şekilde yapılandırılmalıdır.
Bazı .apk paketlerinde, belirli bir yoğunluk aralığını desteklediği belirtilmeyen manifestler bulunur. Bu tür uygulamalar çalıştırıldığında aşağıdaki kısıtlamalar geçerli olur:
- Cihaz uygulamalarında, yoğunluk belirteci içermeyen .apk'lardaki kaynaklar varsayılan olarak "orta" (SDK dokümanlarında "mdpi" olarak bilinir) olarak yorumlanmalıdır.
- "Düşük" yoğunluktaki bir ekranda çalışırken cihaz uygulamalarının orta/mdpi öğeleri 0, 75 oranında küçültmesi GEREKİR.
- "Yüksek" yoğunluktaki bir ekranda çalışırken cihaz uygulamalarının orta/mdpi öğeleri 1, 5 kat büyütmesi GEREKİR.
- Cihaz uygulamaları, öğeleri bir yoğunluk aralığında ölçeklendirmemelidir ve öğeleri yoğunluk aralıkları arasında tam olarak bu faktörlere göre ölçeklendirmelidir.
8.1.2. Standart Olmayan Görüntülü Reklam Ağı Yapılandırmaları
8.1.1 Bölümü'nde listelenen standart yapılandırmalardan biriyle eşleşmeyen görüntü yapılandırmalarının uyumlu olması için ek değerlendirme ve çalışma gerekir. Cihaz uygulayıcıları, ekran boyutu grubu, yoğunluk ve ölçeklendirme faktörü sınıflandırmalarını almak için Bölüm 12'de belirtildiği şekilde Android Uyumluluk Ekibi ile İLETİŞİME GEÇMELİDİR. Bu bilgiler sağlandığında cihaz uygulamaları bunları belirtildiği şekilde UYGULAMALIDIR.
Bazı ekran yapılandırmalarının (ör. çok büyük veya çok küçük ekranlar ve bazı en boy oranları) Android 2.1 ile temel olarak uyumlu olmadığını unutmayın. Bu nedenle, cihaz uygulayıcılarının geliştirme sürecinde mümkün olduğunca erken bir zamanda Android Uyumluluk Ekibi ile iletişime geçmeleri önerilir.
8.1.3. Görüntülü Reklam Metrikleri
Cihaz uygulamaları, android.util.DisplayMetrics
[Kaynaklar, 25] bölümünde tanımlanan tüm görüntüleme metrikleri için doğru değerleri bildirmelidir.
8.2. Klavye
Cihaz uygulamaları:
- developer.android. com adresinde açıklandığı gibi Giriş Yönetimi Çerçevesi (üçüncü taraf geliştiricilerin Giriş Yönetimi Motorları (ör.sanal klavye) oluşturmasına olanak tanır) desteği ZORUNLUDUR.
- En az bir sanal klavye uygulaması sağlanmalıdır (sabit klavye olup olmadığına bakılmaksızın)
- Ek sanal klavye uygulamaları içerebilir
- Donanım klavyesi OLABİLİR
android.content.res.Configuration.keyboard
[Kaynaklar, 24] bölümünde belirtilen biçimlerden biriyle eşleşmeyen bir donanım klavyesi İÇERMEMELİDİR (ör. QWERTY veya 12 tuşlu)
8.3. Dokunmatik olmayan gezinme
Cihaz uygulamaları:
- Dokunmatik olmayan gezinme seçeneklerini (ör. dokunmatik top, d-pad veya tekerlek) atlayabilir
android.content.res.Configuration.navigation
[Kaynaklar, 24] için doğru değeri bildirmelidir.
8.4. Ekran Yönlendirme
Uyumlu cihazlar, dikey veya yatay ekran yönü için uygulamalar tarafından dinamik yönü desteklemelidir. Yani cihaz, uygulamanın belirli bir ekran yönü isteğini dikkate almalıdır. Cihaz uygulamalarında varsayılan olarak dikey veya yatay yön seçilebilir.
Cihazlar, android.content.res.Configuration.orientation, android.view.Display.getOrientation() veya diğer API'ler aracılığıyla sorgulandığında cihazın mevcut yönü için doğru değeri bildirmelidir.
8.5. Dokunmatik ekran girişi
Cihaz uygulamaları:
- Dokunmatik ekrana sahip OLMALIDIR
- Kapasitif veya dirençli dokunmatik ekran OLABİLİR
- Cihazdaki belirli dokunmatik ekranın türüne karşılık gelen
android.content.res.Configuration
[Resources, 24] değerini bildirmelidir
8.6. USB
Cihaz uygulamaları:
- Standart USB-A bağlantı noktası olan bir USB ana makinesine bağlanabilen bir USB istemcisi UYGULANMALIDIR
- Android Debug Bridge'i USB üzerinden UYGULAMALIDIR (7. Bölüm'de açıklandığı şekilde)
- Cihaza bağlı bir ana makinenin /sdcard biriminin içeriğine erişmesine izin vermek için USB yığın depolama alanı spesifikasyonunu UYGULAMALIDIR
- Cihaz tarafında mikro USB form faktörü KULLANILMALIDIR
- Cihaz tarafında standart olmayan bir bağlantı noktası BULUNMASI MÜMKÜNDÜR ancak bu durumda özel pin çıkışını standart USB-A bağlantı noktasına bağlayabilecek bir kabloyla birlikte gönderilMELİDİR.
8.7. Gezinme tuşları
Ana Sayfa, Menü ve Geri işlevleri, Android gezinme paradigması için gereklidir. Cihaz uygulamalarında, uygulama durumundan bağımsız olarak bu işlevler kullanıcıya her zaman sunulmalıdır. Bu işlevler özel düğmeler aracılığıyla UYGULANMALIDIR. Bu düğmeler yazılım, hareketler, dokunmatik panel vb. kullanılarak uygulanabilir. Bu durumda, düğmelere her zaman erişilebilmelidir ve mevcut uygulama görüntüleme alanını engellememelidir veya bu alanla etkileşime girmemelidir.
Cihaz uygulayıcıları ayrıca özel bir arama anahtarı DA sağlamalıdır. Cihaz uygulayıcıları, telefon görüşmeleri için gönder ve sonlandır tuşları da sağlayabilir.
8.8. Kablosuz Veri Ağı
Cihaz uygulamalarında kablosuz yüksek hızlı veri ağı desteği ZORUNLUDUR. Daha açık belirtmek gerekirse, cihaz uygulamalarında 200 Kb/sn veya daha yüksek hızda en az bir kablosuz veri standardı desteği BULUNMASI GEREKİR. Bu koşulu karşılayan teknolojilere örnek olarak EDGE, HSPA, EV-DO, 802.11g vb. verilebilir.
Bir cihaz uygulaması, Android SDK'sının API içeren belirli bir modunu (ör. kablosuz ağ, GSM veya CDMA) içeriyorsa uygulama, API'yi DESTEKLEMELİDİR.
Cihazlar birden fazla kablosuz veri bağlantısı biçimi UYGULAYABİLİR. Cihazlar kablolu veri bağlantısı (Ethernet gibi) UYGULAYABİLİR ancak yine de yukarıda belirtildiği gibi en az bir kablosuz bağlantı biçimi İÇERMELİDİR.
8.9. Kamera
Cihaz uygulamalarında KAMERA bulunmalıdır. Dahil edilen kamera:
- En az 2 megapiksel çözünürlüğe sahip OLMALIDIR.
- Kamera sürücüsünde donanım otomatik odaklama veya yazılım otomatik odaklama uygulanmış OLMALIDIR (uygulama yazılımı için şeffaf)
- Sabit odaklı veya EDOF (geniş alan derinliği) donanımına sahip OLABİLİR
- FLAŞ içerebilir. Kamerada ışık varsa uygulama,
Camera.Parameters
nesnesininFLASH_MODE_AUTO
veyaFLASH_MODE_ON
özelliklerini etkinleştirerek ışığı açıkça etkinleştirmediği sürece, bir android.hardware.Camera.PreviewCallback örneği bir kamera önizleme yüzeyine kaydedilmişken ışık YANMAZ. Bu kısıtlamanın cihazın yerleşik sistem kamera uygulaması için değil, yalnızcaCamera.PreviewCallback
kullanan üçüncü taraf uygulamaları için geçerli olduğunu unutmayın.
Cihaz uygulamaları, kamerayla ilgili API'ler için aşağıdaki davranışları UYGULAMALIDIR:
- Bir uygulama hiç android.hardware.Camera.Parameters.setPreviewFormat(int) çağrısı yapmadıysa cihaz, uygulama geri çağırmalarına sağlanan önizleme verileri için android.hardware.PixelFormat.YCbCr_420_SP'yi KULLANMAK ZORUNDADIR.
- Bir uygulama android.hardware.Camera.PreviewCallback örneği kaydederse ve sistem, önizleme biçimi YCbCr_420_SP olduğunda onPreviewFrame() yöntemini çağırırsa onPreviewFrame() yöntemine iletilen byte[] içindeki veriler NV21 kodlama biçiminde olmalıdır. (Bu, 7k donanım ailesi tarafından doğal olarak kullanılan biçimdir.) Yani NV21 varsayılan OLMALIDIR.
Cihaz uygulamalarında, cihazda donanım otomatik odaklama veya başka özellikler bulunup bulunmadığına bakılmaksızın Android 2.1 SDK dokümanlarında [Kaynaklar, 26] yer alan Camera API'nin tamamı uygulanmalıdır. Örneğin, otomatik odaklama özelliği olmayan kameralar, kayıtlı tüm android.hardware.Camera.AutoFocusCallback
örneklerini çağırmaya DEVAM ETMELİDİR (otomatik odaklama özelliği olmayan bir kamerayla alakalı olmasa da).
Cihaz uygulamaları, temel donanım özelliği destekliyorsa android.hardware.Camera.Parameters
sınıfında sabit olarak tanımlanan her parametre adını tanımalı ve dikkate almalıdır. Cihaz donanımı bir özelliği desteklemiyorsa API, dokümanlar uyarınca davranmalıdır. Buna karşılık, cihaz uygulamalarında, sabitlerin başına cihaz uygulayıcının adını belirten bir dize eklenmediği sürece android.hardware.Camera.Parameters
üzerinde sabit olarak belgelenenler dışında android.hardware.Camera.setParameters()
yöntemine iletilen dize sabitleri dikkate alınmamalı veya tanınmamalıdır. Yani, donanım izin veriyorsa cihaz uygulamaları tüm standart kamera parametrelerini DESTEKLEMELİDİR ve parametre adları standart dışı olduğu için bir dize ön ekiyle açıkça belirtilmediği sürece özel kamera parametresi türlerini DESTEKLEMEMELİDİR.
8.10. İvme ölçer
Cihaz uygulamalarında 3 eksenli bir ivmeölçer BULUNMASI VE etkinlikleri 50 Hz veya daha yüksek bir hızda gönderebilmesi ZORUNLUDUR. İvmeölçer tarafından kullanılan koordinat sistemi, Android API'lerinde açıklandığı şekilde Android sensör koordinat sistemine UYGUN OLMALIDIR (bkz. [Kaynaklar, 27]).
8.11. Pusula
Cihaz uygulamaları 3 eksenli bir pusula içermeli ve 10 Hz veya daha yüksek hızda etkinlik yayınlayabilmelidir. Pusula tarafından kullanılan koordinat sistemi, Android API'de tanımlandığı şekilde Android sensör koordinat sistemine UYGUN OLMALIDIR (bkz. [Kaynaklar, 27]).
8.12. GPS
Cihaz uygulamaları GPS içerMELİDİR ve GPS kilitlenme süresini en aza indirmek için bir tür "desteklenen GPS" tekniği İÇERMELİDİR.
8.13. Telefon Hizmeti
Android 2.1, telefon donanımı içermeyen cihazlarda KULLANILABİLİR. Yani Android 2.1, telefon olmayan cihazlarla uyumludur. Ancak bir cihaz uygulaması GSM veya CDMA telefon görüşmesi içeriyorsa söz konusu teknolojinin API'si için tam destek uygulanmalıdır. Telefon donanımı içermeyen cihaz uygulamaları, API'lerin tamamını işlem yapmadan olarak UYGULAMALIDIR.
8.8 numaralı bölüme (Kablosuz Veri Ağı) de bakın.
8.14. Bellek ve Depolama
Cihaz uygulamalarında, çekirdek ve kullanıcı alanında en az 92 MB bellek bulunmalıdır. 92 MB, çekirdeğin kontrolü altında olmayan radyo, bellek vb. donanım bileşenlerine ayrılmış belleğe ek olarak OLMALIDIR.
Cihaz uygulamalarında, kullanıcı verileri için en az 150 MB kalıcı olmayan depolama alanı bulunmalıdır. Yani /data
bölümü en az 150 MB olmalıdır.
8.15. Uygulama Ortak Depolama Alanı
Cihaz uygulamaları, uygulamalar için paylaşılan depolama alanı sunmalıdır. Sağlanan paylaşılan depolama alanı en az 2 GB boyutunda OLMALIDIR.
Cihaz uygulamaları, varsayılan olarak "kutudan çıkar çıkmaz" paylaşılan depolama alanı ile yapılandırılmalıdır. Ortak depolama alanı /sdcard
Linux yoluna monte edilmemişse cihazda /sdcard
ile gerçek montaj noktası arasında bir Linux sembolik bağlantısı BULUNMASI GEREKİR.
Cihaz uygulamalarında, bu paylaşılan depolama alanında android.permission.WRITE_EXTERNAL_STORAGE
izninin belgelendiği şekilde uygulanması GEREKİR. Aksi takdirde, paylaşılan depolama alanı bu izni alan tüm uygulamalar tarafından yazılabilir OLMALIDIR.
Cihaz uygulamalarında, kullanıcının erişebileceği çıkarılabilir depolama alanı (ör. Secure Digital kart) için donanım OLABİLİR. Alternatif olarak, cihaz uygulamaları dahili (çıkarılabilir olmayan) depolama alanını uygulamalar için paylaşılan depolama alanı olarak AYRIŞTIRABİLİR.
Kullanılan ortak depolama alanı biçiminden bağımsız olarak, ortak depolama alanı Bölüm 8.6'da açıklandığı gibi USB yığın depolama alanını UYGULAMALIDIR. Paylaşılan depolama alanı, kutudan çıktığı haliyle FAT dosya sistemiyle monte EDİLMELİDİR.
İki yaygın örneği ele almak faydalı olacaktır. Bir cihaz uygulaması, ortak depolama alanı şartını karşılamak için SD kart yuvası içeriyorsa kullanıcılara satılan cihaza 2 GB veya daha büyük FAT biçimli bir SD kart DAHİL EDİLMELİ ve varsayılan olarak monte EDİLMELİDİR.
Alternatif olarak, bir cihaz uygulaması bu koşulu karşılamak için dahili sabit depolama alanı kullanıyorsa bu depolama alanı 2 GB veya daha büyük OLMALI ve /sdcard
'e monte edilmiş OLMALIDIR (veya başka bir yere monte edilmişse /sdcard
fiziksel konuma giden sembolik bir bağlantı OLMALIDIR).
8.16. Bluetooth
Cihaz uygulamaları Bluetooth alıcı/verici içermelidir. Cihaz uygulamalarında, SDK dokümanlarında [Kaynaklar, 29] açıklandığı gibi RFCOMM tabanlı Bluetooth API etkinleştirilmelidir. Cihaz uygulamalarında, cihaza uygun olarak A2DP, AVRCP, OBEX gibi ilgili Bluetooth profilleri UYGULANMALIDIR.
9. Performans Uyumluluğu
Android Uyumluluk Programı'nın hedeflerinden biri, tüketicilere tutarlı bir uygulama deneyimi sunmaktır. Uyumlu uygulamalar, yalnızca uygulamaların cihazda doğru şekilde çalışmasını değil, aynı zamanda makul bir performans ve genel olarak iyi bir kullanıcı deneyimi sunmasını da sağlamalıdır. Cihaz uygulamaları, aşağıdaki tabloda tanımlanan Android 2.1 uyumlu bir cihazın temel performans metriklerini karşılamalıdır:
Metrik | Performans Eşiği | Yorumlar |
Uygulama Başlatma Süresi | Aşağıdaki uygulamalar belirtilen süre içinde başlatılmalıdır.
|
Başlatma süresi, Linux sürecini başlatmak, Android paketini Dalvik sanal makinesine yüklemek ve onCreate'i çağırmak için gereken süre dahil olmak üzere, uygulamanın varsayılan etkinliğini yüklemenin tamamlanması için gereken toplam süre olarak ölçülür. |
Eşzamanlı Başvurular | Birden fazla uygulama başlatıldığında, zaten çalışan bir uygulamayı yeniden başlatmak, ilk başlatma süresinden daha kısa sürmelidir. |
10. Güvenlik Modeli Uyumluluğu
Cihaz uygulamalarında, Android geliştirici dokümanlarında API'ler [Kaynaklar, 28] bölümündeki Güvenlik ve İzinler referans belgesinde tanımlandığı şekilde Android platform güvenlik modeliyle tutarlı bir güvenlik modeli uygulanmalıdır. Cihaz uygulamaları, üçüncü taraflardan/yetkililerden ek izinler/sertifikalar gerektirmeden kendi kendine imzalanan uygulamaların yüklenmesini DESTEKLEMELİDİR. Daha açık belirtmek gerekirse, uyumlu cihazlar aşağıdaki alt bölümlerde açıklanan güvenlik mekanizmalarını DESTEKLEMELİDİR.
10.1. İzinler
Cihaz uygulamaları, Android geliştirici dokümanlarında [Kaynaklar, 28] tanımlandığı şekilde Android izin modelini DESTEKLEMELİDİR. Daha açık belirtmek gerekirse, uygulamalarda SDK dokümanlarında açıklandığı şekilde tanımlanan her izin ZORUNLU KILINACAK. Hiçbir izin atlanmamalı, değiştirilmemeli veya yok sayılmamalıdır. Yeni izin kimliği dizelerinin android.* ad alanında olmaması koşuluyla, uygulamalar ek izinler EKLEYEBİLİYOR.
10.2. UID ve İşlem İzolasyon
Cihaz uygulamalarında, her uygulamanın benzersiz bir Unix tarzı UID olarak ve ayrı bir işlemde çalıştığı Android uygulama korumalı alanı modeli desteklenmelidir. Cihaz uygulamalarında, Güvenlik ve İzinler referansında [Kaynaklar, 28] tanımlandığı şekilde uygulamaların düzgün şekilde imzalanması ve oluşturulması koşuluyla, aynı Linux kullanıcı kimliğiyle birden fazla uygulamanın çalıştırılması desteklenmelidir.
10.3. Dosya sistemi izinleri
Cihaz uygulamaları, Güvenlik ve İzinler referansında [Kaynaklar, 28] tanımlandığı şekilde Android dosya erişim izinleri modelini DESTEKLEMELİDİR.
11. Compatibility Test Suite
Cihaz uygulamalarının, cihazdaki nihai gönderim yazılımını kullanarak Android Açık Kaynak Projesi'nden edinilebilen Android Uyumluluk Test Paketi'ni (CTS) [Kaynaklar, 2] GEÇMESİ GEREKİR. Ayrıca cihaz uygulayıcıları, Android Açık Kaynak ağacındaki referans uygulamayı mümkün olduğunca kullanmalı ve CTS'de belirsizlik olduğunda ve referans kaynak kodunun bölümlerinin yeniden uygulandığı durumlarda uyumluluğu sağlamalıdır.
CTS, gerçek bir cihazda çalışacak şekilde tasarlanmıştır. Her yazılım gibi CTS de hata içerebilir. CTS, bu Uyumluluk Tanımı'ndan bağımsız olarak sürümlendirilir ve Android 2.1 için CTS'nin birden fazla düzeltmesi yayınlanabilir. Cihaz uygulamaları, cihaz yazılımı tamamlandığı sırada mevcut olan en son CTS sürümünü ZORUNLU KILINCA geçer.
12. Güncellenebilir Yazılımlar
Cihaz uygulamalarında, sistem yazılımının tamamını değiştirecek bir mekanizma BULUNMASI GEREKİR. Mekanizmanın "canlı" yükseltmeler yapması gerekmez. Yani cihazın yeniden başlatılması GEREKEBİLİR.
Cihazın önceden yüklenmiş yazılımının tamamını değiştirebildiği sürece herhangi bir yöntem kullanılabilir. Örneğin, aşağıdaki yaklaşımlardan herhangi biri bu koşulu karşılar:
- Yeniden başlatma yoluyla çevrimdışı güncelleme ile kablosuz (OTA) indirmeler
- Ana makine PC'den USB üzerinden "bağlantılı" güncellemeler
- Yeniden başlatma ve çıkarılabilir depolama alanındaki bir dosyadan güncelleme yoluyla "Çevrimdışı" güncellemeler
Kullanılan güncelleme mekanizması, kullanıcı verilerini silmeden güncellemeleri desteklemelidir. Yukarı akış Android yazılımının bu koşulu karşılayan bir güncelleme mekanizması içerdiğini unutmayın.
Bir cihaz uygulamasında, cihaz kullanıma sunulduktan sonra ancak Android Uyumluluk Ekibi ile yapılan danışma sonucunda belirlenen makul ürün ömrü içinde üçüncü taraf uygulamalarının uyumluluğunu etkileyecek bir hata bulunursa cihaz uygulayıcısı, hatayı az önce açıklanan mekanizmaya göre uygulanabilen bir yazılım güncellemesi aracılığıyla DÜZELTMEKTE ZORUNLUDUR.
13. Bize Ulaşın
Açıklamalar almak ve dokümanda yer almadığını düşündüğünüz sorunları bildirmek için compatibility@android.com adresinden doküman yazarlarıyla iletişime geçebilirsiniz.