İçindekiler
3.2.3.1. Temel Uygulama Amaçları
3.2.3.2. Amaç Geçersiz Kılmaları
3.2.3.5. Varsayılan Uygulama Ayarları
3.3.1. Uygulama İkili Arabirimleri
3.3.2. 32 bit ARM Yerel Kod Uyumluluğu
3.7. Çalışma zamanı uyumluluğu
3.8. Kullanıcı Arayüzü Uyumluluğu
3.8.7. Animasyonlu Duvar Kağıtları
4. Uygulama Paketleme Uyumluluğu
5.4.3. Oynatma işlemini yeniden yönlendirmek için yakalama
6. Geliştirici Araçları ve Seçenekleri Uyumluluğu
7.1.2. Görüntülü Reklam Ağı Metrikleri
7.1.4. 2D ve 3D Grafik Hızlandırması
7.1.5. Eski Uygulama Uyumluluğu Modu
7.2.4. Dokunmatik Ekran Girişi
7.4.2.2. Wi-Fi Tünel Doğrudan Bağlantısı Kurulumu
7.4.4. Near-Field Communications
1. Giriş
Bu belgede, cihazların Android 5.1 ile uyumlu olması için karşılanması gereken şartlar listelenmiştir.
"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" ve "OPTIONAL" kelimelerinin kullanımı, RFC2119 [Kaynaklar, 1] belgesinde tanımlanan IETF standardına göredir.
Bu dokümanda "cihaz uygulayıcısı" veya "uygulayıcı", Android 5.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 5.1 ile uyumlu olarak kabul edilmek için cihaz uygulamalarının, referansla dahil edilen tüm dokümanlar da dahil olmak üzere bu Uyumluluk Tanımı'nda sunulan koşulları İYİCE karşılaması GEREKİR.
Bu tanım veya 10. bölümde açıklanan yazılım testleri net değilse, belirsizse ya da eksikse mevcut uygulamalarla uyumluluğu sağlamak cihaz uygulayıcının sorumluluğundadır.
Bu nedenle Android Açık Kaynak Projesi [Kaynaklar, 2], Android'in hem referans kaynağı hem de tercih edilen uygulamasıdır. Cihaz uygulayıcılarının, uygulamalarını mümkün olduğunca Android Açık Kaynak Projesi'nden edinilebilen "yüksek akış" kaynak koduna dayandırmaları önemle tavsiye edilir. Bazı bileşenler teorik olarak alternatif uygulamalarla değiştirilebilir olsa da yazılım testlerini geçmek önemli ölçüde daha zor olacağından bu uygulamanın yapılması kesinlikle önerilmez. Uyumluluk Testi Paketi dahil ve hariç 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.
14. bölümde listelenen kaynakların çoğu doğrudan veya dolaylı olarak Android SDK'sından türetilmiştir ve işlevsel olarak söz konusu SDK'nın dokümanlarındaki bilgilerle aynıdır. Bu Uyumluluk Tanımlama Belgesi veya Uyumluluk Testi Paketi'nin SDK dokümanlarıyla çeliştiği durumlarda SDK dokümanları yetkili kabul edilir. 14. bölümde yer alan referanslarda sağlanan tüm teknik ayrıntılar, bu Uyumluluk Tanımı'nın bir parçası olarak kabul edilir.
2. Cihaz Türleri
Android Açık Kaynak Projesi, çeşitli cihaz türleri ve form faktörlerinin uygulanmasında kullanılmış olsa da mimarinin ve uyumluluk koşullarının birçok yönü, el cihazları için optimize edilmiştir. Android 5.0'den itibaren Android Açık Kaynak Projesi, bu bölümde açıklandığı gibi daha fazla cihaz türünü desteklemeyi amaçlamaktadır.
Android El Cihazları, genellikle elinizde tutarak kullandığınız Android cihaz uygulamalarını (ör. mp3 oynatıcı, telefon ve tablet) ifade eder. Android el cihazı uygulamaları:
- Cihazda yerleşik bir dokunmatik ekran OLMALIDIR.
- Hareketliliği sağlayan bir güç kaynağına (ör. pil) sahip OLMALIDIR.
Android TV cihazı, yaklaşık üç metre uzaklıktaki kullanıcılar için dijital medya, film, oyun, uygulama ve/veya canlı TV içeriklerini tüketmeye yönelik bir eğlence arayüzü olan Android cihaz uygulamasını ifade eder ("arkanıza yaslanın" veya "üç metrelik kullanıcı arayüzü"). Android TV cihazları:
- Yerleşik bir ekrana VEYA VGA, HDMI gibi bir video çıkış bağlantı noktasına VEYA ekran için kablosuz bağlantı noktasına sahip OLMALIDIR.
- android.software.leanback ve android.hardware.type.television özelliklerini İLKLEŞTİRMELİDİR [Kaynaklar, 3].
Android kol saati cihazı, vücutta (kolda) takılmak üzere tasarlanmış bir Android cihaz uygulaması anlamına gelir ve:
- Fiziksel diyagonal uzunluğu 1,1 ila 2,5 inç arasında olan bir ekrana sahip OLMALIDIR.
- android.hardware.type.watch özelliğini İLKLEŞTİRMELİDİR.
- uiMode = UI_MODE_TYPE_WATCH [Resources, 4] desteklenmelidir.
Android Automotive uygulaması, sistemin ve/veya bilgi-eğlence işlevinin bir kısmı ya da tamamı için işletim sistemi olarak Android'i çalıştıran bir araç ana birimini ifade eder. Android Automotive uygulamaları uiMode = UI_MODE_TYPE_CAR [Kaynaklar, 111] değerini desteklemelidir.
Yukarıdaki cihaz türlerinden hiçbirine uymayan tüm Android cihaz uygulamalarının, Android 5.1 uyumlu olması için bu dokümandaki tüm şartları karşılaması GEREKİR. Ancak şartın yalnızca yukarıdaki belirli bir Android cihaz türü için geçerli olduğu açıkça belirtilmişse bu şart geçerli değildir.
2.1 Cihaz Yapılandırmaları
Bu, cihaz türüne göre donanım yapılandırmasında bulunan önemli farklılıkların özetidir. (Boş hücreler "OLABİLİR" anlamına gelir). Bu tabloda tüm yapılandırmalar ele alınmamıştır. Daha fazla bilgi için ilgili donanım bölümlerine bakın.
Kategori | Özellik | Bölüm | El Kamerası | Televizyon | İzle | Automotive | Diğer |
---|---|---|---|---|---|---|---|
Giriş | D-pad | 7.2.2. Dokunmadan gezinme | MUST | ||||
Dokunmatik ekran | 7.2.4. Dokunmatik ekran girişi | MUST | MUST | OLMALI | |||
Mikrofon | 7.8.1. Mikrofon | MUST | OLMALI | MUST | MUST | OLMALI | |
Sensörler | İvme ölçer | 7.3.1 İvme Ölçer | OLMALI | OLMALI | OLMALI | ||
GPS | 7.3.3. GPS | OLMALI | OLMALI | ||||
Bağlantı | Kablosuz bağlantı | 7.4.2. IEEE 802.11 | OLMALI | MUST | OLMALI | OLMALI | |
Kablosuz Doğrudan Bağlantı | 7.4.2.1. Wi-Fi Direct | OLMALI | OLMALI | OLMALI | |||
Bluetooth | 7.4.3. Bluetooth | OLMALI | MUST | MUST | MUST | OLMALI | |
Bluetooth Düşük Enerji | 7.4.3. Bluetooth | OLMALI | MUST | OLMALI | OLMALI | OLMALI | |
USB çevre birimi/ana makine modu | 7.7. USB | OLMALI | OLMALI | OLMALI | |||
Çıkış | Hoparlör ve/veya ses çıkışı bağlantı noktaları | 7.8.2. Ses Çıkışı | MUST | MUST | MUST | MUST |
3. Yazılım
3.1. Yönetilen API Uyumluluğu
Yönetilen Dalvik bayt kodu yürütme ortamı, Android uygulamalarının birincil aracıdır. Android uygulama programlama arayüzü (API), yönetilen çalışma ortamı içinde çalışan uygulamalara sunulan Android platform arayüzleri grubudur. Cihaz uygulamalarında, Android SDK'sı [Kaynaklar, 5] tarafından sunulan tüm belgelenmiş API'ler veya yayın öncesi Android kaynak kodunda "@SystemApi" işaretçisiyle süslenmiş tüm API'ler için belgelenen tüm davranışlar da dahil olmak üzere eksiksiz uygulamalar sağlanmalıdır.
Cihaz uygulamalarında, bu Uyumluluk Tanımı'nda özel olarak izin verildiği durumlar hariç olmak üzere, yönetilen API'ler atlanmamalı, API arayüzleri veya imzaları değiştirilmemeli, belgelenen davranıştan sapılmamalı veya hiçbir işlem içermemelidir.
Bu Uyumluluk Tanımı, Android'in API'leri içerdiği bazı donanım türlerinin cihaz uygulamaları tarafından atlanmasına izin verir. Bu gibi durumlarda API'ler hâlâ mevcut OLMALI ve makul bir şekilde davranmalıdır. Bu senaryoya özgü gereksinimler için 7. bölüme bakın.
3.2. Soft API Uyumluluğu
Android, 3.1 numaralı bölümdeki yönetilen API'lere ek olarak, Android uygulamalarının derleme sırasında uygulanamayan niyetleri, izinleri ve benzer yönleri gibi öğeler biçiminde yalnızca çalışma zamanında kullanılabilen önemli bir "yumuşak" API de içerir.
3.2.1. İzinler
Cihaz uygulayıcıları, izin referans sayfasında [Kaynaklar, 6] belirtildiği gibi tüm izin sabitlerini desteklemeli ve zorunlu kılmalıdır. 9. bölümde Android güvenlik modeliyle ilgili ek koşulların listelendiğini unutmayın.
3.2.2. Derleme Parametreleri
Android API'leri, android.os.Build sınıfında [Kaynaklar, 7] 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 uyması GEREKEN bu değerlerin biçimleriyle ilgili ek kısıtlamalar yer almaktadır.
Parametre | Ayrıntılar |
---|---|
VERSION.RELEASE | Şu anda çalışan Android sisteminin, kullanıcılar tarafından okunabilir biçimdeki sürümü. Bu alanda [Kaynaklar, 8] bölümünde tanımlanan dize değerlerinden biri bulunmalıdır. |
VERSION.SDK | Üçüncü taraf uygulama kodunun erişebileceği bir biçimde, şu anda çalışan Android sisteminin sürümü. Android 5.1 için bu alanda 22 tam sayı değeri OLMALIDIR. |
VERSION.SDK_INT | Üçüncü taraf uygulama kodunun erişebileceği bir biçimde, şu anda çalışan Android sisteminin sürümü. Android 5.1 için bu alanın tam sayı değeri 22 OLMALIDIR. |
VERSION.INCREMENTAL | Cihaz uygulayıcısı tarafından seçilen ve şu 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 sunulan farklı derlemeler için TEKRAR KULLANILMAMALIDIR. 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. |
MASA | 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 değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9_-]+$" normal ifadesiyle eşleşmelidir. |
BRAND | Son kullanıcıların bildiği şekilde cihazla ilişkili marka adını yansıtan bir değer. Kullanıcı tarafından okunabilir biçimde OLMALIDIR ve cihazın üreticisini veya cihazın pazarlandığı şirket markasını temsil ETMELİDİR. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9_-]+$" normal ifadesiyle eşleşmelidir. |
SUPPORTED_ABIS | Yerel kodun talimat setinin adı (CPU türü + ABI kuralı). 3.3. bölüme bakın. Native API Compatibility. |
SUPPORTED_32_BIT_ABIS | Yerel kodun talimat setinin adı (CPU türü + ABI kuralı). 3.3. bölüme bakın. Native API Compatibility. |
SUPPORTED_64_BIT_ABIS | Yerel kodun ikinci talimat setinin (CPU türü + ABI kuralı) adı. 3.3. bölüme bakın. Native API Compatibility. |
CPU_ABI | Yerel kodun talimat setinin adı (CPU türü + ABI kuralı). 3.3. bölüme bakın. Native API Compatibility. |
CPU_ABI2 | Yerel kodun ikinci talimat setinin (CPU türü + ABI kuralı) adı. 3.3. bölüme bakın. Native API Compatibility. |
CİHAZ | Cihaz uygulayıcısı tarafından seçilen, donanım özelliklerinin yapılandırmasını ve cihazın endüstriyel tasarımını tanımlayan geliştirme adını veya kod adını içeren bir değer. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9_-]+$" normal ifadesiyle eşleşmelidir. |
FINGERPRINT | Bu derlemeyi benzersiz şekilde tanımlayan bir dize. Makul ölçüde okunaklı OLMALIDIR. Şu şablona UYGUN OLMALIDIR:
$(MARKA)/$(ÜRÜN)/$(CİHAZ):$(SÜRÜM.YAYIM)/$(Kimlik)/$(SÜRÜM.ARTIŞ):$(TİP)/$(ETİKETLER) Örneğin: acme/myproduct/mydevice:5.1/LMYXX/3359:userdebug/test-keys Parmak izi boşluk karakteri İÇERMEMELİDİR. Yukarıdaki şablona dahil edilen diğer alanlarda boşluk karakterleri varsa derleme parmak izinde alt çizgi ("_") karakteri gibi başka bir karakterle DEĞİŞTİRİLMESİ GEREKİR. Bu alanın değeri 7 bit ASCII olarak kodlanabilir OLMALIDIR. |
DONANIM | Donanımın adı (çekirdek komut satırından veya /proc'ten). Makul ölçüde okunaklı OLMALIDIR. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9_-]+$" normal ifadesiyle eşleşmelidir. |
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. |
Kimlik | Cihaz uygulayıcısı tarafından, belirli bir sürümü belirtmek için seçilen, kullanıcı tarafından okunabilir biçimdeki 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 değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9._-]+$" normal ifadesiyle eşleşmelidir. |
ÜRETİCİ | Ürünün özgün donanım üreticisinin (OEM) ticari adı. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir. |
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. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir. |
ÜRÜN | Cihaz uygulayıcısı tarafından seçilen ve belirli bir ürünün (SKU) geliştirme adını veya kod adını içeren ve aynı marka içinde benzersiz OLMASI GEREKEN bir değer. Kullanıcılar tarafından okunabilir olmalıdır ancak son kullanıcılar tarafından görüntülenmesi gerekmez. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9_-]+$" normal ifadesiyle eşleşmelidir. |
SERİ | Mevcut OLMASI GEREKEN bir donanım seri numarası. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^([a-zA-Z0-9]{6,20})$" normal ifadesiyle eşleşmelidir. |
ETİKETLER | Cihaz uygulayıcısı tarafından seçilen ve derlemeyi daha da ayırt edici kılan, virgülle ayrılmış etiket listesi. Bu alanda, üç tipik Android platformu imzalama yapılandırmasına karşılık gelen değerlerden biri OLMALIDIR: release-keys, dev-keys, test-keys. |
SÜRE | Derlemenin gerçekleştiği zamanın zaman damgasını temsil eden bir değer. |
TÜR | 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. |
KULLANICI | 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
Cihaz uygulamaları, aşağıdaki bölümlerde açıklandığı gibi Android'in gevşek bağlantılı intent sistemini dikkate ALMASI GEREKİR. "Uygulandı" ifadesi, cihaz uygulayıcının, belirtilen her intent kalıbına bağlanan ve doğru davranışı uygulayan eşleşen bir intent filtresi belirten bir Android Etkinliği veya Hizmeti sağlaması GEREKTİĞİ anlamına gelir.
3.2.3.1. Temel Uygulama Amaçları
Android intent'leri, uygulama bileşenlerinin diğer Android bileşenlerinden işlev istemesine olanak tanır. Android yayın öncesi projesi, temel Android uygulamaları olarak kabul edilen ve yaygın işlemleri gerçekleştirmek için çeşitli intent kalıpları uygulayan uygulamaların listesini içerir. Temel Android uygulamaları şunlardır:
- Masa Saati
- Tarayıcı
- Takvim
- Kişiler
- Galeri
- GlobalSearch
- Roketatar
- Müzik
- Ayarlar
Cihaz uygulamaları, temel Android uygulamalarını uygun şekilde İÇERMELİ ancak bu temel Android uygulamalarının tüm "herkese açık" Activity veya Service bileşenleri tarafından tanımlanan aynı intent kalıplarını uygulayan bir bileşen İÇERMELİDİR. android:exported özelliği bulunmadığında veya true değerine sahip olduğunda etkinlik veya hizmet bileşenlerinin "herkese açık" olarak kabul edildiğini unutmayın.
3.2.3.2. Intent Geçersiz Kılmaları
Android genişletilebilir bir platform olduğundan cihaz uygulamalarında, 3.2.3.1 numaralı bölümde belirtilen her intent kalıbının üçüncü taraf uygulamaları tarafından geçersiz kılınmasına izin VERİLMELİDİR. Yukarı yönlü Android açık kaynak uygulaması buna varsayılan olarak izin verir; cihaz uygulayıcıları, sistem uygulamalarının bu intent kalıplarını kullanımı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ü ele alması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.
Ancak cihaz uygulamaları, varsayılan etkinlik veri URI için daha spesifik bir filtre sağlıyorsa belirli URI kalıpları (ör. http://play.google.com) için varsayılan etkinlikler sağlayabilir. Örneğin, "http://www.android.com" veri URI'sini belirten bir intent filtresi, "http://" için tarayıcı filtresinden daha spesifiktir. Cihaz uygulamalarında, kullanıcıların intent'ler için varsayılan etkinliği değiştirmesi gereken bir kullanıcı arayüzü ZORUNLUDUR.
3.2.3.3. Intent Ad Alanları
Cihaz uygulamalarında, android.* veya com.android.* ad alanındaki bir ACTION, CATEGORY veya başka bir anahtar dizesi kullanarak yeni intent veya yayın intent kalıplarını dikkate alan Android bileşenleri BULUNMAMALIDIR. 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 yayın 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ğiştirmemeli veya genişletmemelidir. Cihaz uygulamalarında, açıkça kendi kuruluşlarıyla ilişkilendirilmiş ad alanlarının kullanıldığı intent kalıpları YER ALABİLİR. Bu yasak, 3.6 numaralı bölümde 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şiklikleri bildirmek 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 YAYINLAMAK ZORUNDADIR. Yayın intent'leri SDK dokümanlarında açıklanmaktadır.
3.2.3.5. Varsayılan Uygulama Ayarları
Android, kullanıcılara varsayılan uygulamalarını (ör. ana ekran veya SMS) kolayca seçmelerini sağlayan ayarlar içerir. Uygun olduğu durumlarda, cihaz uygulamalarında benzer bir ayarlar menüsü sağlanmalı ve SDK dokümanlarında aşağıda açıklandığı şekilde intent filtresi kalıbı ve API yöntemleriyle uyumlu olmalıdır.
Cihaz uygulamaları:
- Cihaz uygulaması android.software.home_screen bildirirse Ana Ekran için varsayılan bir uygulama ayarları menüsü göstermek üzere android.settings.HOME_SETTINGS intent'ini UYGUNLAŞTIRMALIDIR [Kaynaklar, 10]
- Cihaz uygulaması android.hardware.telephony bildirirse varsayılan SMS uygulamasını değiştirmek için bir iletişim kutusu göstermek üzere android.provider.Telephony.ACTION_CHANGE_DEFAULT niyetini çağıran bir ayarlar menüsü SAĞLAMALIDIR [Kaynaklar, 9]
- Cihaz uygulaması android.hardware.nfc.hce bildirirse Temassız Ödeme için varsayılan uygulama ayarları menüsünü göstermek üzere android.settings.NFC_PAYMENT_SETTINGS niyetini İYİ UYGULAMALI [Kaynaklar, 10]
3.3. Yerel API Uyumluluğu
3.3.1. Uygulama İkili Arabirimleri
Managed Dalvik bayt kodu, uygulama .apk dosyasında uygun cihaz donanım mimarisi için derlenmiş bir ELF .so dosyası olarak sağlanan yerel kodu çağırabilir. Yerel kod, temel işlemci teknolojisine oldukça bağlı olduğundan Android, Android NDK'de bir dizi Uygulama İkili Arayüzü (ABI) tanımlar. Cihaz uygulamaları bir veya daha fazla tanımlanmış ABI ile UYUMLU OLMALIDIR ve aşağıdaki gibi Android NDK ile uyumluluğu uygulamalıdır.
Bir cihaz uygulaması, Android ABI'si desteği içeriyorsa:
- Standart Java Native Interface (JNI) semantiklerini kullanarak yönetilen ortamda çalışan kodun yerel kodu çağırması için destek DAHİL OLMALIDIR
- Aşağıdaki listedeki her gerekli kitaplıkla kaynak uyumlu (ör. başlık uyumlu) ve ikili uyumlu (ABI için) OLMALIDIR
- 64 bit ABI destekleniyorsa eşdeğer 32 bit ABI'yi DE desteklemelidir.
- Cihazın desteklediği yerel Uygulama İkili Arayüzü'nü (ABI) android.os.Build.SUPPORTED_ABIS, android.os.Build.SUPPORTED_32_BIT_ABIS ve android.os.Build.SUPPORTED_64_BIT_ABIS parametreleri aracılığıyla doğru şekilde bildirmelidir. Bu parametrelerin her biri, en çok tercih edilenden en az tercih edilene göre sıralanmış ABI'lerden oluşan, virgülle ayrılmış bir listetir.
- Yukarıdaki parametreler aracılığıyla yalnızca Android NDK'nın en son sürümünde (docs/ dizinindeki "NDK Programmer's Guide | ABI Management") belgelenen ABI'leri bildirmelidir.
- Yukarı akış Android Açık Kaynak Projesi'nde bulunan kaynak kod ve başlık dosyaları kullanılarak OLUŞTURULMALIDIR
Aşağıdaki yerel kod API'leri, yerel kod içeren uygulamalar tarafından KULLANILABİLİR OLMALIDIR:
- libc (C kitaplığı)
- libm (matematik kitaplığı)
- C++ için minimum destek
- JNI arayüzü
- liblog (Android günlük kaydı)
- libz (Zlib sıkıştırması)
- libdl (dinamik bağlayıcı)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libEGL.so (yerel OpenGL yüzey yönetimi)
- libjnigraphics.so
- libOpenSLES.so (OpenSL ES 1.0.1 ses desteği)
- libOpenMAXAL.so (OpenMAX AL 1.0.1 desteği)
- libandroid.so (yerel Android etkinliği desteği)
- libmediandk.so (yerel medya API'leri desteği)
- Aşağıda açıklandığı şekilde OpenGL desteği
Android NDK'nın gelecekteki sürümlerinde ek ABI'ler için destek sunulabileceğini unutmayın. Bir cihaz uygulaması, mevcut bir önceden tanımlanmış ABI ile uyumlu değilse hiçbir ABI için destek bildirmemelidir.
Cihaz uygulamalarının libGLESv3.so dosyasını İÇERMESİ ve libGLESv2.so dosyasına sembolik bağlantı (sembolik bağlantı) oluşturması GEREKİR. Sırasıyla, NDK android-21 sürümünde tanımlandığı gibi tüm OpenGL ES 3.1 ve Android Extension Pack [Resources, 11] işlev simgelerini dışa aktarması GEREKİR. Tüm semboller mevcut olmalıdır ancak yalnızca cihaz tarafından gerçekten desteklenen OpenGL ES sürümleri ve uzantılarıyla ilgili işlevler tam olarak uygulanmalıdır.
Yerel kod uyumluluğu zordur. Bu nedenle, cihaz uygulayıcılarının yukarıda listelenen kitaplıkların üst akış Android Açık Kaynak Projesi'ndeki uygulamalarını kullanmaları çok önemle tavsiye edilir.
3.3.2. 32 bit ARM Yerel Kod Uyumluluğu
ARMv8 mimarisi, mevcut yerel kodda kullanılan bazı işlemler de dahil olmak üzere çeşitli CPU işlemlerinin desteğini sonlandırıyor. 64 bit ARM cihazlarda, aşağıdaki desteği sonlandırılmış işlemler, yerel CPU desteği veya yazılım emülasyonu aracılığıyla 32 bit yerel ARM kodu için KESİNLİKLE kullanılabilir durumda kalmalıdır:
- SWP ve SWPB talimatları
- SETEND talimatı
- CP15ISB, CP15DSB ve CP15DMB bariyer işlemleri
Android NDK'nın eski sürümleri, 32 bit ARM yerel kodundan CPU özelliklerini keşfetmek için /proc/cpuinfo dosyasını kullanıyordu. Bu NDK kullanılarak oluşturulan uygulamalarla uyumluluk için cihazların, 32 bit ARM uygulamaları tarafından okunduğunda /proc/cpuinfo dosyasına aşağıdaki satırları DAHİL etmesi GEREKİR:
- "Özellikler: " ve ardından cihaz tarafından desteklenen isteğe bağlı ARMv7 CPU özelliklerinin listesi
- "CPU mimarisi: ", ardından cihazın desteklediği en yüksek ARM mimarisini açıklayan bir tam sayı (ör. ARMv8 cihazlar için "8")
Bu koşullar yalnızca /proc/cpuinfo 32 bit ARM uygulamaları tarafından okunduğunda geçerlidir. Cihazlar, 64 bit ARM veya ARM dışı uygulamalar tarafından okunduğunda /proc/cpuinfo dosyasını DEĞİŞTİRMEMELİDİR.
3.4. Web Uyumluluğu
3.4.1. WebView Uyumluluğu
Android Watch cihazlar BULUNDURABİLİRSE de diğer tüm cihaz uygulamaları android.webkit.Webview API'sinin eksiksiz bir uygulamasını ZORUNLU KILINACAK.
android.software.webview platform özelliği, android.webkit.WebView API'nin tam bir uygulamasını sağlayan tüm cihazlarda bildirilMELİDİR ve API'nin tam bir uygulamasını içermeyen cihazlarda bildirilMEMELİDİR. Android Açık Kaynak uygulaması, android.webkit.WebView'i [Kaynaklar, 12] uygulamak için Chromium Projesi'ndeki kodu kullanır. Web oluşturma sistemi için kapsamlı bir test paketi geliştirmek mümkün olmadığından cihaz uygulayıcıları, WebView uygulamasında Chromium'un belirli bir yayın derlemesini KULLANMAK ZORUNDADIR. Özellikle:
- Cihaz android.webkit.WebView uygulamaları, Android 5.1 için Android Açık Kaynak Projesi'ndeki Chromium derlemesini temel ALMALIDIR. Bu derleme, WebView için belirli işlev ve güvenlik düzeltmeleri içerir [Kaynaklar, 13].
- WebView tarafından bildirilen kullanıcı aracısı dizesi ŞU biçimde OLMALIDIR:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD)$(WEBVIEW)) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- $(VERSION) dizesinin değeri, android.os.Build.VERSION.RELEASE değerinin aynısı OLMALIDIR.
- $(WEBVIEW) dizesi çıkarılabilir ancak dahil edilirse bunun bir web görünümü olduğunu belirtmek için "; wv" olmalıdır
- $(MODEL) dizenin değeri, android.os.Build.MODEL değerinin aynısı OLMALIDIR.
- $(BUILD) dizesinin değeri, android.os.Build.ID değerinin aynısı OLMALIDIR.
- $(CHROMIUM_VER) dizesinin değeri, yayın öncesi Android Open Source Project'teki Chromium sürümüyle BİÇİMSEL OLARAK aynı olmalıdır.
- Cihaz uygulamaları, kullanıcı aracısı dizesinde Mobil ifadesini EKSİLTİREBİLİR.
WebView bileşeni, mümkün olduğunca çok sayıda HTML5 özelliği için destek İÇERMELİDİR ve desteklediği özellikler HTML5 spesifikasyonuna UYGUN OLMALIDIR [Kaynaklar, 14].
3.4.2. Tarayıcı Uyumluluğu
Android Television, Watch ve Android Automotive uygulamaları tarayıcı uygulamasını EKSİLTİREBİLİR ancak 3.2.3.1 numaralı bölümde açıklanan herkese açık intent kalıplarını DESTEKLEMELİDİR. Diğer tüm cihaz uygulama türleri, genel kullanıcı web tarama deneyimi için bağımsız bir tarayıcı uygulaması İÇERMELİDİR.
Bağımsız tarayıcı, WebKit dışında bir tarayıcı teknolojisine dayalı OLABİLİR. Ancak alternatif bir tarayıcı uygulaması kullanılsa bile üçüncü taraf uygulamalarına sağlanan android.webkit.WebView bileşeni, 3.4.1 numaralı bölümde açıklandığı gibi WebKit'e dayalı OLMALIDIR.
Uygulamalar, bağımsız tarayıcı uygulamasında özel bir kullanıcı aracısı dizesi gönderebilir.
Bağımsız Tarayıcı uygulaması (üst akış WebKit Tarayıcı uygulamasına veya üçüncü taraf bir değişime dayalı olsun), HTML5'in mümkün olduğunca büyük bir kısmını [Kaynaklar, 14] desteklemelidir. Cihaz uygulamalarının en azından HTML5 ile ilişkili aşağıdaki API'lerin her birini desteklemesi GEREKİR:
- application cache/offline operation [Resources, 15]
- <video> etiketi [Kaynaklar, 16]
- geolocation [Resources, 17]
Ayrıca cihaz uygulamaları HTML5/W3C webstorage API'yi [Kaynaklar, 18] destekleMELİ ve HTML5/W3C IndexedDB API'yi [Kaynaklar, 19] destekleMELİDİR. Web geliştirme standartları kuruluşları web depolama yerine IndexedDB'i tercih etmeye başladığından, IndexedDB'in Android'in gelecekteki bir sürümünde zorunlu bir bileşen haline gelmesinin beklendiğini unutmayın.
3.5. API Davranış Uyumluluğu
API türlerinin her birinin (yönetilen, yumuşak, yerel ve web) davranışları, yayın öncesi Android Open Source Project'in tercih edilen uygulamasıyla tutarlı olmalıdır [Kaynaklar, 2]. Uyumluluğun bazı belirli alanları şunlardır:
- Cihazlar, standart bir intent'in davranışını veya anlamını DEĞİŞTİRMEmelidir.
- 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, standart bir iznin anlamını DEĞİŞTİRMEmelidir.
Yukarıdaki listede olası her duruma yer verilmemiştir. Uyumluluk Test Paketi (CTS), platformun önemli bölümlerini davranışsal uyumluluk açısından test eder ancak platformun tamamını test etmez. Android Açık Kaynak Projesi ile davranışsal uyumluluğu sağlamak uygulayıcı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.
3.6. API ad alanları
Android, Java programlama dilinde tanımlanan paket ve sınıf ad alanı kurallarına uyar. Cihaz uygulayıcıları, üçüncü taraf uygulamalarıyla 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 arasında şunlar yer alı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'leri DEĞİŞTİRMEMELİDİR.
- 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 kullanılan "@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'lerde değişiklik YAPMAMALIDIR. Cihaz uygulayıcıları yalnızca dahili değişiklikler YAPABİLİR ancak bu değişikliklerin reklamı YAPILMAMALI veya geliştiricilere başka bir şekilde gösterilMEMELİDİR.
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. Ayrıca, bir cihaz uygulaması standart Android ad alanının dışında özel API'ler içeriyorsa bu API'ler, yalnızca açıkça kullanan uygulamaların artan bellek kullanımından etkilenmesi için bir Android paylaşılan kitaplığına paketlenmelidir (<uses-library> mekanizması aracılığıyla).
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 veya yeni bir API ekleyerek) source.android.com adresini ziyaret edip bu sitedeki bilgilere göre değişiklik ve kod katkıda bulunma sürecine BAŞLAMALIDIR.
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. Çalışma Zamanı Uyumluluğu
Cihaz uygulamaları, tam Dalvik yürütülebilir (DEX) biçimini, Dalvik bayt kodu spesifikasyonunu ve anlamlarını [Kaynaklar, 20] desteklemelidir. Cihaz uygulayıcıları, Dalvik Yürütülebilir Biçimi'nin referans yayın öncesi uygulamasını ve referans uygulamanın paket yönetimi sistemini kullanan ART'yi KULLANMALIDIR.
Cihaz uygulamaları, Dalvik çalışma zamanlarını, belleği yayındaki Android platformuna uygun şekilde ve aşağıdaki tabloda belirtildiği gibi ayıracak şekilde yapılandırmalıdır. (Ekran boyutu ve ekran yoğunluğu tanımları için 7.1.1 numaralı bölüme bakın.)
Aşağıda belirtilen bellek değerlerinin minimum değerler olarak kabul edildiğini ve cihaz uygulamalarının uygulama başına daha fazla bellek ayırabileceğini unutmayın.
Ekran Düzeni | Ekran Yoğunluğu | Minimum Uygulama Belleği |
---|---|---|
küçük/normal | 120 dpi (ldpi) | 32MB |
160 dpi (mdpi) | ||
213 dpi (tvdpi) | 48MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | ||
320 dpi (xhdpi) | 80MB | |
400 dpi (400dpi) | 96MB | |
480 dpi (xxhdpi) | 128MB | |
560 dpi (560dpi) | 192MB | |
640 dpi (xxxhdpi) | 256MB | |
large | 120 dpi (ldpi) | 32MB |
160 dpi (mdpi) | 48MB | |
213 dpi (tvdpi) | 80MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 96MB | |
320 dpi (xhdpi) | 128MB | |
400 dpi (400dpi) | 192MB | |
480 dpi (xxhdpi) | 256MB | |
560 dpi (560dpi) | 384MB | |
640 dpi (xxxhdpi) | 512MB | |
xlarge | 120 dpi (ldpi) | 48MB |
160 dpi (mdpi) | 80MB | |
213 dpi (tvdpi) | 96MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 144MB | |
320 dpi (xhdpi) | 192MB | |
400 dpi (400dpi) | 288MB | |
480 dpi (xxhdpi) | 384MB | |
560 dpi (560dpi) | 576MB | |
640 dpi (xxxhdpi) | 768MB |
3.8. Kullanıcı Arayüzü Uyumluluğu
3.8.1. Başlatıcı (Ana Ekran)
Android, bir başlatıcı uygulaması (ana ekran) ve cihaz başlatıcısının (ana ekran) yerini alacak üçüncü taraf uygulamaları için destek içerir. Üçüncü taraf uygulamalarının cihaz ana ekranını değiştirmesine izin veren cihaz uygulamalarında android.software.home_screen platform özelliği İLANI GEREKİR.
3.8.2. Widget'lar
Widget'lar tüm Android cihaz uygulamalarında isteğe bağlıdır ancak Android el cihazlarında DESTEKLENMELİDİR.
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, 21]. Bu özellik, el cihazı uygulamalarında desteklenmesi önemle ÖNERİLİR. Ana ekrana widget yerleştirmeyi destekleyen cihaz uygulamaları aşağıdaki koşulları karşılamalı ve android.software.app_widgets platform özelliğini desteklediğini beyan etmelidir.
- Cihaz başlatıcılar, uygulama widget'ları için yerleşik destek içermeli ve doğrudan başlatıcıdan uygulama widget'ları eklemek, yapılandırmak, görüntülemek ve kaldırmak için kullanıcı arayüzü olanakları sunmalıdır.
- Cihaz uygulamalarının standart ızgara boyutunda 4x4 widget oluşturabilmesi GEREKİR. Ayrıntılar için Android SDK dokümanlarında yer alan Uygulama Widget'ı Tasarım Kuralları'na [Kaynaklar, 21] bakın.
- Kilit ekranı desteği içeren cihaz uygulamaları, kilit ekranındaki uygulama widget'larını DESTEKLEYEBİLİR.
3.8.3. Bildirimler
Android, geliştiricilerin cihazın donanım ve yazılım özelliklerini kullanarak kullanıcıları önemli etkinliklerden haberdar etmelerine olanak tanıyan API'ler içerir [Kaynaklar, 22].
Bazı API'ler, uygulamaların donanım (özellikle ses, titreşim ve ışık) kullanarak bildirim göndermesine veya dikkat çekmesine olanak tanır. Cihaz uygulamaları, SDK dokümanlarında açıklandığı şekilde ve mümkün olduğunca cihaz uygulaması donanımıyla donanım özelliklerini kullanan bildirimleri DESTEKLEMELİDİR. Örneğin, bir cihaz uygulamasında titreşim varsa titreşim API'leri doğru şekilde uygulanmalıdır. Bir cihaz uygulamasında donanım yoksa ilgili API'ler no-op olarak uygulanmalıdır. Bu davranış 7. bölümde daha ayrıntılı olarak açıklanmıştır.
Ayrıca uygulama, API'lerde [Kaynaklar, 23] veya Durum/Sistem Çubuğu simgesi stil kılavuzunda [Kaynaklar, 24] sağlanan tüm kaynakları (simgeler, animasyon dosyaları vb.) doğru şekilde oluşturmalıdır. Android TV cihazlarda bu, bildirimlerin gösterilmemesini de kapsar. 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.
Android, aşağıdakiler gibi çeşitli bildirimler için destek içerir:
- Zengin bildirimler. Devam eden bildirimler için etkileşimli görüntülemeler.
- Uyarı bildirimleri. Etkileşimli Görüntüler, kullanıcıların mevcut uygulamadan ayrılmadan işlem yapmasına veya reklamı kapatmasına olanak tanır.
- Kilit ekranı bildirimleri. Görünürlük üzerinde ayrıntılı kontrol sunan kilit ekranında gösterilen bildirimler.
Bu tür bildirimler görünür hale getirildiğinde Android cihaz uygulamalarında zengin ve uyarı bildirimleri düzgün şekilde yürütülmeli ve Android API'lerinde [Kaynaklar, 25] belirtildiği şekilde başlık/ad, simge ve metin içermelidir.
Android, uygulamaların (kullanıcı tarafından açıkça etkinleştirildikten sonra) yayınlandıkları veya güncellendikleri sırada tüm bildirimlerin bir kopyasını almasına olanak tanıyan bildirim dinleyici hizmeti API'leri içerir. Cihaz uygulamaları, bildirim nesnesine eklenmiş tüm meta veriler dahil olmak üzere, bu tür yüklü ve kullanıcı tarafından etkinleştirilmiş tüm dinleyici hizmetlerine bildirimleri eksiksiz ve zamanında göndermelidir.
3.8.4. Arat
Android, geliştiricilerin aramayı uygulamalarına dahil etmelerine ve uygulamalarının verilerini küresel sistem aramasında göstermelerine olanak tanıyan API'ler [Kaynaklar, 26] 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 kullanmasına ve ortak küresel arama kullanıcı arayüzüne sonuç sağlamasına olanak tanır.
Android cihaz uygulamalarında, kullanıcı girişine yanıt olarak anlık öneriler sunabilen tek, paylaşılan, sistem genelinde bir arama kullanıcı arayüzü olan genel arama YER ALMALIDIR. 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. Global arama arayüzünü uygulayan cihaz uygulamaları, üçüncü taraf uygulamalarının global arama modunda çalıştırıldığında arama kutusuna öneri eklemesine olanak tanıyan API'leri UYGULAMALIDIR. Bu işlevi kullanan üçüncü taraf uygulaması yüklü değilse varsayılan davranış, web arama motoru sonuçlarını ve önerilerini görüntülemektir.
3.8.5. 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 kullanabilir [Kaynaklar, 27]. 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.6. Temalar
Android, uygulamaların bir etkinliğin veya uygulamanın tamamına stil uygulamak için kullanabileceği bir mekanizma olarak "temalar" sağlar.
Android, Android SDK'sı [Kaynaklar, 28] tarafından tanımlanan Holo tema görünümünü ve tarzını eşleştirmek isteyen uygulama geliştiricilerin kullanabileceği bir "Holo" tema ailesi içerir. Cihaz uygulamalarında, uygulamalara sunulan Holo tema özelliklerinden hiçbirinde DEĞİŞİKLİK YAPILMAMALISDIR [Kaynaklar, 29].
Android, uygulama geliştiricilerin farklı Android cihaz türlerinde tasarım temasının görünümünü ve tarzını eşleştirmek için kullanabileceği tanımlanmış bir stil grubu olarak "Materyal" tema ailesini içerir. Cihaz uygulamalarında "Material" tema ailesi desteklenmeli ve Material tema özelliklerinden veya uygulamalara sunulan öğelerinden hiçbiri değiştirilmemelidir [Kaynaklar, 30].
Android, uygulama geliştiricilerin cihaz uygulayıcısı tarafından tanımlanan cihaz temasının görünümünü ve tarzını eşleştirmek isterse kullanabileceği bir "Cihaz Varsayılan" tema ailesi de içerir. Cihaz uygulamalarında, uygulamalara sunulan Cihaz Varsayılan teması özellikleri DEĞİŞTİRİLEBİLİR [Kaynaklar, 29].
Android, yarı saydam sistem çubuklarına sahip yeni bir varyant temasını destekler. Bu tema, uygulama geliştiricilerin durum ve gezinme çubuğunun arkasındaki alanı uygulama içerikleriyle doldurmasına olanak tanır. Bu yapılandırmada tutarlı bir geliştirici deneyimi sunmak için durum çubuğu simgesi stilinin farklı cihaz uygulamalarında korunması önemlidir. Bu nedenle, Android cihaz uygulamalarında, simge sorunlu bir durumu belirtmediği sürece sistem durumu simgeleri (ör. sinyal gücü ve pil seviyesi) ve sistem tarafından gönderilen bildirimler için beyaz renk KULLANILMALIDIR [Kaynaklar, 29].
3.8.7. 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, 31]. 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, arızalanması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ı çalıştıramaz. Örneğin, bazı canlı duvar kağıtları içeriklerini oluşturmak için OpenGL 2.0 veya 3.x 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ığı şekilde canlı duvar kağıtlarını güvenilir bir şekilde çalıştırabilen cihaz uygulamaları, canlı duvar kağıtlarını UYGULAMALIDIR ve uygulandığında platform özellik işareti android.software.live_wallpaper'ı BİLDİRMELİDİR.
3.8.8. Etkinlik Değiştirme
Son işlev gezinme anahtarı İSTEĞE BAĞLI olduğundan, genel bakış ekranını uygulama şartları Android TV cihazlar ve Android Watch cihazlar için İSTEĞE BAĞLI'dır.
Yukarı akış Android kaynak kodu, görev değiştirme ve kullanıcının uygulamadan en son çıktığı andaki uygulamanın grafik durumunun küçük resmini kullanarak son erişilen etkinlikleri ve görevleri görüntülemek için sistem düzeyinde bir kullanıcı arayüzü olan genel bakış ekranını [Kaynaklar, 32] içerir. 7.2.3 numaralı bölümde ayrıntılı olarak açıklanan son uygulamalar işlevi gezinme anahtarı da dahil olmak üzere cihaz uygulamaları arayüzü değiştirebilir ancak aşağıdaki şartları karşılamalıdır:
- İlişkili son aramaları birlikte hareket eden bir grup olarak GÖSTERMELİDİR.
- En az 20 görüntülenen etkinliği desteklemelidir.
- Bir seferde en az 4 etkinliğin başlığını GÖSTERMELİDİR.
- Son uygulamalarda vurgu rengini, simgesini ve ekran başlığını GÖSTERMELİDİR.
- Ekran sabitleme davranışını [Kaynaklar, 33] uygulamalı ve kullanıcıya özelliği etkinleştirip devre dışı bırakabileceği bir ayarlar menüsü sunmalıdır.
- Kapatma olanağı ("x") gösterilMELİDİR ancak kullanıcı ekranlarla etkileşime geçene kadar bu işlem ertelenebilir.
Cihaz uygulamalarının, genel bakış ekranı için yayın öncesi Android kullanıcı arayüzünü (veya küçük resim tabanlı benzer bir arayüzü) kullanması önemle ÖNERİLİR.
3.8.9. Giriş Yönetimi
Android, Giriş Yönetimi ve üçüncü taraf giriş yöntemi düzenleyicileri için destek içerir [Kaynaklar, 34]. Kullanıcıların cihazda üçüncü taraf giriş yöntemleri kullanmasına izin veren cihaz uygulamalarında android.software.input_methods platform özelliğinin tanımlanması ve Android SDK dokümanlarında tanımlandığı şekilde IME API'lerinin desteklenmesi ZORUNLUDUR.
android.software.input_methods özelliğini açıklayan cihaz uygulamaları, üçüncü taraf giriş yöntemlerini eklemek ve yapılandırmak için kullanıcı tarafından erişilebilir bir mekanizma sağlamalıdır. Cihaz uygulamalarında, android.settings.INPUT_METHOD_SETTINGS intent'ine yanıt olarak ayarlar arayüzü GÖSTERİLMELİDİR.
3.8.10. Kilit Ekranı Medya Denetimi
Android 5.0'den itibaren, uzaktan kumanda istemci API'sinin desteği sonlandırıldı ve medya uygulamalarının kilit ekranında görüntülenen oynatma denetimleriyle entegrasyonuna olanak tanıyan medya bildirimi şablonu [Kaynaklar, 35] tercih edildi. Android Automotive veya Watch uygulaması olmadığı sürece, kilit ekranını destekleyen cihaz uygulamaları MEDYA Bildirimi Şablonu da dahil olmak üzere Kilit Ekranı Bildirimlerini GÖSTERMELİDİR.
3.8.11. Rüyalar
Android, Rüyalar [Kaynaklar, 36] adlı etkileşimli ekran koruyucuları destekler. Rüyalar, bir güç kaynağına bağlı cihaz boştayken veya masaüstü dock'ına yerleştirildiğinde kullanıcıların uygulamalarla etkileşim kurmasına olanak tanır. Android Watch cihazlar, Rüyalar'ı uygulayabilir ancak diğer cihaz uygulama türleri, Rüyalar için destek sunmalı ve kullanıcıların android.settings.DREAM_SETTINGS amacına yanıt olarak Rüyalar'ı yapılandırabileceği bir ayar seçeneği sağlamalıdır.
3.8.12. Konum
Bir cihazda konum koordinatlarını sağlayabilen bir donanım sensörü (ör. GPS) varsa konum modları Ayarlar'daki [Kaynaklar, 37] Konum menüsünde GÖSTERİLMELİDİR.
3.8.13. Unicode ve Yazı Tipi
Android, renkli emoji karakterlerini destekler. Android cihaz uygulamalarında bir IME bulunduğunda cihazlar, Unicode 6.1'de [Kaynaklar, 38] tanımlanan emoji karakterleri için kullanıcıya bir giriş yöntemi SAĞLAMALIDIR. Tüm cihazlar bu emoji karakterlerini renkli glifle oluşturabilmelidir.
Android, farklı kalınlıklara sahip Roboto 2 yazı tipini destekler: sans-serif-ince, sans-serif-ince, sans-serif-orta, sans-serif-siyah, sans-serif-yoğun, sans-serif-yoğun-ince. Bu yazı tiplerinin tümü, cihazda bulunan diller ve Unicode 7.0'ın Latin, Yunanca ve Kiril dilleri için tam kapsamı (Latin A, B, C ve D aralıkları dahil) ve Unicode 7.0'ın para birimi sembolleri bloğundaki tüm karakterler için DAHİL EDİLMELİDİR.
3.9. Cihaz Yönetimi
Android, güvenlik bilincine sahip uygulamaların Android Cihaz Yönetimi API'si [Kaynaklar, 39] aracılığıyla sistem düzeyinde cihaz yönetimi işlevleri (ör. şifre politikalarını uygulama veya uzaktan silme) gerçekleştirmesine olanak tanıyan özellikler içerir. Cihaz uygulamalarında DevicePolicyManager sınıfının bir uygulaması BULUNMASI GEREKİR [Kaynaklar, 40]. PIN (sayısal) veya ŞİFRE (alfanümerik) tabanlı kilit ekranları için destek içeren cihaz uygulamaları, Android SDK dokümanlarında [Kaynaklar, 39] tanımlanan tüm cihaz yönetimi politikalarını desteklemeli ve android.software.device_admin platform özelliğini bildirmelidir.
Cihaz uygulamalarında cihaz yönetimi işlevlerini gerçekleştiren önceden yüklenmiş bir uygulama OLABİLİR ancak bu uygulama, varsayılan cihaz sahibi uygulaması olarak kutudan çıkarıldıktan sonra ayarlanMAMALIDIR [Kaynaklar, 41].
3.10. Erişilebilirlik
Android, engelli kullanıcıların cihazlarında daha kolay gezinmesine yardımcı olan bir erişilebilirlik katmanı sağlar. Ayrıca Android, erişilebilirlik hizmeti uygulamalarının kullanıcı ve sistem etkinlikleri için geri çağırma alması ve metni konuşmaya dönüştürme, dokunma geri bildirimi ve izleme topu/d-pad gezinme gibi alternatif geri bildirim mekanizmaları oluşturmasını sağlayan platform API'leri sağlar [Kaynaklar, 42].
Cihaz uygulamalarında aşağıdaki şartlar geçerlidir:
- Android Automotive uygulamaları, varsayılan Android uygulamasıyla tutarlı bir Android erişilebilirlik çerçevesi uygulaması SAĞLAMALIDIR.
- Cihaz uygulamalarında (Android Automotive hariç) varsayılan Android uygulamasıyla tutarlı bir Android erişilebilirlik çerçevesi uygulaması sağlanmalıdır.
- Cihaz uygulamalarında (Android Automotive hariç) android.accessibilityservice API'leri aracılığıyla üçüncü taraf erişilebilirlik hizmeti uygulamaları desteklenmelidir [Kaynaklar, 43]
- Cihaz uygulamaları (Android Automotive hariç) AccessibilityEvents oluşturmalı ve bu etkinlikleri varsayılan Android uygulamasıyla tutarlı bir şekilde tüm kayıtlı AccessibilityService uygulamalarına göndermelidir.
- Cihaz uygulamalarında (ses çıkışı olmayan Android Automotive ve Android Watch cihazlar hariç), erişilebilirlik hizmetlerini etkinleştirmek ve devre dışı bırakmak için kullanıcının erişebileceği bir mekanizma sağlanmalıdır ve android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent'ine yanıt olarak bu arayüz gösterilmelidir.
Ayrıca, cihaz uygulamalarında cihazda bir erişilebilirlik hizmeti uygulaması sağlanMALI ve kullanıcıların cihaz kurulumu sırasında erişilebilirlik hizmetini etkinleştirebilecekleri bir mekanizma sağlanmalıdır. Erişilebilirlik hizmetinin açık kaynaklı bir uygulamasını Eyes Free projesinden [Kaynaklar, 44] edinebilirsiniz.
3.11. Metin Okuma
Android, uygulamaların metin okuma (TTS) hizmetlerinden yararlanmasına ve servis sağlayıcıların TTS hizmetlerinin uygulamalarını sunmasına olanak tanıyan API'ler içerir [Kaynaklar, 45]. android.hardware.audio.output özelliğini bildiren cihaz uygulamaları, Android TTS çerçevesiyle ilgili bu koşulları karşılamalıdır.
Android Automotive uygulamaları:
- Android TTS çerçeve API'lerini desteklemelidir.
- Üçüncü taraf TTS motorlarının yüklenmesini DESTEKLEYEBİLİR. Destekleniyorsa iş ortakları, kullanıcının sistem düzeyinde kullanmak üzere bir TTS motoru seçmesine olanak tanıyan, kullanıcının erişebileceği bir arayüz SAĞLAMALIDIR.
Diğer tüm cihaz uygulamaları:
- Android TTS çerçeve API'lerini desteklemeli ve cihazda bulunan dilleri destekleyen bir TTS motoru İÇERMELİDİR. Android açık kaynaklı yazılımının, tam özellikli bir TTS motoru uygulaması içerdiğini unutmayın.
- Üçüncü taraf TTS motorlarının yüklenmesini desteklemelidir.
- Kullanıcıların sistem düzeyinde kullanmak üzere bir TTS motoru seçmesine olanak tanıyan, kullanıcıların erişebileceği bir arayüz SAĞLAMALIDIR.
3.12. TV Girişi Çerçevesi
Android Television Giriş Çerçevesi (TIF), canlı içeriklerin Android Television cihazlarına yayınını kolaylaştırır. TIF, Android TV cihazlarını kontrol eden giriş modülleri oluşturmak için standart bir API sağlar. Android TV cihaz uygulamaları, TV Giriş Çerçevesi'ni [Kaynaklar, 46] desteklemelidir.
TIF'yi destekleyen cihaz uygulamaları, android.software.live_tv platform özelliğini İLKLEŞTİRMELİDİR.
4. Uygulama Paketleme Uyumluluğu
Cihaz uygulamalarında, Android ".apk" dosyaları resmi Android SDK'sına [Kaynaklar, 47] dahil olan "aapt" aracı tarafından oluşturulduğu şekilde yüklenip çalıştırılmalıdır.
Cihaz uygulamaları, .apk [Kaynaklar, 48], Android Manifest [Kaynaklar, 49], Dalvik bayt kodu [Kaynaklar, 20] veya RenderScript bayt kodu biçimlerini, bu dosyaların diğer uyumlu cihazlarda düzgün şekilde yüklenmesini ve çalışmasını engelleyecek şekilde UZATMAMALIDIR.
5. Multimedya Uyumluluğu
5.1. Medya codec'leri
Cihaz uygulamalarında, bu dokümanda açıkça izin verildiği durumlar hariç olmak üzere Android SDK dokümanlarında [Kaynaklar, 50] belirtilen temel medya biçimleri desteklenmelidir. Daha açık belirtmek gerekirse, cihaz uygulamalarında aşağıdaki tablolarda tanımlanan ve MediaCodecList [Kaynaklar,112] aracılığıyla bildirilen medya biçimleri, kodlayıcılar, kod çözücüler, dosya türleri ve kapsayıcı biçimleri desteklenmelidir. Cihaz uygulamalarının, CamcorderProfile[Kaynaklar, 113] alanında bildirilen tüm profillerin kodunu çözebilmesi de GEREKİR. Bu codec'lerin tümü, Android Açık Kaynak Projesi'ndeki tercih edilen Android uygulamasında yazılım uygulamaları olarak sağlanır.
Google veya Open Handset Alliance'ın bu codec'lerin üçüncü taraf patentlerinden arındırılmış olduğu yönünde 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 uygulanması için ilgili patent sahiplerinden patent lisansı almaları gerekebileceğini göz önünde bulundurmaları önerilir.
5.1.1. Ses codec'leri
Biçim/Codec | Kodlayıcı | Kod çözücü | Ayrıntılar | Desteklenen dosya türleri/kapsayıcı biçimleri |
---|---|---|---|---|
MPEG-4 AAC Profili
(AAC LC) |
GEREKLİ1 | Zorunlu | 8 ila 48 kHz arasındaki standart örnekleme hızlarına sahip mono/stereo/5.0/5.12 içerikleri desteklenir. |
|
MPEG-4 HE AAC Profili (AAC+) | GEREKLİ1 (Android 4.1+) |
Zorunlu | 16 ila 48 kHz arasındaki standart örnekleme hızlarına sahip mono/stereo/5.0/5.12 içerikleri desteklenir. | |
MPEG-4 HE AACv2
Profil (gelişmiş AAC+) |
Zorunlu | 16 ila 48 kHz arasındaki standart örnekleme hızlarına sahip mono/stereo/5.0/5.12 içerikleri desteklenir. | ||
AAC ELD (gelişmiş düşük gecikmeli AAC) | GEREKLİ1
(Android 4.1+) |
Zorunlu
(Android 4.1+) |
16 ila 48 kHz arasındaki standart örnekleme hızlarına sahip mono/stereo içerikler desteklenir. | |
AMR-NB | ZORUNLU3 | ZORUNLU3 | 8 kHz'te örneklenmiş 4,75 ila 12,2 Kb/sn | 3GPP (.3gp) |
AMR-WB | ZORUNLU3 | ZORUNLU3 | 16 kHz'te örneklenen 6,60 kbit/sn ile 23,85 kbit/sn arasında 9 hız | |
FLAC | GEREKLİ (Android 3.1+) |
Mono/stereo (çok kanallı değil). 48 kHz'e kadar örnek hızları (ancak 48 ila 44,1 kHz aşağı örnekleyici düşük geçiren filtre içermediğinden, 44,1 kHz çıkışlı cihazlarda 44,1 kHz'e kadar örnek hızları önerilir). 16 bit önerilir; 24 bit için dithering uygulanmaz. | Yalnızca FLAC (.flac) | |
MP3 | Zorunlu | Mono/Stereo 8-320 Kb/sn sabit (CBR) veya değişken bit hızı (VBR) | MP3 (.mp3) | |
MIDI | Zorunlu | MIDI Türü 0 ve 1. DLS 1 ve 2 sürümü. XMF ve Mobil XMF. RTTTL/RTX, OTA ve iMelody melodi biçimleri için destek |
|
|
Vorbis | Zorunlu |
|
||
PCM/WAVE | GEREKLİ4 (Android 4.1+) |
Zorunlu | 16 bit doğrusal PCM (donanım sınırına kadar hız). Cihazlar, 8.000, 11.025, 16.000 ve 44.100 Hz frekanslarında ham PCM kaydı için örnekleme hızlarını DESTEKLEMELİDİR. | WAVE (.wav) |
Opus | GEREKLİ (Android 5.0 ve sonraki sürümler) |
Matroska (.mkv) |
1 android.hardware.microphone özelliğini tanımlayan cihaz uygulamaları için gereklidir ancak Android Watch cihaz uygulamaları için isteğe bağlıdır.
2 Yalnızca 5.0/5.1 içeriğinin aşağı karıştırılması gerekir; 2'den fazla kanal kaydetme veya oluşturma isteğe bağlıdır.
3 Android el cihazı uygulamaları için gereklidir.
4 Android Watch cihaz uygulamaları da dahil olmak üzere android.hardware.microphone özelliğini tanımlayan cihaz uygulamaları için gereklidir.
5.1.2. Resim codec'leri
Biçim/Codec | Kodlayıcı | Kod çözücü | Ayrıntılar | Desteklenen dosya türleri/kapsayıcı biçimleri |
---|---|---|---|---|
JPEG | Zorunlu | Zorunlu | Taban+aşamalı | JPEG (.jpg) |
GIF | Zorunlu | GIF (.gif) | ||
PNG | Zorunlu | Zorunlu | PNG (.png) | |
BMP | Zorunlu | BMP (.bmp) | ||
WebP | Zorunlu | Zorunlu | WebP (.webp) |
5.1.3. Video codec'leri
Video codec'leri, Android Watch cihaz uygulamalarında isteğe bağlıdır.
Biçim/Codec | Kodlayıcı | Kod çözücü | Ayrıntılar | Desteklenen Dosya Türleri/ Kapsayıcı Biçimleri |
---|---|---|---|---|
H.263 | GEREKLİ1 | ZORUNLU2 |
|
|
H.264 AVC | ZORUNLU2 | ZORUNLU2 | Ayrıntılar için 5.2 ve 5.3 bölümlerine bakın. |
|
H.265 HEVC | GEREKLİ5 | Ayrıntılar için 5.3 numaralı bölüme bakın. | MPEG-4 (.mp4) | |
MPEG-4 SP | ZORUNLU2 | 3GPP (.3gp) | ||
VP83 | ZORUNLU2
(Android 4.3 ve sonraki sürümler) |
ZORUNLU2
(Android 2.3.3+) |
Ayrıntılar için 5.2 ve 5.3 bölümlerine bakın. |
|
VP9 | GEREKLİ2 (Android 4.4 ve sonraki sürümler) |
Ayrıntılar için 5.3 numaralı bölüme bakın. |
|
1 Kamera donanımı içeren ve android.hardware.camera veya android.hardware.camera.front tanımlayan cihaz uygulamaları için gereklidir.
2 Android Watch cihazları dışındaki cihaz uygulamaları için gereklidir.
3 Web video yayını ve görüntülü konferans hizmetlerinin kabul edilebilir kalitede olması için cihaz uygulamalarında [Kaynaklar, 51] bölümündeki koşulları karşılayan bir donanım VP8 codec'i KULLANILMALIDIR.
4 Cihaz uygulamaları Matroska WebM dosyalarının yazılmasını DESTEKLEMELİDİR.
5 Android Automotive için kesinlikle önerilir, Android Watch için isteğe bağlıdır ve diğer tüm cihaz türleri için gereklidir.
5.2. Video Kodlama
Video codec'leri, Android Watch cihaz uygulamalarında isteğe bağlıdır.
H.264 codec desteğine sahip Android cihaz uygulamaları, Temel Profil Seviye 3'ü ve aşağıdaki SD (Standart Çözünürlük) video kodlama profillerini destekleMELİDİR ve Ana Profil Seviye 4'ü ve aşağıdaki HD (Yüksek Çözünürlük) video kodlama profillerini DESTEKLEMELİDİR. Android TV cihazlarda HD 1080p videoyu 30 FPS'de kodlamak önemle ÖNERİLİR.
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p1 | HD 1080p1 | |
---|---|---|---|---|
Video çözünürlüğü | 320 x 240 piksel | 720 x 480 piksel | 1280 x 720 piksel | 1920 x 1080 piksel |
Video kare hızı | 20 fps | 30 fps | 30 fps | 30 fps |
Video bit hızı | 384 Kb/sn | 2 Mb/sn | 4 Mb/sn | 10 Mb/sn |
1 Donanım tarafından desteklendiğinde ancak Android TV cihazları için önemle ÖNERİLİR.
VP8 codec desteğine sahip Android cihaz uygulamaları SD video kodlama profillerini DESTEKLEMELİ ve aşağıdaki HD (HD) video kodlama profillerini DESTEKLEMELİDİR.
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p1 | HD 1080p1 | |
---|---|---|---|---|
Video çözünürlüğü | 320 x 180 piksel | 640 x 360 piksel | 1280 x 720 piksel | 1920 x 1080 piksel |
Video kare hızı | 30 fps | 30 fps | 30 fps | 30 fps |
Video bit hızı | 800 Kb/sn | 2 Mb/sn | 4 Mb/sn | 10 Mb/sn |
1 Donanım tarafından desteklendiğinde.
5.3. Video kod çözme
Video codec'leri, Android Watch cihaz uygulamalarında isteğe bağlıdır.
Cihaz uygulamaları, standart Android API'leri aracılığıyla geliştiricilere sunulan tüm VP8, VP9, H.264 ve H.265 codec'leri için aynı akış içinde dinamik video çözünürlüğü geçişini DESTEKLEMELİDİR.
H.264 kod çözücüleri olan Android cihaz uygulamaları, Temel Profil 3. Seviye ve aşağıdaki SD video kod çözme profillerini destekleMELİDİR ve HD kod çözme profillerini DESTEKLEMELİDİR. Android TV cihazları, Yüksek Profil 4.2 Seviyesi ve HD 1080p kod çözme profilini DESTEKLEMELİDİR.
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p1 | HD 1080p1 | |
---|---|---|---|---|
Video çözünürlüğü | 320 x 240 piksel | 720 x 480 piksel | 1280 x 720 piksel | 1920 x 1080 piksel |
Video kare hızı | 30 fps | 30 fps | 30 fps / 60 fps2 | 30 fps / 60 fps2 |
Video bit hızı | 800 Kb/sn | 2 Mb/sn | 8 Mb/sn | 20 Mb/sn |
1 Android TV cihaz uygulamaları için gereklidir ancak diğer cihaz türleri için yalnızca donanım tarafından desteklendiğinde gereklidir.
2 Android TV cihaz uygulamaları için gereklidir.
5.1.3 numaralı bölümde açıklandığı gibi VP8 codec'ini destekleyen Android cihaz uygulamaları aşağıdaki SD kod çözme profillerini DESTEKLEMELİ ve HD kod çözme profillerini DEĞERLENDİRMELİDİR. Android TV cihazları HD 1080p kod çözme profilini DESTEKLEMELİDİR.
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p1 | HD 1080p1 | |
---|---|---|---|---|
Video çözünürlüğü | 320 x 180 piksel | 640 x 360 piksel | 1280 x 720 piksel | 1920 x 1080 piksel |
Video kare hızı | 30 fps | 30 fps | 30 fps / 60 fps2 | 30 / 60 fps2 |
Video bit hızı | 800 Kb/sn | 2 Mb/sn | 8 Mb/sn | 20 Mb/sn |
1 Android TV cihaz uygulamaları için gereklidir ancak diğer cihaz türleri için yalnızca donanım tarafından desteklendiğinde gereklidir.
2 Android TV cihaz uygulamaları için gereklidir.
Android cihaz uygulamaları, 5.1.3 numaralı bölümde açıklandığı gibi VP9 codec'ini desteklerken aşağıdaki SD video kod çözme profillerini DESTEKLEMELİ ve HD kod çözme profillerini DESTEKLEMELİDİR. Android TV cihazların HD 1080p kod çözme profilini desteklemesi önemle ÖNERİLİR ve UHD kod çözme profilini DESTEKLEMELİDİR. UHD video kod çözme profili destekleniyorsa 8 bit renk derinliğini DE desteklemelidir.
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p 1 | HD 1080p 2 | UHD 2 | |
---|---|---|---|---|---|
Video çözünürlüğü | 320 x 180 piksel | 640 x 360 piksel | 1280 x 720 piksel | 1920 x 1080 piksel | 3.840 x 2.160 piksel |
Video kare hızı | 30 fps | 30 fps | 30 fps | 30 fps | 30 fps |
Video bit hızı | 600 Kb/sn | 1,6 Mb/sn | 4 Mb/sn | 10 Mb/sn | 20 Mb/sn |
1 Android TV cihaz uygulamaları için gereklidir ancak diğer cihaz türleri için yalnızca donanım tarafından desteklendiğinde gereklidir.
2 Donanım tarafından desteklendiğinde Android TV cihaz uygulamaları için KESİNLİKLE ÖNERİLİR.
Android cihaz uygulamaları, 5.1.3 numaralı bölümde açıklandığı şekilde H.265 codec'ini desteklerken ana profil düzey 3 ana katmanını ve aşağıdaki SD video kod çözme profillerini destekleMELİDİR ve HD kod çözme profillerini DESTEKLEMELİDİR. Android TV cihazları, Main10 5. Katman Ana Katman profilini ve UHD kod çözme profilini DESTEKLEMELİDİR. Android TV cihazların HD 1080p kod çözme profilini desteklemesi önemle ÖNERİLİR. HD 1080p kod çözme profili destekleniyorsa Ana Profil Seviyesi 4.1 Ana katmanı desteklemelidir
SD (Düşük kalite) | SD (Yüksek kalite) | HD 720p 1 | HD 1080p 2 | UHD 2 | |
---|---|---|---|---|---|
Video çözünürlüğü | 352 x 288 piksel | 640 x 360 piksel | 1280 x 720 piksel | 1920 x 1080 piksel | 3.840 x 2.160 piksel |
Video kare hızı | 30 fps | 30 fps | 30 fps | 30 fps | 30 fps |
Video bit hızı | 600 Kb/sn | 1,6 Mb/sn | 4 Mb/sn | 10 Mb/sn | 20 Mb/sn |
1 Android TV cihaz uygulaması için gereklidir ancak diğer cihaz türleri için yalnızca donanım tarafından desteklendiğinde gereklidir.
2 Donanım tarafından desteklendiğinde Android TV cihaz uygulamaları için önemle ÖNERİLİR.
5.4. Ses Kaydetme
Bu bölümde belirtilen şartlardan bazıları Android 4.3'ten beri "OLMALI" olarak belirtilse de gelecekteki bir sürümün Uyumluluk Tanımı'nda bu şartlar "OLMALIDIR" olarak değiştirilmesi planlanmaktadır. Mevcut ve yeni Android cihazların, "OLMALIDIR" olarak belirtilen bu koşulları karşılaması ŞİDDETLE ÖNERİLİR. Aksi takdirde, gelecekteki sürüme yükseltildiğinde Android uyumluluğu elde edemezler.
5.4.1. Ham Ses Kaydı
android.hardware.microphone özelliğini açıklayan cihaz uygulamaları, aşağıdaki özelliklere sahip ham ses içeriğinin yakalanmasına izin VERMELİDİR:
- Biçim: Doğrusal PCM, 16 bit
- Örnekleme hızları: 8000, 11025, 16000, 44100
- Kanallar: Mono
android.hardware.microphone özelliğini açıklayan cihaz uygulamaları, aşağıdaki özelliklere sahip ham ses içeriğinin yakalanmasına İZİN VERMELİDİR:
- Biçim: Doğrusal PCM, 16 bit
- Örnekleme hızları: 22050, 48000
- Kanallar: Stereo
5.4.2. Ses Tanıma için Kayıt
Yukarıdaki kayıt özelliklerine ek olarak, bir uygulama android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION ses kaynağını kullanarak ses akışı kaydetmeye başladığında:
- Cihaz, frekansla ilgili olarak yaklaşık olarak düz bir genlik özelliği GÖSTERMELİDİR: Özellikle 100 Hz ile 4.000 Hz arasında ±3 dB.
- Ses giriş hassasiyeti, 1000 Hz'de 90 dB ses gücü düzeyi (SPL) kaynağının 16 bitlik örnekler için 2500 RMS vermesi şekilde AYARLANMALIDIR.
- PCM genlik seviyeleri, mikrofondaki 90 dB SPL referans alınarak -18 dB ile +12 dB arasında en az 30 dB aralığındaki giriş SPL değişikliklerini doğrusal olarak İZLEMEYECEK.
- Toplam harmonik bozulma, mikrofonda 90 dB SPL giriş seviyesinde 1 kHz için% 1'den az OLMALIDIR.
- Gürültü azaltma işlemi (varsa) DEVRE DIŞI BIRAKILMALIDIR.
- Varsa otomatik kazanç denetimi DEVRE DIŞI BIRAKILMALIDIR
Platform, konuşma tanıma için ayarlanmış gürültü azaltma teknolojilerini destekliyorsa efekt, android.media.audiofx.NoiseSuppressor API'den kontrol edilebilir OLMALIDIR. Ayrıca, gürültü azaltıcının efekt tanımlayıcısı için UUID alanı, gürültü azaltma teknolojisinin her bir uygulamasını benzersiz şekilde tanımlamalıdır.
5.4.3. Oynatma işlemini yeniden yönlendirmek için yakalama
android.media.MediaRecorder.AudioSource sınıfı, REMOTE_SUBMIX ses kaynağını içerir. android.hardware.audio.output bildiren cihazlar, REMOTE_SUBMIX ses kaynağını düzgün bir şekilde uygulamalıdır. Böylece, bir uygulama bu ses kaynağından kayıt yapmak için android.media.AudioRecord API'yi kullandığında aşağıdakiler hariç tüm ses akışlarının bir karışımını yakalayabilir:
- STREAM_RING
- STREAM_ALARM
- STREAM_NOTIFICATION
5.5. Ses Çalma
android.hardware.audio.output özelliğini açıklayan cihaz uygulamaları BU BÖLÜMDEKİ şartlara UYGUN OLMALIDIR.
5.5.1. Ham Ses Oynatma
Cihaz, aşağıdaki özelliklere sahip ham ses içeriğinin oynatılmasına izin VERMELİDİR:
- Biçim: Doğrusal PCM, 16 bit
- Örnekleme hızları: 8000, 11025, 16000, 22050, 32000, 44100
- Kanallar: Mono, Stereo
Cihaz, aşağıdaki özelliklere sahip ham ses içeriğinin oynatılmasına İZİN VERMELİDİR:
- Örnekleme hızları: 24000, 48000
5.5.2. Ses Efektleri
Android, cihaz uygulamaları için ses efektleri API'si sağlar [Kaynaklar, 52]. android.hardware.audio.output özelliğini açıklayan cihaz uygulamaları:
- AudioEffect alt sınıfları Equalizer ve LoudnessEnhancer aracılığıyla kontrol edilebilen EFFECT_TYPE_EQUALIZER ve EFFECT_TYPE_LOUDNESS_ENHANCER uygulamalarını desteklemelidir.
- Visualizer sınıfı aracılığıyla kontrol edilebilen görselleştirici API uygulamasını DESTEKLEMELİDİR.
- BassBoost, EnvironmentalReverb, PresetReverb ve Virtualizer AudioEffect alt sınıfları aracılığıyla kontrol edilebilen EFFECT_TYPE_BASS_BOOST, EFFECT_TYPE_ENV_REVERB, EFFECT_TYPE_PRESET_REVERB ve EFFECT_TYPE_VIRTUALIZER uygulamalarını DESTEKLEMELİDİR.
5.5.3. Ses Çıkışı Ses Seviyesi
Android TV cihaz uygulamaları, sıkıştırılmış ses aktarma çıkışı (cihaz üzerinde ses kod çözme işlemi yapılmaz) hariç olmak üzere, desteklenen çıkışlarda sistem ana ses düzeyi ve dijital ses çıkışı ses düzeyi azaltma desteği içermelidir.
5.6. Ses gecikmesi
Ses gecikmesi, ses sinyalinin bir sistemden geçerken yaşadığı zaman gecikmesidir. Birçok uygulama sınıfı, gerçek zamanlı ses efektleri elde etmek için kısa gecikme sürelerinden yararlanır.
Bu bölümde aşağıdaki tanımlar kullanılmaktadır:
- output latency. Bir uygulamanın PCM kodlu veri çerçevesi yazması ile ilgili sesin harici bir dinleyici tarafından duyulabilmesi veya bir dönüştürücü tarafından gözlemlenebilmesi arasındaki aralık.
- Soğuk çıkış gecikmesi. Ses çıkış sistemi istek öncesinde boşta ve kapalıyken ilk karenin çıkış gecikmesi.
- sürekli çıkış gecikmesi. Cihaz ses çaldıktan sonra sonraki kareler için çıkış gecikmesi.
- giriş gecikmesi. Cihazın harici bir ses algılaması ile uygulamanın ilgili PCM kodlu veri çerçevesini okuması arasındaki aralık.
- Soğuk giriş gecikmesi. Ses giriş sistemi istek öncesinde boşta ve kapalıyken, kaybedilen giriş süresinin ve ilk karenin giriş gecikmesinin toplamı.
- sürekli giriş gecikmesi. Cihaz ses kaydederken sonraki kareler için giriş gecikmesi.
- Soğuk çıkış jitter'i. Soğuk çıkış gecikmesi değerlerinin ayrı ölçümleri arasındaki varyans.
- Soğuk giriş jitter'i. Soğuk giriş gecikmesi değerlerinin ayrı ölçümleri arasındaki varyans.
- sürekli gidiş dönüş gecikmesi. Sürekli giriş gecikmesinin artı sürekli çıkış gecikmesinin artı 5 milisaniyenin toplamı.
- OpenSL ES PCM arabellek sırası API'si. Android NDK'daki PCM ile ilgili OpenSL ES API'leri grubu; NDK_root/docs/opensles/index.html adresine bakın.
android.hardware.audio.output özelliğini açıklayan cihaz uygulamaları, aşağıdaki ses çıkışı koşullarını karşılamalı veya aşmalıdır:
- 100 milisaniye veya daha az soğuk çıkış gecikmesi
- 45 milisaniye veya daha az sürekli çıkış gecikmesi
- Soğuk çıkış jitter'ini en aza indirme
Bir cihaz uygulaması, OpenSL ES PCM arabellek sırası API'si kullanılırken yapılan ilk kalibrasyondan sonra bu bölümün şartlarını karşılıyorsa en az bir desteklenen ses çıkış cihazında sürekli çıkış gecikmesi ve soğuk çıkış gecikmesi için android.content.pm.PackageManager sınıfı aracılığıyla android.hardware.audio.low_latency özelliğini bildirerek düşük gecikmeli ses desteğini bildirebilir [Kaynaklar, 53]. Buna karşılık, cihaz uygulaması bu koşulları karşılamıyorsa düşük gecikmeli ses desteğini bildirMEMELİDİR.
android.hardware.microphone içeren cihaz uygulamaları BU giriş ses koşullarını karşılamalıdır:
- 100 milisaniye veya daha az soğuk giriş gecikmesi
- 30 milisaniye veya daha az sürekli giriş gecikmesi
- 50 milisaniye veya daha az sürekli gidiş dönüş gecikmesi
- Soğuk giriş jitter'ini en aza indirme
5.7. Ağ Protokolleri
Cihazlar, Android SDK dokümanlarında [Kaynaklar, 50] belirtildiği gibi ses ve video oynatma için medya ağı protokollerini DESTEKLEMELİDİR. Özellikle, cihazlar aşağıdaki medya ağı protokollerini DESTEKLEMELİDİR:
- RTSP (RTP, SDP)
- HTTP(S) aşamalı akış
- HTTP(S) Canlı Yayın taslak protokolü, 3. sürüm [Kaynaklar, 54]
5.8. Secure Media
Güvenli video çıkışını destekleyen ve güvenli yüzeyleri destekleyebilecek cihaz uygulamaları Display.FLAG_SECURE için destek beyan etmelidir. Display.FLAG_SECURE desteğini beyan eden cihaz uygulamaları, kablosuz ekran protokolünü destekliyorsa bağlantıyı Miracast kablosuz ekranlar için HDCP 2.x veya sonraki sürümler gibi kriptografik olarak güçlü bir mekanizmayla GÜVENLİ HALE GETİRMELİDİR. Benzer şekilde, kablolu harici ekranı destekliyorsa cihaz uygulamalarının HDCP 1.2 veya daha yeni sürümleri desteklemesi GEREKİR. Android TV cihaz uygulamaları, 4K çözünürlüğü destekleyen cihazlar için HDCP 2.2'yi, daha düşük çözünürlükler için ise HDCP 1.4 veya üstünü desteklemelidir. Yukarı akış Android açık kaynak uygulaması, bu koşulu karşılayan kablosuz (Miracast) ve kablolu (HDMI) ekranlar için destek içerir.
6. Geliştirici Araçları ve Seçenekleri Uyumluluğu
6.1. Geliştirici araçları
Cihaz uygulamaları, Android SDK'sında sağlanan Android Geliştirici Araçları'nı DESTEKLEMELİDİR. Android uyumlu cihazlar ŞUNLARLA uyumlu OLMALIDIR:
- Android Debug Bridge (adb) [Kaynaklar, 55]
Cihaz uygulamaları, dumpsys [Kaynaklar, 56] dahil olmak üzere Android SDK'sında belirtilen tüm adb işlevlerini DESTEKLEMELİDİR. Cihaz tarafındaki adb daemon'ı varsayılan olarak etkin OLMAMALI ve Android Hata Ayıklama Köprüsü'nü açmak için kullanıcının erişebileceği bir mekanizma OLMALİDİR. Bir cihaz uygulaması USB çevre birimi modunu atlıyorsa Android Hata Ayıklama Köprüsü'nü yerel alan ağı (ör. Ethernet veya 802.11) üzerinden UYGULAMASI GEREKİR.
Android, güvenli adb desteği içerir. Güvenli adb, kimliği doğrulanmış bilinen ana makinelerde adb'yi etkinleştirir. Cihaz uygulamaları güvenli adb'yi DESTEKLEMELİDİR.
- Dalvik Hata Ayıklama İzleyici Hizmeti (ddms) [Kaynaklar, 57]
Cihaz uygulamaları, Android SDK'da belirtildiği gibi tüm ddms özelliklerini DESTEKLEMELİDİR. ddms, adb kullandığından ddms 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 [Resources, 58]
Cihaz uygulamalarında Monkey çerçevesi ZORUNLU KILINACAK ve uygulamaların kullanabileceği şekilde kullanıma sunulacaktır.
- SysTrace [Resources, 59]
Cihaz uygulamaları, Android SDK'sında belirtildiği gibi systrace aracını desteklemelidir. Systrace varsayılan olarak etkin olmamalıdır ve Systrace'i etkinleştirmek için kullanıcının erişebileceği bir mekanizma OLMALIDIR.
Linux tabanlı sistemlerin ve Apple Macintosh sistemlerinin çoğu, ek destek olmadan standart Android SDK araçlarını kullanarak Android cihazları tanır. Ancak Microsoft Windows sistemlerinde genellikle yeni Android cihazlar için sürücü gerekir. (Örneğin, yeni tedarikçi firma kimlikleri ve bazen yeni cihaz kimlikleri için Windows sistemlerinde özel USB sürücüleri gerekir.) Standart Android SDK'sında sağlandığı şekilde bir cihaz uygulaması adb aracı tarafından tanınmıyorsa cihaz uygulayıcıları, geliştiricilerin adb protokolünü kullanarak cihaza bağlanmasına olanak tanıyan Windows sürücüleri SAĞLAMALIDIR. Bu sürücüler, Windows XP, Windows Vista, Windows 7, Windows 8 ve Windows 9 için hem 32 bit hem de 64 bit sürümlerinde sağlanmalıdır.
6.2. Geliştirici seçenekleri
Android, geliştiricilerin uygulama geliştirmeyle ilgili ayarları yapılandırmalarına yönelik destek içerir. Cihaz uygulamaları, uygulama geliştirmeyle ilgili ayarları göstermek için android.settings.APPLICATION_DEVELOPMENT_SETTINGS intent'ini UYGUNLAMALIDIR [Kaynaklar, 60]. Yukarı akış Android uygulaması, Geliştirici Seçenekleri menüsünü varsayılan olarak gizler ve kullanıcıların Ayarlar > Cihaz Hakkında > Derleme Numarası menü öğesine yedi (7) kez bastıktan sonra Geliştirici Seçenekleri'ni başlatmasını sağlar. Cihaz uygulamaları, Geliştirici Seçenekleri için tutarlı bir deneyim sunmalıdır. Daha açık belirtmek gerekirse, cihaz uygulamalarında Geliştirici Seçenekleri varsayılan olarak gizlenmeli ve Geliştirici Seçenekleri'ni etkinleştirmek için yayın öncesi Android uygulamasıyla tutarlı bir mekanizma sağlanmalıdır.
7. Donanım Uyumluluğu
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 açıklandığı ş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şen API'leri için tam sınıf tanımları (SDK tarafından belirtildiği şekilde) yine de sunulmalıdır.
- API'nin davranışları makul bir şekilde no-op 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ı ZORUNLU KILINCA dönmelidir.
- API yöntemleri, SDK dokümanlarında belirtilmeyen istisnalar İÇERMEMELİ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 yapılmaması olarak uygulanmalıdır.
Cihaz uygulamaları, aynı derleme parmak izi için android.content.pm.PackageManager sınıfındaki getSystemAvailableFeatures() ve hasSystemFeature(String) yöntemleri aracılığıyla tutarlı bir şekilde doğru donanım yapılandırma bilgilerini raporlamalıdır. [Resources, 53]
7.1. Görüntü ve Grafikler
Android, üçüncü taraf uygulamalarının çeşitli donanım yapılandırmalarında sorunsuz şekilde çalışmasını sağlamak için uygulama öğelerini ve kullanıcı arayüzü düzenlerini cihaza uygun şekilde otomatik olarak ayarlayan özellikler içerir [Kaynaklar, 61]. Cihazlar, bu bölümde ayrıntılı olarak açıklandığı gibi bu API'leri ve davranışları doğru şekilde uygulamalıdır.
Bu bölümdeki şartlarda referans verilen birimler aşağıdaki şekilde tanımlanır:
- Fiziksel çapraz boyut. Ekranın aydınlatılmış kısmının iki karşıt köşesi arasındaki mesafe (inç cinsinden).
- inç başına nokta sayısı (dpi). 1 inçlik doğrusal yatay veya dikey bir açıklık tarafından kapsanan piksel sayısı. dpi değerlerinin listelendiği yerlerde hem yatay hem de dikey dpi aralığa uygun olmalıdır.
- en boy oranı. Uzun boyuttaki piksellerin ekranın kısa boyutuna oranı. Örneğin, 480x854 piksel boyutunda bir ekranın oranı 854/480 = 1, 779 veya yaklaşık olarak "16:9" olur.
- yoğunluktan bağımsız piksel (dp) 160 dpi ekrana göre normalleştirilmiş sanal piksel birimi. Şu şekilde hesaplanır: piksel = dp * (yoğunluk/160).
7.1.1. Ekran Yapılandırması
7.1.1.1. Ekran Boyutu
Android Watch cihazlar (2. bölümde ayrıntılı olarak açıklanmıştır) bu bölümde açıklandığı gibi daha küçük ekran boyutlarına sahip OLABİLİR.
Android kullanıcı arayüzü çerçevesi çeşitli ekran boyutlarını destekler ve uygulamaların SCREENLAYOUT_SIZE_MASK ile android.content.res.Configuration.screenLayout üzerinden cihaz ekran boyutunu ("ekran düzeni" olarak da bilinir) sorgulamasına olanak tanır. Cihaz uygulamalarında, Android SDK dokümanlarında [Kaynaklar, 61] tanımlanan ve yayın öncesi Android platformu tarafından belirlenen doğru ekran boyutu bildirilmelidir. Daha açık belirtmek gerekirse, cihaz uygulamalarında aşağıdaki mantıksal yoğunluktan bağımsız piksel (dp) ekran boyutlarına göre doğru ekran boyutu bildirilmelidir.
- Android Watch cihazı olmadığı sürece cihazların ekran boyutu en az 426 dp x 320 dp ("küçük") olmalıdır.
- Ekran boyutunu "normal" olarak bildiren cihazların ekran boyutu en az 480 dp x 320 dp olmalıdır.
- Ekran boyutunu "büyük" olarak bildiren cihazların ekran boyutu en az 640 dp x 480 dp OLMALIDIR.
- Ekran boyutunu "çok büyük" olarak bildiren cihazların ekran boyutu en az 960 dp x 720 dp OLMALIDIR.
Ayrıca,
- Android Watch cihazlarda, fiziksel diyagonal boyutu 1,1 ila 2,5 inç arasında olan bir ekran OLMALIDIR.
- Fiziksel olarak entegre ekrana sahip diğer Android cihaz uygulamalarında, fiziksel diyagonal boyutu en az 2, 5 inç olan bir ekran OLMALIDIR.
Cihazlar, bildirilen ekran boyutunu hiçbir zaman DEĞİŞTİREMEZ.
Uygulamalar, isteğe bağlı olarak AndroidManifest.xml dosyasındaki <supports-screens> özelliği aracılığıyla hangi ekran boyutlarını desteklediklerini belirtir. Cihaz uygulamalarında, Android SDK dokümanlarında açıklandığı gibi, uygulamaların küçük, normal, büyük ve çok büyük ekranlar için belirtilen desteği doğru şekilde dikkate ALINMALIDIR.
7.1.1.2. Ekran En Boy Oranı
Android Watch cihazların en boy oranı 1,0 (1:1) OLABİLİR.
Ekran en boy oranı 1,3333 (4:3) ile 1,86 (yaklaşık 16:9) arasında bir değer OLMALIDIR. Ancak Android Watch cihazlarda 1,0 (1:1) en boy oranı OLABİLİR. Bunun nedeni, bu tür bir cihaz uygulamasında android.content.res.Configuration.uiMode olarak UI_MODE_TYPE_WATCH değerinin kullanılmasıdır.
7.1.1.3. Ekran Yoğunluğu
Android kullanıcı arayüzü çerçevesi, uygulama geliştiricilerin uygulama kaynaklarını hedeflemesine yardımcı olmak için bir dizi standart mantıksal yoğunluk tanımlar. Cihaz uygulamaları, android.util.DisplayMetrics API'leri aracılığıyla aşağıdaki mantıksal Android çerçeve yoğunluklarından yalnızca birini bildirmeli, uygulamaları bu standart yoğunlukta yürütmeli ve varsayılan ekran için değeri hiçbir zaman değiştirmemelidir.
- 120 dpi (ldpi)
- 160 dpi (mdpi)
- 213 dpi (tvdpi)
- 240 dpi (hdpi)
- 280 dpi (280dpi)
- 320 dpi (xhdpi)
- 400 dpi (400dpi)
- 480 dpi (xxhdpi)
- 560 dpi (560dpi)
- 640 dpi (xxxhdpi)
Cihaz uygulamaları, mantıksal yoğunluk bildirilen ekran boyutunu desteklenen minimum boyutun altına düşürmediği sürece, ekranın fiziksel yoğunluğuna sayısal olarak en yakın standart Android çerçeve yoğunluğunu tanımlamalıdır. Fiziksel yoğunluğa sayısal olarak en yakın standart Android çerçeve yoğunluğu, desteklenen en küçük uyumlu ekran boyutundan (320 dp genişlik) daha küçük bir ekran boyutuna neden oluyorsa cihaz uygulamaları bir sonraki en düşük standart Android çerçeve yoğunluğunu bildirmelidir.
7.1.2. Görüntülü Reklam Metrikleri
Cihaz uygulamaları, android.util.DisplayMetrics [Kaynaklar, 62] içinde tanımlanan tüm ekran metrikleri için doğru değerleri bildirmeli ve varsayılan ekran olarak yerleşik veya harici ekranın kullanılıp kullanılmadığından bağımsız olarak aynı değerleri bildirmelidir.
7.1.3. Ekran Yönlendirme
Cihazlar, destekledikleri ekran yönlerini (android.hardware.screen.portrait ve/veya android.hardware.screen.landscape) bildirmeli ve desteklenen en az bir yönü bildirmelidir. Örneğin, televizyon veya dizüstü bilgisayar gibi sabit yatay ekrana sahip bir cihaz yalnızca android.hardware.screen.landscape değerini bildirmelidir.
Hem dikey hem de yatay ekran yönünü bildiren cihazlar, uygulamaların dikey veya yatay ekran yönüne göre dinamik yönü desteklemesi GEREKİR. Yani cihaz, uygulamanın belirli bir ekran yönü isteğini dikkate almalıdır. Cihaz uygulamaları varsayılan olarak dikey veya yatay yönü seçEBİLİR.
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.
Cihazlar, yönü değiştirirken bildirilen ekran boyutunu veya yoğunluğunu DEĞİŞTİRMEMELİDİR.
7.1.4. 2D ve 3D Grafik Hızlandırma
Cihaz uygulamaları, Android SDK dokümanlarındaki gibi hem OpenGL ES 1.0 hem de 2.0'ı desteklemelidir. Cihaz uygulamalarında, destekleyebilecek cihazlarda OpenGL ES 3.0 veya 3.1 desteklenmelidir. Cihaz uygulamalarında, Android SDK dokümanlarında [Kaynaklar, 63] açıklandığı gibi Android RenderScript de desteklenmelidir.
Cihaz uygulamaları, OpenGL ES 1.0, OpenGL ES 2.0, OpenGL ES 3.0 veya OpenGL 3.1'i desteklediğini de doğru şekilde tanımlamalıdır. Yani:
- Yönetilen API'ler (ör. GLES10.getString() yöntemi aracılığıyla), OpenGL ES 1.0 ve OpenGL ES 2.0 desteğini bildirmelidir.
- Yerel C/C++ OpenGL API'leri (uygulamaların libGLES_v1CM.so, libGLES_v2.so veya libEGL.so aracılığıyla erişebildiği API'ler) OpenGL ES 1.0 ve OpenGL ES 2.0 desteğini bildirmelidir.
- OpenGL ES 3.0 veya 3.1 desteğini beyan eden cihaz uygulamaları, ilgili yönetilen API'leri desteklemeli ve doğal C/C++ API'leri için destek içermelidir. OpenGL ES 3.0 veya 3.1 desteğini beyan eden cihaz uygulamalarında, libGLESv2.so, OpenGL ES 2.0 işlev simgelerine ek olarak ilgili işlev simgelerini DEĞİŞTİRMELİDİR.
Android, OpenGL ES 3.1'e ek olarak Java arayüzleri [Kaynaklar, 64] ve tessellation ile ASTC doku sıkıştırma biçimi gibi gelişmiş grafik işlevleri için yerel destek içeren bir uzantı paketi sağlar. Android cihaz uygulamaları bu uzantı paketini DESTEKLEYEBİLİR ve yalnızca tam olarak uygulanmışsa android.hardware.opengles.aep özellik işareti aracılığıyla desteği tanımlamalıdır.
Ayrıca cihaz uygulamaları, istenen OpenGL ES uzantılarını UYGULAYABİLİR. Ancak cihaz uygulamaları, destekledikleri tüm uzantı dizelerini OpenGL ES yönetilen ve yerel API'ler aracılığıyla bildirmelidir. Buna karşılık, desteklemedikleri uzantı dizelerini bildirmemelidir.
Android'in, uygulamaların isteğe bağlı olarak belirli OpenGL doku sıkıştırma biçimlerine ihtiyaç duyduklarını belirtmelerine yönelik destek içerdiğini unutmayın. Bu biçimler genellikle tedarikçiye özeldir. Android, belirli bir doku sıkıştırma biçimini uygulamak için cihaz uygulamalarını gerektirmez. Ancak, destekledikleri doku sıkıştırma biçimlerini OpenGL API'sindeki getString() yöntemi aracılığıyla doğru şekilde bildirmelidirler.
Android, uygulamaların android:hardwareAccelerated manifest etiketi veya doğrudan API çağrıları [Kaynaklar, 65] kullanarak uygulama, etkinlik, pencere veya görünüm düzeyinde 2D grafikler için donanım hızlandırmayı etkinleştirmek istediklerini beyan etmelerini sağlayan bir mekanizma içerir.
Cihaz uygulamalarında donanım hızlandırma varsayılan olarak etkinleştirilmeli ve geliştirici android:hardwareAccelerated="false" değerini ayarlayarak veya donanım hızlandırmayı doğrudan Android View API'leri aracılığıyla devre dışı bırakarak donanım hızlandırmayı devre dışı bırakmalıdır.
Ayrıca, cihaz uygulamaları donanım hızlandırmayla ilgili Android SDK dokümanlarıyla [Kaynaklar, 65] tutarlı bir davranış sergilemelidir.
Android, geliştiricilerin donanım hızlandırmalı OpenGL ES dokularını kullanıcı arayüzü hiyerarşisinde doğrudan oluşturma hedefleri olarak entegre etmesine olanak tanıyan bir TextureView nesnesi içerir. Cihaz uygulamalarında TextureView API desteklenmeli ve yayın öncesi Android uygulamasıyla tutarlı bir davranış sergilenmelidir.
Android, EGLConfig'in görüntüleri videoya kaydeden bir ANativeWindow'a oluşturmayı destekleyip desteklemediğini belirten bir EGLConfig özelliği olan EGL_ANDROID_RECORDABLE için destek içerir. Cihaz uygulamaları EGL_ANDROID_RECORDABLE uzantısını [Kaynaklar, 66] desteklemelidir.
7.1.5. Eski Uygulama Uyumluluğu Modu
Android, çerçevenin ekran boyutu bağımsızlığından önceki Android sürümleri için geliştirilmemiş eski uygulamaların yararına, çerçevenin "normal" ekran boyutu eşdeğeri (320 dp genişlik) modunda çalıştığı bir "uyumluluk modu" belirtir.
- Android Automotive eski uyumluluk modunu desteklemez.
- Diğer tüm cihaz uygulamaları, yayın öncesi Android açık kaynak kodu tarafından uygulanan eski uygulama uyumluluk modu için destek içermelidir. Yani cihaz uygulamaları, uyumluluk modunun etkinleştirildiği tetikleyicileri veya eşikleri DEĞİŞTİRMEMELİDİR ve uyumluluk modunun davranışını DEĞİŞTİRMEMELİDİR.
7.1.6. Ekran Teknolojisi
Android platformu, uygulamaların ekranda zengin grafikler oluşturmasına olanak tanıyan API'ler içerir. Bu belgede özel olarak izin verilmediği sürece cihazlar, Android SDK'sı tarafından tanımlanan bu API'lerin tümünü desteklemelidir.
- Cihazlar 16 bit renkli grafik oluşturabilen ekranları DESTEKLEMELİDİR ve 24 bit renkli grafik oluşturabilen ekranları DESTEKLEMELİDİR.
- Cihazlar, animasyon oluşturabilen ekranları DESTEKLEMELİDİR.
- Kullanılan ekran teknolojisinin piksel en boy oranı (PAR) 0,9 ile 1,15 arasında OLMALIDIR. Yani piksel en boy oranı, %10-15 toleransla kare (1,0) değerine yakın OLMALIDIR.
7.1.7. İkincil Ekranlar
Android, medya paylaşımı özelliklerini etkinleştirmek için ikincil ekran desteği ve harici ekranlara erişmek için geliştirici API'leri içerir. Bir cihaz kablolu, kablosuz veya yerleşik ek ekran bağlantısı üzerinden harici ekranı destekliyorsa cihaz uygulaması, Android SDK dokümanlarında açıklandığı şekilde ekran yöneticisi API'sini UYGULAMALIDIR [Kaynaklar, 67].
7.2. Giriş Cihazları
Cihazlar dokunmatik ekranı desteklemeli veya dokunmatik olmayan gezinme için 7.2.2 bölümünde belirtilen şartları karşılamalıdır.
7.2.1. Klavye
Android Watch ve Android Automotive uygulamaları, yumuşak klavye UYGULAYABİLİR. Diğer tüm cihaz uygulamalarında yumuşak klavye uygulanmalı ve:
Cihaz uygulamaları:
- http://developer.android.com adresinde ayrıntılı olarak açıklandığı gibi Giriş Yönetimi Çerçevesi (üçüncü taraf geliştiricilerin Giriş Yöntemi Düzenleyicileri (ör. sanal klavye) oluşturmasına olanak tanır) desteği DAHİL OLMALIDIR.
- Ekran boyutu nedeniyle dokunmatik klavye kullanmanın daha az mantıklı olduğu Android Watch cihazlar hariç olmak üzere en az bir dokunmatik klavye uygulaması (sabit klavye olup olmadığına bakılmaksızın) ZORUNLUDUR.
- Ek sanal klavye uygulamaları içerebilir.
- Donanım klavyesi DAHİL OLABİLİR.
- android.content.res.Configuration.keyboard [Kaynaklar, 68] bölümünde belirtilen biçimlerden biriyle eşleşmeyen bir donanım klavyesi İÇERMEMELİDİR (QWERTY veya 12 tuşlu).
7.2.2. Dokunmatik olmayan gezinme
Android TV cihazları D-pad'i desteklemelidir.
Cihaz uygulamaları:
- Cihaz uygulaması bir Android TV cihazı değilse dokunmatik olmayan bir gezinme seçeneğini (ör. dokunmatik top, d-pad veya tekerlek) EKSİLTİREBİLİR.
- android.content.res.Configuration.navigation [Resources, 68] için doğru değeri bildirmelidir.
- Giriş Yönetimi Motorları ile uyumlu, metin seçimi ve düzenleme için makul bir alternatif kullanıcı arayüzü mekanizması SAĞLANMALIDIR. Yukarı yönlü Android açık kaynak uygulaması, dokunmatik olmayan gezinme girişlerine sahip cihazlarla kullanıma uygun bir seçim mekanizması içerir.
7.2.3. Gezinme Tuşları
Ana Sayfa, Son Aramalar ve Geri işlevlerinin kullanılabilirlik ve görünürlük koşulları, bu bölümde açıklandığı üzere cihaz türlerine göre farklılık gösterir.
Ana ekran, Son uygulamalar ve Geri işlevleri (sırasıyla KEYCODE_HOME, KEYCODE_APP_SWITCH, KEYCODE_BACK anahtar etkinlikleriyle eşlenir) Android gezinme paradigması için gereklidir ve bu nedenle:
- Android el cihazı uygulamalarında Ana Sayfa, Son Aramalar ve Geri işlevleri ZORUNLUDIR.
- Android TV cihaz uygulamalarında Ana Sayfa ve Geri işlevleri ZORUNLUDIR.
- Android Watch cihaz uygulamalarında, kullanıcının Home işlevine ve UI_MODE_TYPE_WATCH modunda olmadığı sürece Back işlevine erişebilmesi GEREKİR.
- Android Automotive uygulamaları Ana Sayfa işlevini ZORUNLU olarak, Geri ve Son İşlemler işlevlerini İSTEĞE BAĞLI olarak sağlamalıdır.
- Diğer tüm cihaz uygulama türleri Ana Sayfa ve Geri işlevlerini KESİNLİKLE sağlamalıdır.
Bu işlevler özel fiziksel düğmeler (mekanik veya kapasitif dokunmatik düğmeler gibi) aracılığıyla VEYA ekranın farklı bir bölümündeki özel yazılım anahtarları, hareketler, dokunmatik panel vb. kullanılarak uygulanabilir. Android her iki uygulamayı da destekler. Bu işlevlerin tümü, görünür durumdayken tek bir işlemle (ör. dokunma, çift tıklama veya hareket) erişilebilir OLMALIDIR.
Sağlanan Son Aramalar işlevinin, tam ekran modunda diğer gezinme işlevleriyle birlikte gizlenmediği sürece görünür bir düğmesi veya simgesi OLMALIDIR. Bu durum, önceki Android sürümlerinden geçiş yapan ve gezinme için fiziksel düğmelere sahip olan ancak son uygulamalar anahtarına sahip olmayan cihazlar için geçerli değildir.
Sağlanan Ana Sayfa ve Geri işlevlerinin her biri, tam ekran modunda diğer gezinme işlevleriyle birlikte gizlenmediği veya uiMode UI_MODE_TYPE_MASK değeri UI_MODE_TYPE_WATCH olarak ayarlanmadığı sürece görünür bir düğmeye veya simgeyle gösterilmelidir.
Android 4.0'tan beri Menü işlevi, işlem çubuğu lehine kullanımdan kaldırılmıştır. Bu nedenle, Android 5.0 ve sonraki sürümlerle birlikte gönderilen yeni cihaz uygulamalarında menü işlevi için özel bir fiziksel düğme UYGULANMAMALIDIR. Eski cihaz uygulamalarında menü işlevi için özel bir fiziksel düğme UYGULANMAMALIDIR. Ancak fiziksel menü düğmesi uygulanmışsa ve cihazda targetSdkVersion değeri 10'dan büyük uygulamalar çalışıyorsa cihaz uygulaması:
- Görünür olduğunda işlem çubuğunda işlem taşma düğmesini GÖSTERMELİDİR ve açılan işlem taşma menüsü boş olmamalıdır. Android 4.4'ten önce kullanıma sunulan ancak Android 5.1'e yükseltilen bir cihaz uygulaması için bu ÖNERİLİR.
- İşlem çubuğundaki taşma düğmesini seçerek görüntülenen işlem taşma pop-up'ının konumunu DEĞİŞTİRMEMELİDİR.
- Fiziksel menü düğmesi seçilerek görüntülendiğinde işlem taşma pop-up'ı ekranda değiştirilmiş bir konumda oluşturulabilir.
Geriye dönük uyumluluk için cihaz uygulamalarında, targetSdkVersion 10'dan küçük olduğunda fiziksel bir düğme, yazılım anahtarı veya hareketler aracılığıyla Menü işlevinin uygulamalara sunulması GEREKİR. Bu menü işlevi, diğer gezinme işlevleriyle birlikte gizlenmediği sürece sunulmalıdır.
Android, Yardımcı işlem özelliğini destekler [Kaynaklar, 69]. Android Watch cihazlar hariç Android cihaz uygulamalarında, uygulamalar çalışırken kullanıcının Yardımcı işleme her zaman erişebilmesi GEREKİR. Yardım işlemi, ana sayfa düğmesine uzun basma veya yazılım ana sayfa düğmesinde yukarı kaydırma hareketi olarak uygulanmalıdır. Bu işlev başka bir fiziksel düğme, yazılım anahtarı veya hareket aracılığıyla uygulanabilir ancak diğer gezinme tuşları görünür durumdayken tek bir işlemle (ör. dokunma, çift tıklama veya hareket) erişilebilir olmalıdır.
Cihaz uygulamalarında gezinme tuşlarını görüntülemek için ekranın farklı bir bölümü KULANILABİLİR ancak bu durumda aşağıdaki koşulları karşılamalıdır:
- Cihaz uygulamalı gezinme tuşları, ekranın uygulamalar tarafından kullanılamayan ayrı bir bölümünü KULLANABİLİR ve uygulamaların kullanabileceği ekran bölümünü gizlememeli veya başka bir şekilde engellememelidir.
- Cihaz uygulamalarında, ekranın bir kısmı 7.1.1 numaralı bölümde tanımlanan koşulları karşılayan uygulamalara sunulmalıdır.
- Uygulamalar bir sistem kullanıcı arayüzü modu belirtmediğinde veya SYSTEM_UI_FLAG_VISIBLE belirtmediğinde cihaz uygulamaları gezinme tuşlarını GÖSTERMELİDİR.
- Uygulamalar SYSTEM_UI_FLAG_LOW_PROFILE belirttiğinde cihaz uygulamaları, gezinme tuşlarını göze çarpmayan bir "düşük profil" (ör. karartılmış) modda sunmalıdır.
- Uygulamalar SYSTEM_UI_FLAG_HIDE_NAVIGATION belirttiğinde cihaz uygulamaları gezinme tuşlarını GİZMELİDİR.
7.2.4. Dokunmatik Ekran Girişi
Android el cihazları ve kol saatleri dokunmatik ekran girişini DESTEKLEMELİDİR.
Cihaz uygulamalarında bir tür işaretçi giriş sistemi (fare benzeri veya dokunmatik) OLMALIDIR. Ancak bir cihaz uygulaması işaretçi giriş sistemini desteklemiyorsa android.hardware.touchscreen veya android.hardware.faketouch özellik sabitlerini HİÇBİR ZAMAN bildirmemelidir. İşaretçi giriş sistemi içeren cihaz uygulamaları:
- Cihaz giriş sistemi birden fazla işaretçiyi destekliyorsa tamamen bağımsız olarak izlenen işaretçileri DESTEKLEMELİDİR.
- Cihazdaki belirli dokunmatik ekranın türüne karşılık gelen android.content.res.Configuration.touchscreen [Kaynaklar, 68] değerini bildirmelidir.
Android, çeşitli dokunmatik ekranlar, dokunmatik alanlar ve sahte dokunma giriş cihazlarını destekler. Dokunmatik ekran tabanlı cihaz uygulamaları, kullanıcının ekrandaki öğeleri doğrudan manipüle ettiği izlenimi verecek şekilde bir ekranla [Kaynaklar, 70] ilişkilendirilir. Kullanıcı doğrudan ekrana dokunduğundan sistem, üzerinde işlem yapılan nesneleri belirtmek için ek olanaklar gerektirmez. Buna karşılık, sahte dokunmatik arayüz, dokunmatik ekran özelliklerinin bir alt kümesine benzer bir kullanıcı girişi sistemi sağlar. Örneğin, ekranda bir imleci hareket ettiren fare veya uzaktan kumanda, dokunmaya benzer ancak kullanıcının önce imleci veya odak noktasını seçip ardından tıklamasını gerektirir. Fare, dokunmatik yüzey, jiroskop tabanlı hava faresi, jiroskop işaretçisi, kontrol çubuğu ve çoklu dokunmatik dokunmatik yüzey gibi birçok giriş cihazı, sahte dokunma etkileşimlerini destekleyebilir. Android, android.hardware.faketouch özelliğini içerir. Bu özellik, dokunmatik olmayan (işaretçi tabanlı) yüksek kaliteli bir giriş cihazına (ör. fare veya dokunmatik yüzey) karşılık gelir. Dokunmatik tabanlı girişi (temel hareket desteği dahil) yeterince taklit edebilir ve cihazın dokunmatik ekran işlevinin taklit edilmiş bir alt kümesini desteklediğini gösterir. Sahte dokunma özelliğini açıklayan cihaz uygulamaları, 7.2.5 numaralı bölümdeki sahte dokunma koşullarını karşılamalıdır.
Cihaz uygulamaları, kullanılan giriş türüne karşılık gelen doğru özelliği bildirmelidir. Dokunmatik ekran (tek dokunma veya daha iyi) içeren cihaz uygulamaları, platform özelliği sabit değerini (android.hardware.touchscreen) bildirmelidir. Platform özelliği sabit değerini android.hardware.touchscreen olarak bildiren cihaz uygulamaları, platform özelliği sabit değerini android.hardware.faketouch olarak da bildirmelidir. Dokunmatik ekran içermeyen (ve yalnızca işaretçi cihaz kullanan) cihaz uygulamaları hiçbir dokunmatik ekran özelliğini BİLDİRMEMELİDİR ve 7.2.5 numaralı bölümdeki sahte dokunma koşullarını karşılıyorsa yalnızca android.hardware.faketouch özelliğini bildirmelidir.
7.2.5. Sahte Dokunmatik Giriş
android.hardware.faketouch için destek beyan eden cihaz uygulamaları:
- İşaretçi konumunun mutlak X ve Y ekran konumlarını bildirmeli ve ekranda görsel bir işaretçi göstermelidir [Kaynaklar, 71].
- Dokunma etkinliğini, ekranda aşağı veya yukarı giden işaretçide gerçekleşen durum değişikliğini belirten işlem koduyla bildirmelidir [Kaynaklar, 71].
- Ekrandaki bir nesneye işaretçiyi aşağı ve yukarı hareket ettirme özelliğini desteklemelidir. Bu sayede kullanıcılar ekrandaki bir nesneye dokunma işlemini taklit edebilir.
- Kullanıcıların ekrandaki bir nesneye iki kez dokunmayı taklit etmesine olanak tanıyan bir zaman eşiği içinde ekrandaki bir nesnenin aynı yerinde işaretçi aşağı, işaretçi yukarı, işaretçi aşağı ve ardından işaretçi yukarı hareketlerini desteklemelidir [Kaynaklar, 71].
- Ekrandaki herhangi bir noktada aşağı bakan işaretçiyi, ardından ekrandaki herhangi bir noktada yukarı bakan işaretçiyi desteklemelidir. Bu, kullanıcıların dokunma sürüklemesini taklit etmesine olanak tanır.
- Aşağı imleci desteklemeli, ardından kullanıcıların nesneyi ekranda hızlıca farklı bir konuma taşımasına ve ardından ekranda yukarı imleci kullanarak nesneyi ekranda fırlatmasına olanak tanımalıdır.
android.hardware.faketouch.multitouch.distinct için destek beyan eden cihazlar, yukarıdaki faketouch şartlarını karşılamalı ve ayrıca iki veya daha fazla bağımsız işaretçi girişinin ayrı ayrı izlenmesini desteklemelidir.
7.2.6. Oyun Kumandası Desteği
Android TV cihaz uygulamaları, aşağıda listelenen oyun kumandaları için düğme eşlemelerini desteklemelidir. Yukarı akış Android uygulaması, bu koşulu karşılayan oyun denetleyicileri için uygulamayı içerir.
7.2.6.1. Düğme Eşlemeleri
Android Television cihaz uygulamaları aşağıdaki anahtar eşlemelerini DESTEKLEMELİDİR:
Düğme | HID Kullanımı2 | Android düğmesi |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
B1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
X1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
Y1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
D-pad yukarı1 | 0x01 0x00393 | AXIS_HAT_Y4 |
D-pad sola1 | 0x01 0x00393 | AXIS_HAT_X4 |
Sol üst kenar düğmesi1 | 0x09 0x0007 | KEYCODE_BUTTON_L1 (102) |
Sağ üst kenar düğmesi1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
Sol çubuk tıklama1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
Sağ çubuğun tıklanması1 | 0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) |
Ana Sayfa1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
Geri1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 [Kaynaklar, 72]
2 Yukarıdaki HID kullanımları, bir oyun kumandası CA'sında (0x01 0x0005) tanımlanmalıdır.
3 Bu kullanım için mantıksal minimum 0, mantıksal maksimum 7, fiziksel minimum 0, fiziksel maksimum 315, birim derece ve rapor boyutu 4 olmalıdır. Mantıksal değer, dikey eksenden saat yönündeki rotasyon olarak tanımlanır. Örneğin, 0 mantıksal değeri, rotasyon olmadığını ve yukarı düğmesine basıldığını gösterirken 1 mantıksal değeri, 45 derecelik bir rotasyonu ve hem yukarı hem de sol tuşlarına basıldığını gösterir.
4 [Kaynaklar, 71]
Analog Kontroller1 | HID Kullanımı | Android düğmesi |
---|---|---|
Sol Tetikleyici | 0x02 0x00C5 | AXIS_LTRIGGER |
Sağ Tetikleyici | 0x02 0x00C4 | AXIS_RTRIGGER |
Sol kontrol çubuğu | 0x01 0x0030
0x01 0x0031 |
AXIS_X
AXIS_Y |
Sağ kontrol çubuğu | 0x01 0x0032
0x01 0x0035 |
AXIS_Z
AXIS_RZ |
1 [Kaynaklar, 71]
7.2.7. Uzaktan Kumanda
Android TV cihazı uygulamalarında, kullanıcıların TV arayüzüne erişmesine olanak tanıyan bir uzaktan kumanda BULUNMASI GEREKİR. Uzaktan kumanda fiziksel bir uzaktan kumanda OLABİLİR veya cep telefonundan ya da tabletten erişilebilen yazılım tabanlı bir uzaktan kumanda OLABİLİR. Uzaktan kumanda aşağıda tanımlanan koşulları karşılamalıdır.
- Arama olanağı. Kullanıcı fiziksel veya yazılım tabanlı uzaktan kumandadan sesli aramayı tetiklediğinde cihaz uygulamaları KEYCODE_SEARCH'i ÇAKMASI GEREKİR.
- Gezinme. Tüm Android TV uzaktan kumandaları Geri, Ana Sayfa ve Seç düğmelerini ve D-pad etkinliklerini desteklemelidir [Kaynaklar, 72].
7.3. Sensörler
Android, çeşitli sensör türlerine erişmek için API'ler içerir. Cihaz uygulamalarında, aşağıdaki alt bölümlerde belirtildiği gibi bu sensörler genellikle atlanabilir. Bir cihazda, üçüncü taraf geliştiriciler için ilgili bir API'ye sahip belirli bir sensör türü varsa cihaz uygulaması bu API'yi Android SDK dokümanlarında ve sensörlerle ilgili Android Open Source dokümanlarında [Kaynaklar, 73] açıklandığı şekilde UYGULAMALIDIR. Örneğin, cihaz uygulamaları:
- android.content.pm.PackageManager sınıfına göre [Kaynaklar, 53] sensörlerin varlığını veya yokluğunu doğru şekilde bildirmelidir.
- SensorManager.getSensorList() ve benzer yöntemler aracılığıyla desteklenen sensörlerin doğru bir listesini DÖNDÜRMELİDİR.
- Diğer tüm sensör API'leri için makul bir şekilde davranmalıdır (örneğin, uygulamalar dinleyici kaydetmeye çalıştığında uygun şekilde doğru veya yanlış döndürerek, ilgili sensörler mevcut olmadığında sensör dinleyicilerini çağırmamak vb.).
- Tüm sensör ölçümlerini, Android SDK dokümanlarında [Kaynaklar, 74] tanımlandığı şekilde her sensör türü için ilgili Uluslararası Birim Sistemi (metrik) değerlerini kullanarak bildirmelidir.
- Etkinlik zamanını Android SDK dokümanlarında tanımlandığı şekilde nanosaniye cinsinden raporlamalıdır. Bu değer, etkinliğin gerçekleştiği zamanı temsil eder ve SystemClock.elapsedRealtimeNano() saatiyle senkronize edilir. Mevcut ve yeni Android cihazların bu koşulu karşılaması çok önemle tavsiye edilir. Böylece, bu koşulun ZORUNLU bir bileşen haline gelebileceği gelecekteki platform sürümlerine yükseltme yapabilirler. Senkronizasyon hatası 100 milisaniyenin altında OLMALIDIR [Kaynaklar, 75].
Yukarıdaki liste kapsamlı değildir. Android SDK'sının ve Sensörlerle İlgili Android Açık Kaynak Dokümanları'nın [Kaynaklar, 73] belgelenmiş davranışı yetkili kabul edilir.
Bazı sensör türleri karmadır. Yani bir veya daha fazla sensör tarafından sağlanan verilerden türetilebilirler. (Yön sensörü ve doğrusal hızlanma sensörü buna örnek gösterilebilir.) Cihaz uygulamaları, [Kaynaklar, 76] bölümünde açıklandığı gibi önkoşul fiziksel sensörleri içerdiğinde bu sensör türlerini UYGULAMALIDIR. Bir cihaz uygulamasında karma sensör varsa bu sensör, karma sensörlerle ilgili Android Açık Kaynak dokümanlarında [Kaynaklar, 76] açıklandığı şekilde uygulanmalıdır.
Bazı Android sensörleri, verileri sürekli olarak döndüren "sürekli" tetikleyici modunu destekler [Kaynaklar, 77]. Android SDK dokümanlarında kesintisiz sensör olarak belirtilen API'ler için cihaz uygulamalarında, kesintisiz olarak %3'ün altında jitter değerine sahip olması gereken periyodik veri örnekleri sağlanmalıdır. Jitter, art arda gelen etkinlikler arasındaki raporlanan zaman damgası değerlerinin farkının standart sapması olarak tanımlanır.
Cihaz uygulamalarının, sensör etkinlik akışının cihaz CPU'sunun askıya alma durumuna girmesini veya askıya alma durumundan uyandırılmasını ÖNLEMEDİĞİNDEN emin olması GEREKİR.
Son olarak, birden fazla sensör etkinleştirildiğinde güç tüketimi, her bir sensörün bildirilen güç tüketiminin toplamını AŞMAMALIDIR.
7.3.1. İvme ölçer
Cihaz uygulamalarında 3 eksenli ivme ölçer BULUNMASI GEREKİR. Android el cihazlarının ve Android kol saatlerinin bu sensörü içermesi önemle tavsiye edilir. Bir cihaz uygulamasında 3 eksenli ivme ölçer varsa:
- TYPE_ACCELEROMETER sensörünü UYGULAMALI ve raporlamalıdır [Kaynaklar, 78].
- Android Watch cihazlar daha katı bir güç kısıtlamasına sahip olduğundan bu cihazlar için en az 50 Hz, diğer tüm cihaz türleri için ise 100 Hz'e kadar etkinlik raporlayabilmelidir.
- En az 200 Hz'e kadar olan etkinlikleri raporlamalıdır.
- Android API'lerinde [Kaynaklar, 74] açıklandığı gibi Android sensör koordinat sistemine UYGUN OLMALIDIR.
- Herhangi bir eksende serbest düşüşten başlayarak yerçekiminin dört katına (4g) kadar veya daha fazlasını ölçebilmelidir.
- Çözünürlük en az 8 bit OLMALIDIR ve en az 16 bit OLMALIDIR.
- Özellikler kullanım ömrü boyunca değişirse ve telafi edilirse kullanım sırasında kalibre EDİLMELİDİR ve cihaz yeniden başlatılırken telafi parametreleri korunmalıdır.
- Sıcaklık dengelenmelidir.
- Standart sapma en fazla 0,05 m/s^ olmalıdır.Standart sapma, en hızlı örnekleme hızında en az 3 saniye boyunca toplanan örneklerde eksen başına hesaplanır.
- Android SDK belgesinde açıklandığı gibi TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER birleşik sensörlerini UYGULAMALIDIR. Mevcut ve yeni Android cihazların TYPE_SIGNIFICANT_MOTION karma sensörünü uygulaması çok önemle tavsiye edilir. Bu sensörlerden herhangi biri uygulanırsa güç tüketimlerinin toplamı her zaman 4 mW'dan az OLMALIDIR ve her biri cihaz dinamik veya statik durumdayken 2 mW'dan ve 0, 5 mW'dan az OLMALIDIR.
- Jiroskop sensörü varsa TYPE_GRAVITY ve TYPE_LINEAR_ACCELERATION karma sensörlerini UYGULAMALI ve TYPE_GAME_ROTATION_VECTOR karma sensörünü UYGULAMALIDIR. Mevcut ve yeni Android cihazların TYPE_GAME_ROTATION_VECTOR sensörünü uygulaması önemle tavsiye edilir.
- Jiroskop sensörü ve manyetometre sensörü de dahil edilmişse TYPE_ROTATION_VECTOR birleşik sensörü UYGULANMALIDIR.
7.3.2. Manyetometre
Cihaz uygulamalarında 3 eksenli bir manyetometre (pusula) BULUNMASI GEREKİR. Bir cihazda 3 eksenli manyetometre varsa:
- TYPE_MAGNETIC_FIELD sensörünü UYGULAMALI ve TYPE_MAGNETIC_FIELD_UNCALIBRATED sensörünü de UYGULAMALIDIR. Mevcut ve yeni Android cihazların TYPE_MAGNETIC_FIELD_UNCALIBRATED sensörünü uygulaması önemle tavsiye edilir.
- En az 10 Hz'ye kadar etkinlik raporlayabilmeli ve en az 50 Hz'ye kadar etkinlik raporlamalıdır.
- Android API'lerinde [Kaynaklar, 74] açıklandığı gibi Android sensör koordinat sistemine UYGUN OLMALIDIR.
- Doygunluk öncesi her eksende -900 µT ile +900 µT arasında ölçüm yapabilmelidir.
- Manyetometre, dinamik (akımla indüklenen) ve statik (mıknatısla indüklenen) manyetik alanlardan uzak bir yere yerleştirilerek sabit demir ofset değeri 700 µT'den az OLMALIDIR ve 200 µT'den az bir değere sahip OLMALIDIR.
- Çözünürlük 0,6 µT'ye eşit veya daha yoğun OLMALIDIR ve 0,2 µT'ye eşit veya daha yoğun OLMALIDIR.
- Sıcaklık dengelenmelidir.
- Sabit demir önyargısının online kalibrasyonunu ve telafisini desteklemeli ve cihazın yeniden başlatılması arasında telafi parametrelerini korumalıdır.
- Yumuşak demir telafisi uygulanmış OLMALIDIR. Kalibre işlemi, cihaz kullanılırken veya cihazın üretimi sırasında yapılabilir.
- En hızlı örnekleme hızında en az 3 saniye boyunca toplanan örneklerde eksen başına hesaplanmış standart sapma 0,5 µT'den yüksek olmamalıdır.
- Bir ivmeölçer sensörü ve jiroskop sensörü de dahil edilmişse TYPE_ROTATION_VECTOR birleşik sensörü UYGULANMALIDIR.
- Bir ivme ölçer sensörü de uygulanıyorsa TYPE_GEOMAGNETIC_ROTATION_VECTOR sensörünü UYGULAYABİLİR. Ancak uygulandığında, sensör 10 Hz'de toplu mod için kaydedildiğinde 10 mW'den az ve 3 mW'den az güç tüketmelidir.
7.3.3. GPS
Cihaz uygulamaları bir GPS alıcısı İÇERMELİDİR. Bir cihaz uygulamasında GPS alıcısı varsa GPS kilitlenme süresini en aza indirmek için bir tür "desteklenen GPS" tekniği DAHİL EDİLMELİDİR.
7.3.4. Jiroskop
Cihaz uygulamalarında jiroskop (açısal değişim sensörü) BULUNMASI GEREKİR. 3 eksenli ivme ölçer de dahil edilmediği sürece cihazlarda jiroskop sensörü BULUNMAMALIDIR. Cihaz uygulamasında jiroskop varsa:
- TYPE_GYROSCOPE sensörünü UYGULAMALI ve TYPE_GYROSCOPE_UNCALIBRATED sensörünü de UYGULAMALIDIR. Mevcut ve yeni Android cihazların SENSOR_TYPE_GYROSCOPE_UNCALIBRATED sensörünü uygulaması önemle tavsiye edilir.
- Saniyede 1.000 dereceye kadar yön değişikliklerini ölçebilmelidir.
- Android Watch cihazlar için en az 50 Hz'e kadar, diğer tüm cihaz türleri için ise 100 Hz'e kadar etkinlik raporlayabilmelidir.
- En az 200 Hz'e kadar olan etkinlikleri raporlamalıdır.
- 12 bit veya daha yüksek çözünürlükte OLMALIDIR ve 16 bit veya daha yüksek çözünürlükte OLMALIDIR.
- Sıcaklık dengeleme özelliğine sahip OLMALIDIR.
- Kullanım sırasında kalibre edilmeli ve telafi edilmelidir. Ayrıca, cihaz yeniden başlatılırken telafi parametreleri korunmalıdır.
- Hz başına 1e-7 rad^2 / s^2'den (Hz başına varyans veya rad^2 / s) daha yüksek bir varyansa SAHİP OLMALIDIR. Varyansın örnekleme hızıyla değişmesine izin verilir ancak bu değerle sınırlı olmalıdır. Diğer bir deyişle, jiroskopun varyansını 1 Hz örnekleme hızında ölçerseniz bu değer 1e-7 rad^2/s^2'den büyük olmamalıdır.
- Bir ivmeölçer sensörü ve manyetometre sensörü de dahil edilmişse TYPE_ROTATION_VECTOR birleşik sensörü UYGULANMALIDIR.
- Bir ivmeölçer sensörü varsa TYPE_GRAVITY ve TYPE_LINEAR_ACCELERATION birleşik sensörlerini UYGULAMALI ve TYPE_GAME_ROTATION_VECTOR birleşik sensörünü UYGULAMALIDIR. Mevcut ve yeni Android cihazların TYPE_GAME_ROTATION_VECTOR sensörünü uygulaması önemle tavsiye edilir.
7.3.5. Barometre
Cihaz uygulamalarında barometre (ortam hava basıncı sensörü) BULUNMASI GEREKİR. Cihaz uygulaması barometre içeriyorsa:
- TYPE_PRESSURE sensörünü UYGULAMALI ve raporlamalıdır.
- Etkinlikleri 5 Hz veya daha yüksek bir hızda yayınlayabilmelidir.
- Yüksekliği tahmin etmek için yeterli hassasiyete sahip OLMALIDIR.
- Sıcaklık dengeleme özelliğine sahip OLMALIDIR.
7.3.6. Termometre
Cihaz uygulamaları, ortam termometresi (sıcaklık sensörü) İÇERİEBİLİR. Varsa SENSOR_TYPE_AMBIENT_TEMPERATURE olarak tanımlanmalı ve ortam (oda) sıcaklığını santigrat derece cinsinden ölçmelidir.
Cihaz uygulamaları, CPU sıcaklık sensörü içerebilir ancak İÇERMEMELİDİR. Mevcutsa SENSOR_TYPE_TEMPERATURE olarak tanımlanmalı, cihazın CPU sıcaklığını ölçmeli ve başka bir sıcaklığı ölçmemelidir. SENSOR_TYPE_TEMPERATURE sensör türünün Android 4.0'da desteğinin sonlandırıldığını unutmayın.
7.3.7. Fotoğraf ölçer
Cihaz uygulamaları bir fotometre (ortam ışığı sensörü) İÇERİEBİLİR.
7.3.8. Yakınlık Sensörü
Cihaz uygulamaları bir yakınlık sensörü içerEBİLİR. Sesli arama yapabilen ve getPhoneType işlevinde PHONE_TYPE_NONE dışında bir değer belirten cihazlarda YAKINLIK SENSÖRÜ OLMALIDIR. Bir cihaz uygulaması yakınlık sensörü içeriyorsa:
- Bir nesnenin yakınlığını ekranla aynı yönde ölçmelidir. Yani, bu sensör türünün birincil amacı kullanıcının kullandığı telefonu algılamak olduğundan yakınlık sensörü ekrana yakın nesneleri algılayacak şekilde yönlendirilmelidir. Bir cihaz uygulamasında başka bir yönde yakınlık sensörü varsa bu API üzerinden erişilememelidir.
- 1 bit veya daha fazla doğruluk değerine sahip OLMALIDIR.
7.4. Veri Bağlantısı
7.4.1. Telefon Hizmeti
Android API'leri ve bu doküman tarafından kullanılan "Telefon" terimi, özellikle GSM veya CDMA ağı üzerinden sesli arama yapma ve SMS mesajı göndermeyle ilgili donanıma atıfta bulunur. Bu sesli aramalar paket anahtarlamalı olabilir veya olmayabilir ancak Android'in işleyişine göre aynı ağ kullanılarak uygulanabilecek veri bağlantılarından bağımsız olarak kabul edilir. Diğer bir deyişle, Android "telefon" işlevi ve API'leri özellikle sesli aramaları ve SMS'leri ifade eder. Örneğin, arama yapamayan veya SMS mesajı gönderip alamayan cihaz uygulamaları, veri bağlantısı için hücresel ağ kullanıp kullanmadıklarından bağımsız olarak android.hardware.telephony özelliğini veya herhangi bir alt özelliği HİÇBİR ZAMAN bildirmemelidir.
Android, telefon donanımı içermeyen cihazlarda KULLANILABİLİR. Yani Android, 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 sağlaması GEREKİR. Telefon donanımı içermeyen cihaz uygulamaları, API'lerin tamamını işlem yapmadan olarak UYGULAMALIDIR.
7.4.2. IEEE 802.11 (Kablosuz)
Android TV cihaz uygulamalarında kablosuz bağlantı desteği ZORUNLUDUR.
Android TV cihaz uygulamalarında bir veya daha fazla 802.11 biçimi (b/g/a/n vb.) için destek ZORUNLUDUR ve diğer Android cihaz uygulama türlerinde bir veya daha fazla 802.11 biçimi için destek OLMALIDIR. Bir cihaz uygulaması 802.11 desteği içeriyorsa ve işlevi üçüncü taraf bir uygulamaya sunuyorsa ilgili Android API'yi uygulamalıdır ve:
- Donanım özellik işareti android.hardware.wifi'yi bildirmelidir.
- Çoklu yayın API'sini SDK dokümanlarında açıklandığı şekilde [Kaynaklar, 79] UYGULAMALIDIR.
- Çoklu yayın DNS'yi (mDNS) desteklemeli ve ekran etkin durumda değilken de dahil olmak üzere herhangi bir çalışma zamanında mDNS paketlerini (224.0.0.251) filtrelememelidir.
7.4.2.1. Kablosuz Doğrudan Bağlantı
Cihaz uygulamalarında Wi-Fi Direct (eşler arası kablosuz) desteği YER ALMALIDIR. Bir cihaz uygulamasında Wi-Fi Direct desteği varsa ilgili Android API'si, SDK dokümanlarında [Kaynaklar, 80] açıklandığı şekilde uygulanmalıdır. Bir cihaz uygulamasında kablosuz doğrudan bağlantı desteği varsa:
- android.hardware.wifi.direct donanım özelliğini ZORUNLU olarak bildirmelidir.
- Normal kablosuz bağlantıyı desteklemelidir.
- Eşzamanlı kablosuz ve kablosuz doğrudan bağlantıyı desteklemelidir.
7.4.2.2. Kablosuz Tünel Doğrudan Bağlantısı Kurulumu
Android TV cihazı uygulamalarında, Wi-Fi Tünellenmiş Doğrudan Bağlantı Kurulumu (TDLS) desteği ZORUNLUDUR.
Android televizyon cihazı uygulamaları, kablosuz tünellenmiş doğrudan bağlantı kurulumu (TDLS) için destek İÇERMELİDİR ve diğer Android cihaz uygulama türleri, Android SDK Dokümanları'nda [Kaynaklar, 81] açıklandığı gibi kablosuz TDLS için destek İÇERMELİDİR. Bir cihaz uygulaması TDLS desteği içeriyorsa ve TDLS, WiFiManager API tarafından etkinleştirildiyse cihaz:
- TDLS yalnızca mümkün olduğunda VE faydalı olduğunda kullanılmalıdır.
- Bazı sezgisel yöntemlere sahip OLMALI ve performansı kablosuz erişim noktası üzerinden gitmekten daha kötü olabilecek durumlarda TDLS'yi KULLANMAMALI.
7.4.3. Bluetooth
Android Watch ve Automotive uygulamaları Bluetooth'u DESTEKLEMELİDİR. Android TV uygulamaları Bluetooth ve Bluetooth LE'yi DESTEKLEMELİDİR.
Android, Bluetooth ve Bluetooth Düşük Enerji desteği içerir [Kaynaklar, 82]. Bluetooth ve Bluetooth Düşük Enerji desteği içeren cihaz uygulamaları, ilgili platform özelliklerini (sırasıyla android.hardware.bluetooth ve android.hardware.bluetooth_le) belirtmeli ve platform API'lerini uygulamalıdır. Cihaz uygulamaları, cihaza uygun olarak A2DP, AVCP, OBEX gibi ilgili Bluetooth profillerini UYGULAMALIDIR. Android TV cihaz uygulamaları Bluetooth ve Bluetooth LE'yi DESTEKLEMELİDİR.
Bluetooth Düşük Enerji desteği içeren cihaz uygulamaları:
- android.hardware.bluetooth_le donanım özelliğini İLKLEŞTİRMELİDİR.
- GATT (genel özellik profili) tabanlı Bluetooth API'lerini SDK dokümanlarında ve [Kaynaklar, 82] bölümünde açıklandığı şekilde etkinleştirmeniz GEREKİR.
- ScanFilter API'yi [Kaynaklar, 83] uygularken filtreleme mantığının bluetooth yonga setine aktarılmasını DESTEKLEMELİDİR ve android.bluetooth.BluetoothAdapter.isOffloadedFilteringSupported() yöntemi aracılığıyla sorgulandığında filtreleme mantığının uygulandığı yerin doğru değerini BİLDİRMELİYDİR.
- Gruplandırılmış taramanın Bluetooth yonga setine aktarılmasını DESTEKLEMELİDİR ancak desteklenmiyorsa android.bluetooth.BluetoothAdapater.isOffloadedScanBatchingSupported() yöntemi aracılığıyla sorgulandığında "false" değerini bildirmelidir.
- En az 4 yuvayla çoklu reklamı DESTEKLEMELİDİR ancak desteklenmiyorsa android.bluetooth.BluetoothAdapter.isMultipleAdvertisementSupported() yöntemi aracılığıyla sorgulandığında "false" değerini ORTAYA KOYMASI GEREKİR.
7.4.4. Yakın Alan İletişimi
Cihaz uygulamalarında Near Field Communication (NFC) için bir alıcı/verici ve ilgili donanım YER ALMALIDIR. Bir cihaz uygulaması NFC donanımı içeriyorsa ve bu donanımı üçüncü taraf uygulamalarına sunmayı planlıyorsa:
- android.content.pm.PackageManager.hasSystemFeature() yönteminden android.hardware.nfc özelliğini BİLDİRMESI GEREKİR [Kaynaklar, 53].
- Aşağıdaki NFC standartları üzerinden NDEF mesajlarını okuyup yazabilmelidir:
- Aşağıdaki NFC standartları aracılığıyla NFC Forum okuyucu/yazar (NFC Forum teknik spesifikasyonu NFCForum-TS-DigitalProtocol-1.0 tarafından tanımlandığı şekilde) olarak hareket edebilmelidir:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS 6319-4)
- IsoDep (ISO 14443-4)
- NFC Forumu Etiket Türleri 1, 2, 3, 4 (NFC Forumu tarafından tanımlanmıştır)
- Aşağıdaki NFC standartları üzerinden NDEF mesajlarını okuyup yazabilmelidir. Aşağıdaki NFC standartlarının "OLMALI" olarak belirtildiğini ancak gelecekteki bir sürümün Uyumluluk Tanımı'nda bu standartların "OLMALIDIR" olarak değiştirilmesinin planlandığını unutmayın. Bu standartlar bu sürümde isteğe bağlıdır ancak gelecekteki sürümlerde zorunlu olacaktır. Android'in bu sürümünü çalıştıran mevcut ve yeni cihazların, gelecekteki platform sürümlerine yükseltebilmeleri için bu şartları şimdiden karşılamaları çok önemle tavsiye edilir.
- NfcV (ISO 15693)
- Aşağıdaki eşler arası standartlar ve protokoller üzerinden veri gönderip alabilmeli:
- ISO 18092
- LLCP 1.0 (NFC Forum tarafından tanımlanmıştır)
- SDP 1.0 (NFC Forum tarafından tanımlanmıştır)
- NDEF Push Protokolü [Kaynaklar, 84]
- SNEP 1.0 (NFC Forum tarafından tanımlanmıştır)
- Android Beam desteği ZORUNLUDUR [Kaynaklar, 85]:
- SNEP varsayılan sunucusunu UYGULAMALIDIR. Varsayılan SNEP sunucusu tarafından alınan geçerli NDEF mesajları, android.nfc.ACTION_NDEF_DISCOVERED intent'i kullanılarak uygulamalara gönderilmelidir. Android Beam'in ayarlardan devre dışı bırakılması, gelen NDEF mesajının gönderilmesini DEVRE DIŞI BIRAKMAMALIDIR.
- NFC paylaşım ayarlarını göstermek için android.settings.NFCSHARING_SETTINGS intent'ini UYGUNLAŞTIRMALIDIR [Kaynaklar, 86].
- NPP sunucusunu UYGULAMALIDIR. NPP sunucusu tarafından alınan mesajlar SNEP varsayılan sunucusu ile aynı şekilde işlenmelidir.
- Android Beam etkinleştirildiğinde varsayılan SNEP sunucusuna giden P2P NDEF göndermeye çalışan bir SNEP istemcisi UYGULAMALIDIR. Varsayılan SNEP sunucusu bulunamazsa istemcinin bir NPP sunucusuna gönderme denemesi ZORUNLUDUR.
- Ön plan etkinliklerinin, android.nfc.NfcAdapter.setNdefPushMessage, android.nfc.NfcAdapter.setNdefPushMessageCallback ve android.nfc.NfcAdapter.enableForegroundNdefPush yöntemlerini kullanarak giden P2P NDEF mesajını ayarlamasına izin VERMELİDİR.
- Giden P2P NDEF mesajları göndermeden önce "İletmek için dokun" gibi bir hareket veya ekran onayı KULLANMALIDIR.
- Android Beam'i varsayılan olarak etkinleştirmeli ve başka bir özel NFC P2P modu açıkken bile Android Beam'i kullanarak gönderip alabilmeli.
- Cihaz, Bluetooth Nesne İtme Profilini destekliyorsa NFC bağlantısının Bluetooth'a aktarılmasını desteklemelidir. Cihaz uygulamaları, NFC Forum'un "Bağlantı Devre Alma sürümü 1.2" [Kaynaklar, 87] ve "NFC sürümü 1.0'u kullanarak Bluetooth Güvenli Basit Eşleme" [Kaynaklar, 88] özelliklerini uygulayarak android.nfc.NfcAdapter.setBeamPushUris kullanılırken Bluetooth'a bağlantı aktarmayı desteklemelidir. Bu tür bir uygulama, NFC üzerinden aktarma isteğini/seçilen kayıtları aktarmak için "urn:nfc:sn:handover" hizmet adıyla aktarma LLCP hizmetini UYGULAMALIDIR ve gerçek Bluetooth veri aktarımı için Bluetooth Nesne Push Profili'ni KULLANMALIDIR. Eski nedenlerden dolayı (Android 4.1 cihazlarla uyumlu kalmak için) uygulama, NFC üzerinden aktarma isteği/seçilen kayıtları değiştirmek için SNEP GET isteklerini kabul etmeye DEVAM ETMELİDİR. Ancak uygulamanın kendisi, bağlantı aktarımı yapmak için SNEP GET istekleri GÖNDERMEMELİDİR.
- NFC keşif modundayken desteklenen tüm teknolojiler için anket YAPMALIDIR.
- Cihaz açıkken ekran etkin ve kilit ekranı kilidi açıkken NFC keşif modunda OLMALIDIR.
- Aşağıdaki NFC standartları aracılığıyla NFC Forum okuyucu/yazar (NFC Forum teknik spesifikasyonu NFCForum-TS-DigitalProtocol-1.0 tarafından tanımlandığı şekilde) olarak hareket edebilmelidir:
(Yukarıdaki JIS, ISO ve NFC Forumu spesifikasyonları için herkese açık bağlantıların kullanılamadığını unutmayın.)
Android, NFC Ana Kart Emülasyonu (HCE) modunu destekler. Bir cihaz uygulaması, HCE ve uygulama kimliği (AID) yönlendirme özelliğine sahip bir NFC denetleyici yonga seti içeriyorsa:
- android.hardware.nfc.hce özellik sabitini bildirmelidir.
- Android SDK'sında [Kaynaklar, 10] tanımlandığı şekilde NFC HCE API'lerini desteklemelidir.
Ayrıca, cihaz uygulamaları aşağıdaki MIFARE teknolojileri için okuyucu/yazıcı desteği içerEBİLİR.
- MIFARE Classic
- MIFARE Ultralight
- MIFARE Classic'te NDEF
Android'in bu MIFARE türleri için API'ler içerdiğini unutmayın. Bir cihaz uygulaması, okuyucu/yazar rolünde MIFARE'i destekliyorsa:
- İlgili Android API'lerini Android SDK'da belirtildiği şekilde UYGULAMALIDIR.
- android.content.pm.PackageManager.hasSystemFeature() yönteminden com.nxp.mifare özelliğini bildirmelidir [Kaynaklar, 53]. Bunun standart bir Android özelliği olmadığını ve bu nedenle PackageManager sınıfında sabit bir değer olarak görünmediğini unutmayın.
- Bu bölümde açıklandığı şekilde genel NFC desteğini de uygulamadığı sürece ilgili Android API'lerini uygulamamalı veya com.nxp.mifare özelliğini bildirmemelidir.
Bir cihaz uygulaması NFC donanımı içermiyorsa android.content.pm.PackageManager.hasSystemFeature() yönteminden [Kaynaklar, 53] android.hardware.nfc özelliğini İLAN ETMEMELİDİR ve Android NFC API'yi işlemsiz olarak UYGULAMALIDIR.
android.nfc.NdefMessage ve android.nfc.NdefRecord sınıfları protokolden bağımsız bir veri temsili biçimini temsil ettiğinden, cihaz uygulamaları NFC desteği içermese veya android.hardware.nfc özelliğini belirtmese bile bu API'leri uygulamalıdır.
7.4.5. Minimum Ağ İşlevi
Cihaz uygulamalarında bir veya daha fazla veri ağı biçimi için destek ZORUNLUDUR. Daha açık belirtmek gerekirse, cihaz uygulamalarında 200 Kbit/sn veya daha yüksek hızda en az bir veri standardı desteği BULUNMASI GEREKİR. Bu koşulu karşılayan teknolojilere örnek olarak EDGE, HSPA, EV-DO, 802.11g, Ethernet, Bluetooth PAN vb. verilebilir.
Birincil veri bağlantısının fiziksel bir ağ standardı (ör. Ethernet) olduğu cihaz uygulamalarında, 802.11 (Kablosuz) gibi en az bir yaygın kablosuz veri standardı için destek de YER ALMALIDIR.
Cihazlar birden fazla veri bağlantısı biçimi UYGULAYABİLİR.
7.4.6. Senkronizasyon Ayarları
getMasterSyncAutomatically() yönteminin "true" değerini döndürmesi için cihaz uygulamalarında varsayılan olarak ana otomatik senkronizasyon ayarı AÇIK OLMALIDIR [Kaynaklar, 89].
7.5. Kameralar
Cihaz uygulamalarında arka kamera BULUNMASI GEREKİR ve ön kamera BULUNMASI MÜMKÜNDÜR. Arka kamera, cihazın ekranın karşısındaki tarafında bulunan bir kameradır. Yani geleneksel bir kamera gibi cihazın uzak tarafındaki sahneleri görüntüler. Ön kamera, cihazın ekranla aynı tarafında bulunan bir kameradır. Yani genellikle görüntülü konferans ve benzeri uygulamalarda kullanıcının görüntüsünü almak için kullanılan bir kameradır.
Bir cihaz uygulaması en az bir kamera içeriyorsa uygulamanın, cihazdaki en yüksek çözünürlüklü kamera sensörü tarafından üretilen görüntülerin boyutuna eşit 3 bitmap'i aynı anda ayırması MÜMKÜN OLMALIDIR.
7.5.1. Arka Kamera
Cihaz uygulamalarında arka kamera BULUNMASI GEREKİR. Bir cihaz uygulaması en az bir arka kamera içeriyorsa:
- android.hardware.camera ve android.hardware.camera.any özellik işaretini bildirmelidir.
- 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 flaş varsa uygulama, Camera.Parameters nesnesinin FLASH_MODE_AUTO veya FLASH_MODE_ON özelliklerini etkinleştirerek flaşı açıkça etkinleştirmediği sürece, bir android.hardware.Camera.PreviewCallback örneği bir kamera önizleme yüzeyine kaydedilmişken flaş yanMAMALIDIR. Bu kısıtlamanın cihazın yerleşik sistem kamera uygulaması için değil, yalnızca Camera.PreviewCallback kullanan üçüncü taraf uygulamaları için geçerli olduğunu unutmayın.
7.5.2. Ön Kamera
Cihaz uygulamaları ön kamera içerEBİLİR. Bir cihaz uygulaması en az bir ön kamera içeriyorsa:
- android.hardware.camera.any ve android.hardware.camera.front özellik işaretlerini bildirmelidir.
- En az VGA (640x480 piksel) çözünürlüğe sahip OLMALIDIR.
- Camera API için varsayılan olarak ön kamera KULLANMAMALIDIR. Android'deki kamera API'si, ön kameralar için özel destek sunar ve cihaz uygulamalarında API, cihazdaki tek kamera olsa bile ön kamerayı varsayılan arka kamera olarak ele alacak şekilde yapılandırılmamalıdır.
- 7.5.1 numaralı bölümde açıklandığı gibi, arkaya bakan kameralarda kullanılabilen özellikleri (otomatik odaklama, flaş vb.) İÇERİYE ALMAYABİLİR.
- Bir uygulamanın CameraPreview'da gösterdiği yayını aşağıdaki gibi yatay olarak yansıtmalıdır (yani yansıtmalıdır):
- Cihaz uygulaması kullanıcı tarafından döndürülebiliyorsa (ör. bir ivmeölçer aracılığıyla otomatik olarak veya kullanıcı girişi aracılığıyla manuel olarak) kamera önizlemesi, cihazın mevcut yönüne göre yatay olarak yansıtılmalıdır.
- Geçerli uygulama, android.hardware.Camera.setDisplayOrientation()[Resources, 90] yönteminin çağrılmasıyla kamera ekranının döndürülmesini açıkça talep ettiyse kamera önizlemesi, uygulama tarafından belirtilen yöne göre yatay olarak yansıtılmalıdır.
- Aksi takdirde önizleme, cihazın varsayılan yatay ekseni boyunca YANSITILMALIDIR.
- Son görüntüleme tarafından gösterilen resmi, kamera önizleme resim akışıyla aynı şekilde yansıtmalıdır. Cihaz uygulaması, yeniden görüntülemeyi desteklemiyorsa bu şart geçerli değildir.
- Uygulama geri çağırmalarına döndürülen veya medya depolama alanına bağlanan nihai çekilen hareketsiz resim veya video akışlarını yansıtmamalıdır.
7.5.3. Harici Kamera
USB ana makine modu bulunan cihaz uygulamaları, USB bağlantı noktasına bağlanan harici kamera desteği içerEBİLİR. Harici kamera desteğine sahip cihazlar:
- Platform özelliği android.hardware.camera.external ve android.hardware camera.any İÇİNDEKİLER.
- USB Video Sınıfı'nı (UVC 1.0 veya üzeri) DESTEKLEMELİDİR.
- Birden fazla kamerayı DESTEKLEYEBİLİR.
Yüksek kaliteli kodlanmamış akışların (ör. ham veya bağımsız olarak sıkıştırılmış resim akışları) aktarımını sağlamak için video sıkıştırma (MJPEG gibi) desteği ÖNERİLİR. Kamera tabanlı video kodlaması DESTEKLENEBİLİR. Bu durumda, cihaz uygulamasına eşzamanlı olarak kodlanmamış/ MJPEG akışına (QVGA veya daha yüksek çözünürlük) erişilebilmelidir.
7.5.4. Kamera API'si Davranışı
Android, kameraya erişmek için iki API paketi içerir. Daha yeni android.hardware.camera2 API, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu API, sıfır kopyalama gerektiren verimli seri/akış akışları ve pozlama, kazanç, beyaz denge kazançları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlası gibi kare başına kontroller içerir.
Eski API paketi android.hardware.Camera, Android 5.0'de desteği sonlandırılmış olarak işaretlenmiştir ancak uygulamaların Android cihaz uygulamalarını kullanabilmesi için hâlâ kullanılabilir durumda olması gerekir. Bu nedenle, bu bölümde ve Android SDK'da açıklandığı şekilde API'nin desteğinin devam etmesini sağlamanız GEREKİR.
Cihaz uygulamaları, mevcut tüm kameralar için kamerayla ilgili API'lerde 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. Yani NV21 varsayılan OLMALIDIR.
- android.hardware.Camera için cihaz uygulamaları, hem ön hem de arka kameraların kamera önizlemelerinde YV12 biçimini (android.graphics.ImageFormat.YV12 sabiti ile belirtilir) DESTEKLEMELİDİR. (Donanım video kodlayıcı ve kamera herhangi bir yerel piksel biçimini kullanabilir ancak cihaz uygulaması YV12'ye dönüşümü DESTEKLEMELİDİR.)
- android.hardware.camera2 için cihaz uygulamaları, android.media.ImageReader API aracılığıyla android.hardware.ImageFormat.YUV_420_888 ve android.hardware.ImageFormat.JPEG biçimlerini çıkış olarak desteklemelidir.
Cihaz uygulamalarında, cihazda donanım otomatik odaklama veya başka özellikler bulunup bulunmadığına bakılmaksızın Android SDK dokümanlarında [Kaynaklar, 91] yer alan Camera API'nin tamamı uygulanmalıdır. Örneğin, otomatik odaklama özelliği olmayan kameralar, kayıtlı android.hardware.Camera.AutoFocusCallback örneklerini çağırmaya devam ETMELIDİR (otomatik odaklama özelliği olmayan kameralarla alakalı olmasa da). Bunun ön kameralar için geçerli olduğunu unutmayın. Örneğin, çoğu ön kamera otomatik odaklama özelliğini desteklemese bile API geri çağırmalarının açıklandığı şekilde "taklit" edilmesi gerekir.
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ı, android.hardware.Camera.Parameters sınıfında sabit olarak tanımlananlar dışındaki android.hardware.Camera.setParameters() yöntemine iletilen dize sabitlerini HİÇBİR ŞEKİLDE dikkate ALMAMALI veya tanımamalıdır. Yani cihaz uygulamaları, donanım izin veriyorsa tüm standart kamera parametrelerini DESTEKLEMELİ ve özel kamera parametresi türlerini DESTEKLEMEMELİDİR. Örneğin, yüksek dinamik aralık (HDR) görüntüleme teknikleri kullanılarak görüntü yakalamayı destekleyen cihaz uygulamaları, Camera.SCENE_MODE_HDR [Kaynaklar, 92] kamera parametresini desteklemelidir.
Tüm cihaz uygulamaları android.hardware.camera2 API'sinin tüm özelliklerini tam olarak destekleyemediğinden, cihaz uygulamaları Android SDK'sında [Kaynaklar, 93] açıklandığı gibi android.info.supportedHardwareLevel mülküyle uygun destek düzeyini ve uygun çerçeve özellik işaretlerini [Kaynaklar, 94] bildirmelidir.
Cihaz uygulamaları, android.request.availableCapabilities mülkü aracılığıyla android.hardware.camera2'nin ayrı kamera özelliklerini ve uygun özellik işaretlerini [Kaynaklar, 94] de bildirmelidir. Bir cihaz, bağlı kamera cihazlarından herhangi biri özelliği destekliyorsa özellik işaretini tanımlamalıdır.
Cihaz uygulamaları, kamera tarafından yeni bir fotoğraf çekildiğinde ve fotoğrafın girişi medya mağazasına eklendiğinde Camera.ACTION_NEW_PICTURE intent'ini YAYITLAMALIDIR.
Cihaz uygulamaları, kamera tarafından yeni bir video kaydedildiğinde ve resmin girişi medya mağazasına eklendiğinde Camera.ACTION_NEW_VIDEO intent'ini YAYITLAMALIDIR.
7.5.5. Kamera yönü
Hem ön hem de arka kameralar (varsa) kameranın uzun boyutunun ekranın uzun boyutuyla hizalanacak şekilde yönlendirilmelidir. Yani cihaz yatay yönde tutulduğunda kameralar YATAŞ YÖNÜNDE resim ÇEKMELİDİR. Bu durum, cihazın doğal yöneliminden bağımsız olarak geçerlidir. Yani hem yatay birincil cihazlar hem de dikey birincil cihazlar için geçerlidir.
7.6. Bellek ve Depolama
7.6.1. Minimum Bellek ve Depolama
Android TV cihazlarında, uygulama özel verileri için en az 5 GB kalıcı depolama alanı OLMALIDIR.
Cihaz uygulamalarında çekirdeğin ve kullanıcı alanının kullanabileceği bellek, aşağıdaki tabloda belirtilen minimum değerlere en az eşit veya bu değerlerden büyük OLMALIDIR. (Ekran boyutu ve yoğunluğu tanımları için 7.1.1 numaralı bölüme bakın.)
Yoğunluk ve ekran boyutu | 32 bit cihaz | 64 bit cihaz |
---|---|---|
Android Watch cihazlar (küçük ekranlar nedeniyle) | 416MB | Geçerli değil |
|
424MB | 704MB |
|
512MB | 832MB |
|
896MB | 1.280 MB |
|
1344MB | 1.824 MB |
Minimum bellek değerleri, çekirdeğin kontrolü altında olmayan radyo, video vb. donanım bileşenlerine ayrılmış bellek alanına ek olarak OLMALIDIR.
Android Watch olmadığı sürece, çekirdek ve kullanıcı alanında 512 MB'tan az bellek bulunan cihaz uygulamaları ActivityManager.isLowRamDevice() için "true" değerini İYİ DEĞERLENDİRMELİDİR.
Android TV cihazlarında en az 5 GB, diğer cihaz uygulamalarında ise uygulama özel verileri için en az 1,5 GB kalıcı depolama alanı OLMALIDIR. Yani /data bölümü, Android TV cihazlar için en az 5 GB, diğer cihaz uygulamaları için en az 1,5 GB OLMALIDIR. Android çalıştıran cihaz uygulamalarının, gelecekteki platform sürümlerine yükseltebilmeleri için uygulama özel verileri için en az 3 GB kalıcı depolama alanına sahip olması çok önemle tavsiye edilir.
Android API'leri, uygulamaların veri dosyalarını indirmek için KULLANABİLECEKLERİ bir İndirme Yöneticisi içerir [Kaynaklar, 95]. İndirme Yöneticisi'nin cihaz uygulaması, en az 100 MB boyutunda dosyaları varsayılan "önbelleğe" konumuna indirebilmelidir.
7.6.2. Uygulama Ortak Depolama Alanı
Cihaz uygulamaları, genellikle "paylaşılan harici depolama alanı" olarak da adlandırılan uygulamalar için paylaşılan depolama alanı sunmalıdır.
Cihaz uygulamaları, varsayılan olarak "kutudan çıkar çıkmaz" ortak depolama alanı monte edilmiş şekilde yapılandırılmalıdır. Ortak depolama alanı, Linux /sdcard yoluna monte edilmemişse cihazda /sdcard ile gerçek montaj noktası arasında bir Linux sembolik bağlantısı bulunmalıdır.
Cihaz uygulamalarında, kullanıcının erişebileceği çıkarılabilir depolama alanı için Secure Digital (SD) kart yuvası gibi donanımlar OLABİLİR. Bu yuva, paylaşılan depolama alanı şartını karşılamak için kullanılırsa cihaz uygulaması:
- SD kart olmadığında kullanıcıyı uyaran bir pop-up veya pop-up kullanıcı arayüzü UYGULANMALIDIR.
- 1 GB veya daha büyük boyutta FAT biçimli bir SD kart İÇERMELİ VEYA SD kartın ayrı olarak satın alınması gerektiğini kutuda ve satın alma sırasında sunulan diğer materyallerde belirtmelidir.
- SD kartı varsayılan olarak bağlamalıdır.
Alternatif olarak, cihaz uygulamaları, yayın öncesi Android Open Source Project'e dahil edilen uygulamalar için dahili (çıkarılamaz) depolama alanını paylaşılan depolama alanı olarak AYRIŞTIRABİLİR. Cihaz uygulamaları bu yapılandırmayı ve yazılım uygulamasını KULLANMALIDIR. Bir cihaz uygulaması, ortak depolama alanı şartını karşılamak için dahili (çıkarılabilir olmayan) depolama alanı kullanıyorsa ve bu depolama alanı uygulamanın özel verileriyle yer paylaşabiliyorsa en az 1 GB boyutunda olmalı ve /sdcard'a bağlı olmalıdır (veya /sdcard, başka bir yere bağlıysa fiziksel konuma yönelik sembolik bir bağlantı olmalıdı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.
Birden fazla paylaşılan depolama yolu içeren cihaz uygulamaları (ör. hem SD kart yuvası hem de paylaşılan dahili depolama alanı), yalnızca önceden yüklenmiş ve WRITE_EXTERNAL_STORAGE iznine sahip ayrıcalıklı Android uygulamalarının ikincil harici depolama alanına yazmasına izin VERMELİDİR. Bu izin, pakete özel dizinlere veya ACTION_OPEN_DOCUMENT_TREE
intent'inin tetiklenmesiyle döndürülen URI
içinde yazma işlemi hariçtir.
Ancak cihaz uygulamalarında, Android'in medya tarayıcısı hizmeti ve android.provider.MediaStore aracılığıyla her iki depolama yolundaki içerikler şeffaf bir şekilde gösterilmelidir.
Kullanılan paylaşılan depolama alanı biçiminden bağımsız olarak, cihaz uygulamasında USB çevre birimi modu desteğine sahip bir USB bağlantı noktası varsa ana bilgisayardan paylaşılan depolama alanının içeriğine erişmek için bir mekanizma sağlanmalıdır. Cihaz uygulamalarında USB yığın depolama kullanılabilir ancak bu koşulu karşılamak için Medya Aktarım Protokolü KULLANILMALIDIR. Cihaz uygulaması Medya Aktarımı Protokolü'nü destekliyorsa:
- Referans Android MTP ana makinesiyle (Android Dosya Aktarımı) UYUMLU OLMALIDIR [Kaynaklar, 96].
- 0x00 USB cihaz sınıfını raporlamalıdır.
- "MTP" USB arayüzü adını bildirmelidir.
7.7. USB
Cihaz uygulamaları USB çevre birimi modunu ve USB ana makine modunu DESTEKLEMELİDİR.
Bir cihaz uygulaması, çevre birimi modunu destekleyen bir USB bağlantı noktası içeriyorsa:
- Bağlantı noktası, standart A tipi veya C tipi USB bağlantı noktası olan bir USB ana makinesine bağlanabilmelidir.
- Bağlantı noktası, mikro-B, mikro-AB veya Type-C USB form faktörünü KULLANMALIDIR. Mevcut ve yeni Android cihazların, gelecekteki platform sürümlerine yükseltebilmeleri için bu şartları karşılaması önemle ÖNERİLİR.
- Bağlantı noktası, cihazın alt kısmında (doğal yönde) yer almalı veya cihazın bağlantı noktası alt tarafta olacak şekilde yönlendirildiğinde ekranın doğru şekilde çizilmesi için tüm uygulamalarda (ana ekran dahil) yazılım ekranı döndürmeyi etkinleştirmelidir. Mevcut ve yeni Android cihazların, gelecekteki platform sürümlerine yükseltebilmeleri için BU ŞARTLARI KARŞILAMASI KESİNLİKLE ÖNERİLİR.
- Android SDK dokümanlarında belirtildiği gibi Android Open Accessory (AOA) API'yi ve spesifikasyonunu UYGULAMALIDIR. Android el cihazı ise AOA API'yi UYGULAMALIDIR. AOA spesifikasyonunu uygulayan cihaz uygulamaları:
- android.hardware.usb.accessory donanım özelliği için destek BEYAN EDİLMELİDİR [Kaynaklar, 97].
- USB ses sınıfını Android SDK dokümanlarında [Kaynaklar, 98] belirtildiği şekilde UYGULAMALIDIR.
- USB Pil Şarjı Spesifikasyonu, 1.2 Düzeltme [Kaynaklar, 99] bölümünde belirtildiği gibi, HS cıvıltısı ve trafiği sırasında 1,5 A akım çekme desteği UYGULANMALIDIR. Mevcut ve yeni Android cihazların, gelecekteki platform sürümlerine yükseltebilmeleri için bu şartları karşılaması önemle ÖNERİLİR.
- USB standart cihaz tanımlayıcısı içindeki iSerialNumber değerinin, android.os.Build.SERIAL değerine EŞİT OLMASI GEREKİR.
Bir cihaz uygulaması, ana makine modunu destekleyen bir USB bağlantı noktası içeriyorsa:
- Cihaz uygulaması USB 3.1'i destekliyorsa Type-C USB bağlantı noktası KULLANMALIDIR.
- Standart olmayan bir bağlantı noktası form faktörü KULANILABİLİR ancak bu durumda, bağlantı noktasını standart bir A tipi veya C tipi USB bağlantı noktasına uyarlayan bir kablo veya kablolar İÇİNDE OLMALIDIR.
- Mikro-AB USB bağlantı noktası kullanabilir ancak bu durumda bağlantı noktasını standart bir A tipi veya C tipi USB bağlantı noktasına uyarlayan bir kablo veya kablolar ile birlikte gönderilmelidir.
- USB ses sınıfını Android SDK dokümanlarında [Kaynaklar, 98] belirtildiği şekilde uygulamanız ÇOK ÖNEMLE TAVSİYE EDİLİR.
- Android USB ana makine API'sini Android SDK'da belirtildiği şekilde uygulamalı ve android.hardware.usb.host donanım özelliği için destek belirtmelidir [Kaynaklar, 100].
- USB Pil Şarjı Spesifikasyonu, 1.2 Düzeltme [Kaynaklar, 99] bölümünde belirtildiği gibi 1,5 A ~ 5 A aralığındaki Şarj Aşağı Akım Bağlantı Noktası çıkış akımı desteklenmelidir.
7.8. Ses
7.8.1. Mikrofon
Android El Cihazları, Kol Saatleri ve Otomotiv uygulamaları MİKROFON içermelidir.
Cihaz uygulamalarında mikrofon atlanabilir. Ancak bir cihaz uygulamasında mikrofon atlanmışsa 7. bölüm uyarınca android.hardware.microphone özellik sabitini bildirmemelidir ve ses kaydı API'sini en azından işlemsiz olarak uygulamalıdır. Mikrofonu olan cihaz uygulamaları ise:
- android.hardware.microphone özellik sabitini bildirmelidir
- 5.4 numaralı bölümdeki ses kaydı koşullarını karşılamalıdır.
- 5.6 numaralı bölümdeki ses gecikmesi koşullarını karşılamalıdır.
7.8.2. Ses Çıkışı
Android Watch cihazlar ses çıkışı İÇERMEYEBİLİR.
Hoparlör içeren veya kulaklık ya da harici hoparlör gibi ses çıkışı çevre birimi için ses/multimedya çıkış bağlantı noktası bulunan cihaz uygulamaları:
- android.hardware.audio.output özellik sabitini ZORUNLUDIR.
- 5.5 numaralı bölümdeki ses çalma koşullarını karşılamalıdır.
- 5.6 numaralı bölümdeki ses gecikmesi koşullarını karşılamalıdır.
Buna karşılık, bir cihaz uygulaması hoparlör veya ses çıkışı bağlantı noktası içermiyorsa android.hardware.audio çıkış özelliğini HİÇBİR ZAMAN bildirmemelidir ve ses çıkışıyla ilgili API'leri en azından işlemsiz olarak uygulamalıdır.
Android Watch cihaz uygulamasında ses çıkışı OLABİLİR ancak OLMASI GEREKMEZ. Diğer Android cihaz uygulamalarında ise ses çıkışı OLMALI ve android.hardware.audio.output belirtilmelidir.
7.8.2.1. Analog Ses Bağlantı Noktaları
Android ekosisteminde [Kaynaklar, 101] 3,5 mm ses fişini kullanan mikrofonlu kulaklıklarla ve diğer ses aksesuarlarıyla uyumlu olması için bir cihaz uygulamasında bir veya daha fazla analog ses bağlantı noktası varsa ses bağlantı noktalarından en az biri 4 iletkenli 3, 5 mm ses jakı OLMALIDIR. Bir cihaz uygulamasında 4 iletkenli 3, 5 mm ses jakı varsa:
- Mikrofonlu stereo kulaklıklarda ve stereo kulaklıklarda ses oynatmayı destekleMELİDİR ve mikrofonlu stereo kulaklıklarda ses kaydetmeyi DESTEKLEMELİDİR.
- CTIA pin çıkış sırasına sahip TRRS ses fişlerini destekleMELİDİR ve OMTP pin çıkış sırasına sahip ses fişlerini destekleMELİDİR.
- Cihaz uygulaması mikrofonu destekliyorsa takılı ses aksesuarındaki mikrofonun algılanması desteklenmeli ve android.intent.action.HEADSET_PLUG etkinliği, ek değer mikrofonu 1 olarak ayarlanarak yayınlanmalıdır.
- Ses fişiğindeki mikrofon ile toprak iletkenleri arasındaki eşdeğer empedans aralığının aşağıdaki 3 aralığı için algılama ve anahtar kodlarıyla eşleme desteklenmelidir:
- 70 ohm veya daha az: KEYCODE_HEADSETHOOK
- 210-290 Ohm: KEYCODE_VOLUME_UP
- 360-680 Ohm: KEYCODE_VOLUME_DOWN
- Ses fişindeki mikrofon ve toprak iletkenleri arasındaki eşdeğer empedans aralığı için anahtar koduyla algılama ve eşleme desteklenmelidir:
- 110-180 Ohm: KEYCODE_VOICE_ASSIST
- Fiş takıldığında ACTION_HEADSET_PLUG etkinleştirilmelidir ancak yalnızca fişteki tüm temas noktaları, jaktaki ilgili segmentlerine değdikten sonra etkinleştirilmelidir.
- 32 Ohm hoparlör empedansında en az 150 mV +/- çıkış voltajının% 10'unu sürebilecek olmalıdır.
- Mikrofon önyargı voltajı 1,8 V ile 2,9 V arasında OLMALIDIR.
8. Performans Uyumluluğu
Bazı minimum performans ölçütleri kullanıcı deneyimi açısından kritiktir ve geliştiricilerin uygulama geliştirirken kullanacağı temel varsayımları etkiler. Android Watch cihazlar ŞART OLMAK ÜZERE, diğer cihaz türleri ise MUTLAKA aşağıdaki ölçütleri karşılamalıdır:
8.1. Kullanıcı Deneyimi Tutarlılığı
Cihaz uygulamaları, uygulamalar ve oyunlar için tutarlı bir kare hızı ve yanıt süreleri sağlayarak sorunsuz bir kullanıcı arayüzü sunmalıdır. Cihaz uygulamalarının aşağıdaki koşulları karşılaması GEREKİR:
- Tutarlı kare gecikmesi. Tutarlı olmayan kare gecikmesi veya kare oluşturma gecikmesi saniyede 5 kareden fazla olmamalı ve saniyede 1 kareden az olmalıdır.
- Kullanıcı arayüzü gecikmesi. Cihaz uygulamalarında, Android Uyumluluk Testi Paketi (CTS) tarafından tanımlandığı şekilde 10.000 liste girişinin yer aldığı bir listeyi 36 saniyeden kısa sürede kaydırarak düşük gecikmeli kullanıcı deneyimi sağlanmalıdır.
- Görev değiştirme. Birden fazla uygulama başlatıldığında, başlatılmış bir uygulamanın yeniden başlatılması 1 saniyeden kısa sürmelidir.
8.2. Dosya G/Ç Erişim Performansı
Cihaz uygulamaları, okuma ve yazma işlemleri için dahili depolama dosya erişimi performansının tutarlı olmasını SAĞLAMALIDIR.
- Sıralı yazma. Cihaz uygulamalarında, 10 MB yazma arabelleği kullanılarak 256 MB'lık bir dosya için en az 5 MB/sn'lik sıralı yazma performansı SAĞLANMALIDIR.
- Rastgele yazma. Cihaz uygulamalarında, 4 KB yazma arabelleği kullanılarak 256 MB'lık bir dosya için en az 0,5 MB/sn rastgele yazma performansı sağlanmalıdır.
- Sıralı okuma. Cihaz uygulamaları, 10 MB yazma arabelleği kullanarak 256 MB'lık bir dosya için en az 15 MB/sn'lik sıralı okuma performansı sağlamalıdır.
- Rastgele okuma. Cihaz uygulamaları, 4 KB yazma arabelleği kullanarak 256 MB'lık bir dosya için en az 3,5 MB/sn rastgele okuma performansı sağlamalıdır.
9. Güvenlik Modeli Uyumluluğu
Cihaz uygulamalarında, Android geliştirici dokümanlarında API'ler [Kaynaklar, 102] 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.
9.1. İzinler
Cihaz uygulamaları, Android geliştirici belgelerinde [Kaynaklar, 102] tanımlandığı şekilde Android izin modelini DESTEKLEMELİDİR. Özellikle, SDK dokümanlarında açıklandığı şekilde tanımlanan her izin uygulanmalıdır. 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.
9.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, 102] tanımlandığı şekilde uygulamaların düzgün şekilde imzalanmış ve oluşturulmuş olması koşuluyla, aynı Linux kullanıcı kimliğiyle birden fazla uygulamanın çalıştırılması desteklenmelidir.
9.3. Dosya sistemi izinleri
Cihaz uygulamaları, Güvenlik ve İzinler referansında [Kaynaklar, 102] tanımlandığı şekilde Android dosya erişim izinleri modelini DESTEKLEMELİDİR.
9.4. Alternatif Yürütme Ortamları
Cihaz uygulamaları, Dalvik Yürütülebilir Formatı veya yerel koddan başka bir yazılım ya da teknoloji kullanarak uygulamaları yürüten çalışma ortamı içerebilir. Ancak bu tür alternatif yürütme ortamları, bu bölümde açıklandığı gibi Android güvenlik modelini veya yüklü Android uygulamalarının güvenliğini ÖNEMLİ ÖLÇÜDE ETKİLEMEmelidir.
Alternatif çalışma ortamları Android uygulamaları OLMALIDIR ve 9. bölümde başka bir yerde açıklandığı gibi standart Android güvenlik modeline uymalıdır.
Alternatif çalışma zamanlarına, çalışma zamanının AndroidManifest.xml dosyasında <uses-permission> mekanizması aracılığıyla istenmeyen izinlerle korunan kaynaklara erişim İZİN VERİLMEMELİDİR.
Alternatif çalışma zamanları, uygulamaların sistem uygulamalarıyla kısıtlanmış Android izinleriyle korunan özellikleri kullanmasına İZİN VERMEMELİDİR.
Alternatif çalışma zamanları Android korumalı alan modeline UYGUN OLMALIDIR. Daha ayrıntılı olarak, alternatif çalışma süreleri:
- Uygulamaları PackageManager aracılığıyla ayrı Android korumalı alanlarına (Linux kullanıcı kimlikleri vb.) yüklemelidir.
- Alternatif çalışma zamanını kullanan tüm uygulamalar tarafından paylaşılan tek bir Android korumalı alanı sağlayabilir.
- ve alternatif bir çalışma zamanı kullanan uygulamalar, cihaza yüklenen diğer uygulamaların korumalı alanını, paylaşılan kullanıcı kimliği ve imzalama sertifikası gibi standart Android mekanizmaları dışında TEKRAR KULLANMAMALIDIR.
- Diğer Android uygulamalarına karşılık gelen korumalı alanlarla başlatılmamalı, bu alanlara erişim izni verilmemeli veya bu alanlara erişim izni verilmemelidir.
- Süper kullanıcının (root) veya başka bir kullanıcı kimliğinin ayrıcalıklarıyla başlatılmamalı, bu ayrıcalıklara sahip olmamalı ya da diğer uygulamalara bu ayrıcalıkları vermemelidir.
Alternatif çalışma zamanlarının .apk dosyaları bir cihaz uygulamasının sistem resmine DAHİL EDİLEBİLİR ancak cihaz uygulamasına dahil edilen diğer uygulamaları imzalamak için kullanılan anahtardan farklı bir anahtarla İMZALANACAK.
Alternatif çalışma zamanları, uygulamaları yüklerken uygulama tarafından kullanılan Android izinleri için kullanıcı izni ALMAK ZORUNDADIR. Bir uygulamanın, karşılık gelen bir Android izninin bulunduğu bir cihaz kaynağını (ör. kamera, GPS vb.) kullanması gerekiyorsa alternatif çalışma zamanı, kullanıcıyı uygulamanın bu kaynağa erişebileceği konusunda BİLGİLENDİRMELİDİR. Çalışma zamanı ortamı, uygulama özelliklerini bu şekilde kaydetmiyorsa çalışma zamanı ortamı, bu çalışma zamanını kullanan herhangi bir uygulamayı yüklerken çalışma zamanının sahip olduğu tüm izinleri LİSTELEMELİDİR.
9.5. Çok Kullanıcılı Destek
Bu özellik tüm cihaz türleri için isteğe bağlıdır.
Android, birden fazla kullanıcıyı destekler ve tam kullanıcı yalıtımı için destek sağlar [Kaynaklar, 103]. Cihaz uygulamaları birden fazla kullanıcıyı etkinleştirebilir ancak etkinleştirildiğinde çok kullanıcılı destek [Kaynaklar, 104] ile ilgili aşağıdaki koşulları karşılamalıdır:
- android.hardware.telephony özellik işaretini bildirmeyen cihaz uygulamalarında, cihaz sahiplerinin ek kullanıcıları ve cihazdaki özelliklerini yönetmelerine olanak tanıyan kısıtlanmış profiller desteklenmelidir. Kısıtlanmış profiller sayesinde cihaz sahipleri, ek kullanıcıların çalışabileceği ayrı ortamları hızlıca ayarlayabilir ve bu ortamlarda bulunan uygulamalarda daha ayrıntılı kısıtlamalar yönetebilir.
- Buna karşılık, android.hardware.telephony özellik işaretini açıklayan cihaz uygulamaları, kısıtlanmış profilleri destekleMEMELİ ancak diğer kullanıcıların sesli aramalara ve SMS'lere erişmesini etkinleştirmek /devre dışı bırakmak için kontrollerin AOSP uygulamasıyla uyumlu OLMALIDIR.
- Cihaz uygulamaları, her kullanıcı için API'lerdeki Güvenlik ve İzinler referans belgesinde [Kaynaklar, 102] tanımlandığı şekilde Android platform güvenlik modeliyle tutarlı bir güvenlik modeli UYGULAMALIDIR.
- Cihaz uygulamaları, android.app.admin.DevicePolicyManager API'leri aracılığıyla kullanıcı ve yönetilen profil oluşturmayı DESTEKLEYEBİLİR ve destekleniyorsa platform özellik işareti android.software.managed_users'ı İLAN ETMEK ZORUNDADIR.
- android.software.managed_users özellik işaretini açıklayan cihaz uygulamaları, yönetilen uygulamaları ve Son Aramalar ve Bildirimler gibi diğer rozet kullanıcı arayüzü öğelerini temsil etmek için yayın öncesi AOSP simge rozetini KULLANMAK ZORUNDADIR.
- Android cihazdaki her kullanıcı örneğinin ayrı ve izole harici depolama alanı dizinleri OLMALIDIR. Cihaz uygulamaları, birden fazla kullanıcının verilerini aynı birimde veya dosya sisteminde DEPOLAYABİLİR. Ancak cihaz uygulaması, belirli bir kullanıcıya ait olan ve bu kullanıcı adına çalışan uygulamaların başka bir kullanıcıya ait verileri listelemesini, okumasını veya bu verilere yazmasını ÖNLEMELİDİR. SD kart yuvaları gibi çıkarılabilir medyaların, bir kullanıcının ana bilgisayar kullanarak başka bir kullanıcının verilerine erişmesine izin verebileceğini unutmayın. Bu nedenle, birincil harici depolama API'leri için çıkarılabilir medya kullanan cihaz uygulamalarında, çok kullanıcılı mod etkinleştirildiyse SD kartın içeriği yalnızca sisteme erişilebilen, çıkarılabilir olmayan medyada depolanan bir anahtar kullanılarak şifrelenmelidir. Bu durumda, medya ana bilgisayar tarafından okunamaz hale geleceği için cihaz uygulamalarının, ana bilgisayarlara mevcut kullanıcının verilerine erişim sağlamak için MTP'ye veya benzer bir sisteme geçmesi gerekir. Buna göre, cihaz uygulamaları birincil harici depolama için çıkarılabilir medya [Kaynaklar, 105] kullanıyorsa çok kullanıcılı özelliği etkinleştirebilir ancak etkinleştirmemelidir.
9.6. Premium SMS Uyarısı
Android, kullanıcıları giden premium SMS mesajları konusunda uyarma desteği içerir [Kaynaklar, 106] . Premium SMS mesajları, operatöre kayıtlı bir hizmete gönderilen ve kullanıcıdan ücret alınabilecek kısa mesajlardır. android.hardware.telephony desteğini beyan eden cihaz uygulamaları, cihazdaki /data/misc/sms/codes.xml dosyasında tanımlanan normal ifadeyle tanımlanan numaralara SMS mesajı göndermeden önce kullanıcıları uyarmalıdır. Android Açık Kaynak Projesi, bu koşulu karşılayan bir uygulama sağlar.
9.7. Çekirdek Güvenlik Özellikleri
Android Korumalı Alanı, Güvenlik Gelişmiş Linux (SELinux) zorunlu erişim denetimi (MAC) sistemini ve Linux çekirdeğindeki diğer güvenlik özelliklerini kullanabilen özellikler içerir. Android çerçevesinin altında uygulanmışsa SELinux veya başka güvenlik özellikleri:
- Mevcut uygulamalarla uyumluluğu KORUMALIDIR.
- Bir güvenlik ihlali algılandığında ve başarılı bir şekilde engellendiğinde görünür bir kullanıcı arayüzü OLMAMALIDIR ancak engellenmemiş bir güvenlik ihlali meydana geldiğinde ve bu ihlal başarılı bir şekilde istismar edildiğinde görünür bir kullanıcı arayüzü OLABİLİR.
- Kullanıcı veya geliştirici tarafından yapılandırılaBİLMELİDİR.
Politika yapılandırması için herhangi bir API, başka bir uygulamayı etkileyebilecek bir uygulamaya (ör. Device Administration API) maruz bırakılırsa API, uyumluluğu bozan yapılandırmalara İZİN VERMEMELİDİR.
Cihazlar, Linux dışında bir çekirdek kullanıyorsa SELinux'u veya eşdeğer bir zorunlu erişim denetimi sistemini uygulamalı ve yayın öncesi Android Open Source Project'teki referans uygulama tarafından karşılanan aşağıdaki koşulları karşılamalıdır.
Cihaz uygulamaları:
- SELinux modunun alan bazında ayarlanmasına izin veren bir SELinux politikasını DESTEKLEMELİDİR ve tüm alanları zorunlu modda yapılandırmalıdır. Cihaz/tedarikçi firmaya özgü alanlar da dahil olmak üzere izin verilen mod alan adlarına izin verilmez.
- Politika, cihazdaki /sepolicy dosyasından YÜKLENMEKTEDİR.
- Yukarı akış Android Açık Kaynak Projesi'nde (AOSP) sağlanan sepolicy dosyasında bulunan neverallow kurallarını DEĞİŞTİRMEMELİ, EKSİLTMEMELİ veya DEĞİŞTİRMEMELİDİR ve politika hem AOSP SELinux alanları hem de cihaza/tedarikçiye özgü alanlar için mevcut tüm neverallow ile derlenmelidir.
- Sistem görüntüsünün güncellenmesine gerek kalmadan SELinux politika dosyasının dinamik güncellemelerini desteklemelidir.
Cihaz uygulamaları, SELinux politikasına yaptıkları eklemeleri ilk kez denetleyene kadar, yayın öncesi Android Açık Kaynak Projesi'nde sağlanan varsayılan SELinux politikasını SAKLAMALIDIR. Cihaz uygulamaları, yayın öncesi Android Açık Kaynak Projesi ile UYUMLU OLMALIDIR.
9.8. Gizlilik
Cihaz, sistemde ekranda gösterilen içerikleri yakalayan ve/veya cihazda çalınan ses akışını kaydeden bir işlev uygularsa bu işlev etkinleştirildiğinde ve etkin bir şekilde yakalama/kayıt yapıldığında kullanıcıyı sürekli olarak bilgilendirmelidir.
Bir cihaz uygulamasında, ağ veri trafiğini varsayılan olarak bir proxy sunucusu veya VPN ağ geçidi üzerinden yönlendiren bir mekanizma varsa (ör. android.permission.CONTROL_VPN izni verilen bir VPN hizmetinin önceden yüklenmesi) cihaz uygulaması bu mekanizmayı etkinleştirmeden önce kullanıcının iznini İSTEMELİDİR.
9.9. Tam Disk Şifreleme
Kilit ekranı olmayan Android cihaz uygulamaları için isteğe bağlıdır.
Cihaz uygulaması PIN (sayısal) veya ŞİFRE (alfanümerik) içeren bir kilit ekranını destekliyorsa cihaz, uygulamanın gizli verilerinin (/data bölümü) yanı sıra cihazın kalıcı ve çıkarılamayan bir parçasıysa SD kart bölümünün de tam disk şifrelemesini DESTEKLEMELİDİR [Kaynaklar, 107]. Tam disk şifrelemeyi destekleyen cihazlarda, kullanıcı kutudan çıkar çıkmaz deneyimi tamamladıktan sonra tam disk şifrelemesi HER ZAMAN etkinleştirilmelidir. Bu şart, Android platformunun bu sürümü için "OLMALI" olarak belirtilse de Android'in gelecekteki sürümlerinde "ZORUNLU" olarak değişmesini beklediğimiz için çok önemle ÖNERİLİR. Şifreleme, 128 bit (veya daha büyük) anahtar ve depolama için tasarlanmış bir mod (ör. AES-XTS, AES-CBC-ESSIV) ile AES kullanmalıdır. Şifreleme anahtarı, şifrelenmeden hiçbir zaman depolama alanına YAZILMAMALIDIR. Aktif kullanım dışında, şifreleme anahtarı yavaş bir germe algoritması (ör. PBKDF2 veya scrypt) kullanılarak gerilmiş kilit ekranı şifresiyle AES şifrelenmelidir. Kullanıcı kilit ekranı geçiş kodu belirtmediyse veya şifreleme için geçiş kodunun kullanımını devre dışı bıraktıysa sistem, şifreleme anahtarını sarmalamak için varsayılan bir geçiş kodu KULLANMALIDIR. Cihaz donanım destekli bir anahtar mağazası sağlıyorsa şifre uzatma algoritması kriptografik olarak bu anahtar mağazasına BAĞLI OLMALIDIR. Şifreleme anahtarı cihazdan gönderilMEMELİDİR (kullanıcı şifresi ve/veya donanıma bağlı anahtarla sarmalanmış olsa bile). Yukarı yönlü Android Açık Kaynak projesi, dm-crypt Linux çekirdek özelliğine dayalı olarak bu özelliğin tercih edilen bir uygulamasını sağlar.
9.10. Doğrulanmış Başlatma
Doğrulanmış başlatma, cihaz yazılımının bütünlüğünü garanti eden bir özelliktir. Bir cihaz uygulaması özelliği destekliyorsa ŞUNLARI YAPMASI GEREKİR:
- android.software.verified_boot platform özellik işaretini tanımlama
- Her önyükleme sırasında doğrulama gerçekleştirme
- Doğrulamayı, güven kökü olan bir donanım anahtarından başlayıp sistem bölümüne kadar devam ettirerek yapın
- Bir sonraki aşamadaki kodu yürütmeden önce, doğrulama aşamalarının her birini uygulayarak bir sonraki aşamadaki tüm baytların bütünlüğünü ve özgünlüğünü kontrol edin.
- Karma oluşturma algoritmaları (SHA-256) ve ortak anahtar boyutları (RSA-2048) için NIST'nin mevcut önerileri kadar güçlü doğrulama algoritmaları kullanın
Cihaz uygulamaları, cihaz bütünlüğü için doğrulanmış başlatmayı DESTEKLEMELİDİR. Bu şart, Android platformunun bu sürümü için "OLMALI" olsa da Android'in gelecekteki sürümlerinde "OLMALI" olarak değişmesini beklediğimiz için önemle ÖNERİLİR. Yukarı yönlü Android Açık Kaynak Projesi, dm-verity Linux çekirdeği özelliğine dayalı olarak bu özelliğin tercih edilen bir uygulamasını sağlar.
10. Yazılım Uyumluluğu Testi
Cihaz uygulamaları bu bölümde açıklanan tüm testleri ZORUNLU ŞEKİLDE geçmelidir.
Ancak hiçbir yazılım test paketinin her şeyi kapsamadığını unutmayın. Bu nedenle, cihaz uygulayıcılarının Android Açık Kaynak Projesi'nde bulunan Android referans ve tercih edilen uygulamasında mümkün olduğunca az değişiklik yapmaları çok önemle tavsiye edilir. Bu, yeniden çalışma ve olası cihaz güncellemeleri gerektiren uyumsuzluklara neden olan hatalar ekleme riskini en aza indirir.
10.1. Compatibility Test Suite
Cihaz uygulamalarında, cihazda bulunan nihai gönderim yazılımı kullanılarak Android Open Source Project'ten edinilebilen Android Uyumluluk Test Paketi (CTS) [Kaynaklar, 108] testini ZORUNLU KILINACAK. 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ımda olduğu gibi CTS'de de hatalar olabilir. CTS, bu Uyumluluk Tanımı'ndan bağımsız olarak sürümlenir ve Android 5.1 için CTS'nin birden fazla düzeltmesi yayınlanabilir. Cihaz uygulamaları, cihaz yazılımı tamamlandığında mevcut olan en son CTS sürümünü ZORUNLU KILINCAK şekilde geçmelidir.
10.2. CTS Doğrulayıcı
Cihaz uygulamaları, CTS Doğrulayıcı'da geçerli tüm durumları doğru şekilde yürütmelidir. CTS Doğrulayıcı, Uyumluluk Test Paketi'ne dahildir ve kameranın ve sensörlerin doğru çalışması gibi otomatik bir sistem tarafından test edilemeyecek işlevleri test etmek için bir operatör tarafından çalıştırılmak üzere tasarlanmıştır.
CTS Doğrulayıcı, isteğe bağlı olan bazı donanımlar da dahil olmak üzere birçok donanım türü için testler içerir. Cihaz uygulamaları, sahip oldukları donanımla ilgili tüm testleri GEÇMELİDİR. Örneğin, bir cihazda ivme ölçer varsa CTS Doğrulayıcı'da ivme ölçer testini doğru şekilde yürütmelidir. Bu Uyumluluk Tanımlama Belgesi'nde isteğe bağlı olarak belirtilen özelliklerle ilgili test durumları atlanabilir veya çıkarılabilir.
Her cihaz ve her derleme, yukarıda belirtildiği gibi CTS Doğrulayıcı'yı doğru şekilde çalıştırmalıdır. Ancak birçok derleme birbirine çok benzediğinden, cihaz uygulayıcılarının yalnızca önemsiz farklılıklar gösteren derlemelerde CTS Doğrulayıcı'yı açıkça çalıştırması beklenmez. Özellikle, CTS Doğrulayıcı'yı yalnızca dahil edilen yerel ayarların, markanın vb. kümesiyle geçmiş bir uygulamadan farklı olan cihaz uygulamaları CTS Doğrulayıcı testini EKSLEYEBİLİR.
11. 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üncellemeyle "Kablosuz (OTA)" indirme
- 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
Ancak cihaz uygulaması, 802.11 veya Bluetooth PAN (Kişisel Alan Ağı) profili gibi sınırsız veri bağlantısı desteği içeriyorsa:
- Android Automotive uygulamaları, yeniden başlatma yoluyla çevrimdışı güncellemeyle OTA indirmelerini DESTEKLEMELİDİR.
- Diğer tüm cihaz uygulamaları, yeniden başlatma yoluyla çevrimdışı güncellemeyle OTA indirmelerini desteklemelidir.
Kullanılan güncelleme mekanizması, kullanıcı verilerini silmeden güncellemeleri desteklemelidir. Yani güncelleme mekanizması, uygulamanın gizli verilerini ve paylaşılan verilerini muhafaza ETMELIDİR. Yukarı akış Android yazılımının bu koşulu karşılayan bir güncelleme mekanizması içerdiğini unutmayın.
Android 5.1 ve sonraki sürümlerle kullanıma sunulan cihaz uygulamalarında güncelleme mekanizması, OTA'dan sonra sistem görüntüsünün ikili olarak beklenen sonuçla aynı olduğunu doğrulamayı DESTEKLEMELİDİR. Android 5.1'den beri eklenen, yayın öncesi Android Açık Kaynak Projesi'ndeki blok tabanlı OTA uygulaması bu koşulu karşılar.
Bir cihaz uygulamasında, cihaz kullanıma sunulduktan sonra ancak Android Uyumluluk Ekibi ile görüşülerek 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üncellemesiyle DÜZELTMEKTE ZORUNLUDUR.
12. Doküman Değişiklik Günlüğü
Aşağıdaki tabloda, bu sürümde Uyumluluk Tanımı'nda yapılan değişikliklerin özeti yer almaktadır.
Bölüm | Değişiklik özeti |
---|---|
2. Cihaz Türleri | Android Automotive uygulaması için tanım eklendi. |
2.1 Cihaz Yapılandırmaları | Android otomotiv uygulaması için sütun eklendi. |
3.3.2. 32 bit ARM Yerel Kod Uyumluluğu | Yeni bölüm eklendi. |
3.4.1. WebView Uyumluluğu | Web Görünümü kullanıcı aracısı dizesi koşulu, yayın öncesi uygulama değişikliğine uyum sağlamak için güncellendi. |
3.4.2. Tarayıcı uyumluluğu | Tarayıcı uygulamasını atlayabilecek başka bir durum olarak Android otomotiv uygulamalarını ekledik. |
3.7. Çalışma Zamanı Uyumluluğu | Daha küçük ekranlar için gerekli çalışma zamanı yığın boyutu güncellendi ve yeni dpi paketi (280 dpi) için şart eklendi. |
3.8.3. Bildirimler | Android Watch, Television ve Automotive uygulamaları için bildirim şartı netleştirildi. |
3.8.8. Etkinlik Değiştirme | Genel Bakış başlığı sayısı şartını gevşetme. |
3.8.10. Kilit Ekranı Medya Denetimi | Android Watch ve Automotive uygulamaları için şart açıklandı. |
3.8.13. Unicode ve yazı tipi | Emoji karakter girişi yöntemi şartı gevşetildi. |
3.9. Cihaz Yönetimi | Cihaz yönetimi politikalarının tamamının desteklenmesi gerektiğinde koşulun netleştirilmesi |
3.10. Erişilebilirlik | Android Auto şartları eklendi. |
3.11. Metin Okuma | Android Auto şartları eklendi. |
5.1. Medya codec'leri | CamcorderProfile tarafından bildirilen codec'ler için zorunlu kod çözme desteği. |
5.1.3 Video codec'leri | Android Auto şartları eklendi. |
5.4. Ses Kaydetme | ZORUNLU koşulların ZORUNLU olarak okunmasını sağlamak için bölümün başındaki dil netleştirildi. |
7.1.1.3. Ekran Yoğunluğu | Yeni bir ekran dpi'si (280 dpi) eklendi. |
7.1.5. Eski Uygulama Uyumluluğu Modu | Android Auto şartları eklendi. |
7.2 Giriş Cihazları | Genel giriş beyanı eklendi. |
7.2.1. Klavye | Android Automotive şartları eklendi. |
7.2.3. Gezinme Tuşları | Android Automotive şartları eklendi. |
7.3.1. İvme ölçer | Android Watch'ta raporlama sıklığıyla ilgili şartta esneklik sağlandı. |
7.3.4. Jiroskop | Android Watch'ta raporlama sıklığıyla ilgili şartta esneklik sağlandı. |
7.4.3 Bluetooth | Android Automotive şartları eklendi. |
7.4.4. Yakın Alan İletişimi | Ana kart emülasyonunun zorunlu olduğu durumlarla ilgili koşul açıklandı. |
7.6.1. Minimum Bellek ve Depolama | Düşük çözünürlüklü ekranlı cihazlar için minimum bellek gereksinimleri güncellendi ve isLowRamDevice() sert sınır koşulu eklendi. |
7.6.2. Uygulama Ortak Depolama Alanı | Ana makine erişimi desteği zorunlu olduğunda güncellenmiş şartlar. |
7.7 USB | USB bölümündeki yazım hatalarını düzeltme |
7.6.2. Uygulama Ortak Depolama Alanı | Önceden yüklenmiş sistem uygulamalarının ikincil harici depolamaya yazabileceğiyle ilgili şartlar güncellendi. |
7.6.2. Uygulama Ortak Depolama Alanı | Uygulamalar, ikincil harici depolamaya yazmak için ACTION_OPEN_DOCUMENT_TREE iznini kullanabilir. |
7.6.2. Uygulama Ortak Depolama Alanı | /sdcard'ın /data ile depolama alanı paylaşabileceğini açıklayın |
7.7 USB | 7.7'den itibaren UMS/MTP'deki gereksiz koşulu kaldırma |
7.8.1. Mikrofon | Android Automotive şartları eklendi. |
8.2. Dosya G/Ç Erişim Performansı | Açıklanmış şartlar. |
9.5. Çok Kullanıcılı Destek | Birincil harici depolama alanı için SD kart şifrelemesi gerekir. |
9.8. Gizlilik | Önceden yüklenmiş VPN'ler için gizlilik şartı eklendi. |
9.9. Tam Disk Şifreleme | Tam disk şifreleme desteğinin zorunlu olduğu durum açıklandı. |
9.10. Doğrulanmış Başlatma | Doğrulanmış başlatmanın tanımı netleştirildi. |
11. Güncellenebilir Yazılımlar | OTA indirme koşuluna izin verildiği ancak Android Automotive uygulamalarında zorunlu olmadığı açıklandı. |
13. Bize Ulaşın
Android uyumluluk forumuna [Kaynaklar, 109] katılabilir, açıklama isteyebilir veya dokümanda ele alınmadığını düşündüğünüz sorunları gündeme getirebilirsiniz.
14. Kaynaklar
1. IETF RFC2119 Şart Düzeyleri: http://www.ietf.org/rfc/rfc2119.txt
2. Android Açık Kaynak Projesi: http://source.android.com/
3. Android Television özellikleri: http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK
4. Android Watch özelliği: http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH
5. API tanımları ve dokümanları: http://developer.android.com/reference/packages.html
6. Android izinleri referansı: http://developer.android.com/reference/android/Manifest.permission.html
7. android.os.Build referansı: http://developer.android.com/reference/android/os/Build.html
8. Android 5.1'e izin verilen sürüm dizeleri: http://source.android.com/compatibility/5.1/versions.html
9. Telefon Hizmeti Sağlayıcı: http://developer.android.com/reference/android/provider/Telephony.html
10. Ana makineye dayalı kart emülasyonu: http://developer.android.com/guide/topics/connectivity/nfc/hce.html
11. Android Uzatma Paketi: http://developer.android.com/guide/topics/graphics/opengl.html#aep
12. android.webkit.WebView sınıfı: http://developer.android.com/reference/android/webkit/WebView.html
13. Web Görünümü uyumluluğu: http://www.chromium.org/
14. HTML5: http://html.spec.whatwg.org/multipage/
15. HTML5 çevrimdışı özellikleri: http://dev.w3.org/html5/spec/Overview.html#offline
16. HTML5 video etiketi: http://dev.w3.org/html5/spec/Overview.html#video
17. HTML5/W3C coğrafi konum API'si: http://www.w3.org/TR/geolocation-API/
18. HTML5/W3C webstorage API: http://www.w3.org/TR/webstorage/
19. HTML5/W3C IndexedDB API: http://www.w3.org/TR/IndexedDB/
20. Dalvik Yürütülebilir Biçimi ve bayt kodu spesifikasyonu: Android kaynak kodunda, dalvik/docs adresinde mevcuttur.
21. Uygulama widget'ları: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
22. Bildirimler: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
23. Uygulama Kaynakları: https://developer.android.com/guide/topics/resources/available-resources.html
24. Durum çubuğu simgesi stil kılavuzu: http://developer.android.com/design/style/iconography.html
25. Bildirimlerle ilgili kaynaklar: https://developer.android.com/design/patterns/notifications.html
26. Search Manager: http://developer.android.com/reference/android/app/SearchManager.html
27. Bildirimler: http://developer.android.com/reference/android/widget/Toast.html
28. Temalar: http://developer.android.com/guide/topics/ui/themes.html
29. R.style sınıfı: http://developer.android.com/reference/android/R.style.html
30. Materyal Tasarım: http://developer.android.com/reference/android/R.style.html#Theme_Material
31. Animasyonlu Duvar Kağıtları: http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
32. Genel bakış ekranı kaynakları: http://developer.android.com/guide/components/recents.html
33. Ekran sabitleme: https://developer.android.com/about/versions/android-5.0.html#ScreenPinning
34. Giriş yöntemleri: http://developer.android.com/guide/topics/text/creating-input-method.html
35. Medya Bildirimi: https://developer.android.com/reference/android/app/Notification.MediaStyle.html
36. Dreams: http://developer.android.com/reference/android/service/dreams/DreamService.html
37. Settings.Secure LOCATION_MODE:
http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE
38. Unicode 6.1.0: http://www.unicode.org/versions/Unicode6.1.0/
39. Android Cihaz Yönetimi: http://developer.android.com/guide/topics/admin/device-admin.html
40. DevicePolicyManager referansı: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
41. Android Cihaz Sahibi Uygulaması:
42. Android Erişilebilirlik Hizmeti API'leri: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
43. Android Erişilebilirlik API'leri: http://developer.android.com/reference/android/view/accessibility/package-summary.html
44. Eyes Free projesi: http://code.google.com/p/eyes-free
45. Metni Konuştur API'leri: http://developer.android.com/reference/android/speech/tts/package-summary.html
46. Televizyon Giriş Çerçevesi: /devices/tv/index.html
47. Referans araç dokümanları (adb, aapt, ddms, systrace için): http://developer.android.com/tools/help/index.html
48. Android apk dosyası açıklaması: http://developer.android.com/guide/components/fundamentals.html
49. Manifest dosyaları: http://developer.android.com/guide/topics/manifest/manifest-intro.html
50. Android Medya Biçimleri: http://developer.android.com/guide/appendix/media-formats.html
51. RTC Donanım Kodlama Şartları: http://www.webmproject.org/hardware/rtc-coding-requirements/
52. AudioEffect API: http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
53. Android android.content.pm.PackageManager sınıfı ve Donanım Özellikleri Listesi:
http://developer.android.com/reference/android/content/pm/PackageManager.html
54. HTTP Canlı Yayın Taslak Protokolü: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
55. ADB: http://developer.android.com/tools/help/adb.html
56. Dumpsys: /devices/input/diagnostics.html
57. DDMS: http://developer.android.com/tools/debugging/ddms.html
58. Maymun test aracı: http://developer.android.com/tools/help/monkey.html
59. SysyTrace aracı: http://developer.android.com/tools/help/systrace.html
60. Android Uygulama Geliştirme ile İlgili Ayarlar:
61. Birden fazla ekranı destekleme: http://developer.android.com/guide/practices/screens_support.html
62. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
63. RenderScript: http://developer.android.com/guide/topics/renderscript/
64. OpenGL ES için Android uzantı paketi: https://developer.android.com/reference/android/opengl/GLES31Ext.html
65. Donanım Hızlandırma: http://developer.android.com/guide/topics/graphics/hardware-accel.html
66. EGL Uzantısı-EGL_ANDROID_RECORDABLE:
http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt
67. Ekran Yöneticisi: http://developer.android.com/reference/android/hardware/display/DisplayManager.html
68. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
69. İşlem Asistanı: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
70. Dokunmatik Giriş Yapılandırması: http://source.android.com/devices/tech/input/touch-devices.html
71. Motion Event API: http://developer.android.com/reference/android/view/MotionEvent.html
72. Key Event API: http://developer.android.com/reference/android/view/KeyEvent.html
73. Android Açık Kaynak sensörleri: http://source.android.com/devices/sensors
74. android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html
75. Sensör etkinliği zaman damgası: http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp
76. Android Açık Kaynak karma sensörler: /devices/sensors/sensor-types.html#composite_sensor_type_summary
77. Sürekli tetikleyici modu: /docs/core/interaction/sensors/report-modes#continuous
78. İvmeölçer sensörü: http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER
79. Wi-Fi Çoklu Yayın API'si: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
80. Wi-Fi Direct (Wi-Fi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
81. WifiManager API: http://developer.android.com/reference/android/net/wifi/WifiManager.html
82. Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html
83. Bluetooth ScanFilter API: https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html
84. NDEF Push Protokolü: http://source.android.com/compatibility/ndef-push-protocol.pdf
85. Android Beam: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
86. Android NFC Paylaşım Ayarları:
http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
87. NFC Bağlantı Devre Alma: http://members.nfc-forum.org/specs/spec_list/#conn_handover
88. NFC Kullanarak Bluetooth Güvenli Basit Eşleme: http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf
89. Content Resolver: http://developer.android.com/reference/android/content/ContentResolver.html
90. Kamera yönü API'si: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
91. Kamera: http://developer.android.com/reference/android/hardware/Camera.html
92. Kamera: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
93. Kamera donanım düzeyi: https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
94. Kamera sürümü desteği: http://source.android.com/devices/camera/versioning.html
95. Android DownloadManager: http://developer.android.com/reference/android/app/DownloadManager.html
96. Android Dosya Aktarımı: http://www.android.com/filetransfer
97. Android Open Accessories: http://developer.android.com/guide/topics/connectivity/usb/accessory.html
98. Android USB Ses: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
99. USB Şarj Şartnamesi: http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf
100. USB Host API: http://developer.android.com/guide/topics/connectivity/usb/host.html
101. Kablolu ses kulaklığı: http://source.android.com//docs/core/interaction/accessories/headset/plug-headset-spec.html
102. Android Güvenlik ve İzinler referansı: http://developer.android.com/guide/topics/security/permissions.html
103. UserManager referansı: http://developer.android.com/reference/android/os/UserManager.html
104. Harici Depolama referansı: http://source.android.com/docs/core/storage
105. Harici Depolama API'leri: http://developer.android.com/reference/android/os/Environment.html
106. SMS kısa kodu: http://tr.wikipedia.org/wiki/Kısa_kod
107. Android Açık Kaynak Şifreleme: http://source.android.com/docs/security/features/encryption
108. Android Uyumluluk Programı'na Genel Bakış: http://source.android.com//docs/compatibility
109. Android Uyumluluk forumu: https://groups.google.com/forum/#!forum/android-compatibility
110. WebM projesi: http://www.webmproject.org/
111. Android UI_MODE_TYPE_CAR API: http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_CAR
112. Android MediaCodecList API: http://developer.android.com/reference/android/media/MediaCodecList.html
113. Android CamcorderProfile API: http://developer.android.com/reference/android/media/CamcorderProfile.html
Bu kaynakların çoğu doğrudan veya dolaylı olarak Android SDK'sından türetilmiştir ve işlevsel olarak ilgili 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.