Android 4.2 Uyumluluk Tanımlaması

Düzeltme 2
Son güncelleme: 17 Şubat 2013

Telif hakkı © 2012, Google Inc. Tüm hakları saklıdır.
[email protected]

İçindekiler

1. Giriş
2. Kaynaklar
3. Yazılım
3.1. Managed API Uyumluluğu
3.2. Soft API Uyumluluğu
3.3. Yerel API Uyumluluğu
3.4. Web Uyumluluğu
3.5. API Davranış Uyumluluğu
3.6. API Alan Adları
3.7. Sanal Makine Uyumluluğu
3.8. Kullanıcı Arayüzü Uyumluluğu
3.9 Cihaz Yönetimi
3.10 Erişilebilirlik
3.11 Metin Okuma
4. Uygulama Paketleme Uyumluluğu
5. Multimedya Uyumluluğu
6. Geliştirici Araçları ve Seçenekleri Uyumluluğu
7. Donanım Uyumluluğu
7.1. Görüntülü Reklamlar ve Grafikler
7.2. Giriş Cihazları
7.3. Sensörler
7.4. Veri Bağlantısı
7.5. Kameralar
7.6. Bellek ve Depolama
7.7. USB
8. Performans Uyumluluğu
9. Güvenlik Modeli Uyumluluğu
10. Yazılım Uyumluluğu Testi
11. Güncelleyebilir Yazılımlar
12. Bizimle İletişime Geçin
Ek A - Bluetooth Test Prosedürü

1. Giriş

Bu belgede, cihazların Android 4.2 ile uyumlu olması için karşılanması gereken şartlar listelenmiştir.

"Zorunlu", "Zorunlu değil", "Gerekli", "Olmalıdır", "Olmamalıdır", "Olması gerekir", "Olmaması gerekir", "Önerilen", "Olabilir" ve "İsteğe bağlı" ifadeleri RFC2119 [Kaynaklar, 1] belgesinde tanımlanan IETF standardına göre kullanılmalıdır.

Bu dokümanda "cihaz uygulayıcısı" veya "uygulayıcı", Android 4.2 ç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 4.2 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 şartları karşılaması GEREKİR.

Bu tanım veya 10. Bölüm'de 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, 3], Android'in hem referans 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 "yukarı yönlü" kaynak koda 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 uygulamadan kesinlikle kaçınılmalıdır. 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.

2. Kaynaklar

  1. IETF RFC2119 Şart Düzeyleri: http://www.ietf.org/rfc/rfc2119.txt
  2. Android Uyumluluk Programı'na Genel Bakış: http://source.android.com/docs/compatibility/index.html
  3. Android Açık Kaynak Projesi: http://source.android.com/
  4. API tanımları ve dokümanları: http://developer.android.com/reference/packages.html
  5. Android izinleri referansı: http://developer.android.com/reference/android/Manifest.permission.html
  6. android.os.Build referansı: http://developer.android.com/reference/android/os/Build.html
  7. Android 4.2'de izin verilen sürüm dizeleri: http://source.android.com/docs/compatibility/4.2/versions.html
  8. Renderscript: http://developer.android.com/guide/topics/graphics/renderscript.html
  9. Donanım Hızlandırma: http://developer.android.com/guide/topics/graphics/hardware-accel.html
  10. android.webkit.WebView sınıfı: http://developer.android.com/reference/android/webkit/WebView.html
  11. HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
  12. HTML5 çevrimdışı özellikleri: http://dev.w3.org/html5/spec/Overview.html#offline
  13. HTML5 video etiketi: http://dev.w3.org/html5/spec/Overview.html#video
  14. HTML5/W3C coğrafi konum API'si: http://www.w3.org/TR/geolocation-API/
  15. HTML5/W3C web veritabanı API'si: http://www.w3.org/TR/webdatabase/
  16. HTML5/W3C IndexedDB API: http://www.w3.org/TR/IndexedDB/
  17. Dalvik sanal makinesi spesifikasyonu: Android kaynak kodunda, dalvik/docs adresinde mevcuttur.
  18. Uygulama widget'ları: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
  19. Bildirimler: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
  20. Uygulama Kaynakları: http://code.google.com/android/reference/available-resources.html
  21. Durum çubuğu simgesi stil kılavuzu: http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
  22. Search Manager: http://developer.android.com/reference/android/app/SearchManager.html
  23. Bildirimler: http://developer.android.com/reference/android/widget/Toast.html
  24. Temalar: http://developer.android.com/guide/topics/ui/themes.html
  25. R.style sınıfı: http://developer.android.com/reference/android/R.style.html
  26. Animasyonlu Duvar Kağıtları: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
  27. Android Cihaz Yönetimi: http://developer.android.com/guide/topics/admin/device-admin.html
  28. DevicePolicyManager referansı: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
  29. Android Erişilebilirlik Hizmeti API'leri: http://developer.android.com/reference/android/accessibilityservice/package-summary.html
  30. Android Erişilebilirlik API'leri: http://developer.android.com/reference/android/view/accessibility/package-summary.html
  31. Eyes Free projesi: http://code.google.com/p/eyes-free
  32. Metni Konuştur API'leri: http://developer.android.com/reference/android/speech/tts/package-summary.html
  33. Referans araç dokümanları (adb, aapt, ddms, systrace için): http://developer.android.com/guide/developing/tools/index.html
  34. Android apk dosyası açıklaması: http://developer.android.com/guide/topics/fundamentals.html
  35. Manifest dosyaları: http://developer.android.com/guide/topics/manifest/manifest-intro.html
  36. Maymun test aracı: https://developer.android.com/studio/test/other-testing-tools/monkey
  37. Android android.content.pm.PackageManager sınıfı ve Donanım Özellikleri Listesi: http://developer.android.com/reference/android/content/pm/PackageManager.html
  38. Birden fazla ekranı destekleme: http://developer.android.com/guide/practices/screens_support.html
  39. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
  40. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
  41. android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html
  42. Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html
  43. NDEF Push Protokolü: http://source.android.com/docs/compatibility/ndef-push-protocol.pdf
  44. MIFARE MF1S503X: http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
  45. MIFARE MF1S703X: http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
  46. MIFARE MF0ICU1: http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf
  47. MIFARE MF0ICU2: http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf
  48. MIFARE AN130511: http://www.nxp.com/documents/application_note/AN130511.pdf
  49. MIFARE AN130411: http://www.nxp.com/documents/application_note/AN130411.pdf
  50. Kamera yönü API'si: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
  51. Kamera: http://developer.android.com/reference/android/hardware/Camera.html
  52. Android Open Accessories: http://developer.android.com/guide/topics/usb/accessory.html
  53. USB Host API: http://developer.android.com/guide/topics/usb/host.html
  54. Android Güvenlik ve İzinler referansı: http://developer.android.com/guide/topics/security/security.html
  55. Android için Uygulamalar: http://code.google.com/p/apps-for-android
  56. Android DownloadManager: http://developer.android.com/reference/android/app/DownloadManager.html
  57. Android Dosya Aktarımı: http://www.android.com/filetransfer
  58. Android Medya Biçimleri: http://developer.android.com/guide/appendix/media-formats.html
  59. HTTP Canlı Yayın Taslak Protokolü: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
  60. NFC Bağlantı Devre Alma: http://www.nfc-forum.org/specs/spec_list/#conn_handover
  61. NFC Kullanarak Bluetooth Güvenli Basit Eşleme: http://www.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf
  62. Wifi Çoklu Yayın API'si: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
  63. İşlem Asistanı: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
  64. USB Şarj Şartnamesi: http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf
  65. Android Beam: http://developer.android.com/guide/topics/nfc/nfc.html
  66. Android USB Ses: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
  67. Android NFC Paylaşım Ayarları: http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
  68. Wifi Direct (Wifi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
  69. Kilit ve Ana Ekran Widget'ı: http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
  70. UserManager referansı: http://developer.android.com/reference/android/os/UserManager.html
  71. Harici Depolama referansı: https://source.android.com/docs/core/storage
  72. Harici Depolama API'leri: http://developer.android.com/reference/android/os/Environment.html
  73. SMS kısa kodu: http://tr.wikipedia.org/wiki/Kısa_kod
  74. Medya Uzaktan Kumanda İstemcisi: http://developer.android.com/reference/android/media/RemoteControlClient.html
  75. Ekran Yöneticisi: http://developer.android.com/reference/android/hardware/display/DisplayManager.html
  76. Dreams: http://developer.android.com/reference/android/service/dreams/DreamService.html
  77. Android Uygulama Geliştirme ile İlgili Ayarlar: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS
  • Kamera: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
  • Bu kaynakların çoğu doğrudan veya dolaylı olarak Android 4.2 SDK'sından türetilmiştir ve işlevsel olarak bu SDK'nın dokümanlarında yer alan bilgilerle aynıdır. Bu Uyumluluk Tanımlama Belgesi'nin veya Uyumluluk Testi Paketi'nin SDK dokümanlarıyla çeliştiği durumlarda SDK dokümanları yetkili kabul edilir. Yukarıda yer alan referanslarda sağlanan tüm teknik ayrıntılar, bu Uyumluluk Tanımı'nın bir parçası olarak kabul edilir.

    3. Yazılım

    3.1. Yönetilen API Uyumluluğu

    Yönetilen (Dalvik tabanlı) yürütme ortamı, Android uygulamalarının birincil aracıdır. Android uygulama programlama arayüzü (API), yönetilen sanal makine ortamında çalışan uygulamalara sunulan Android platform arayüzleri grubudur. Cihaz uygulamalarında, Android 4.2 SDK'sı tarafından kullanıma sunulan tüm belgelenmiş API'lerin (Kaynaklar, 4) belgelenmiş tüm davranışları da dahil olmak üzere eksiksiz uygulamalar sağlanmalıdır.

    Cihaz uygulamalarında, bu Uyumluluk Tanımı'nda özellikle izin verildiği durumlar hariç olmak üzere yönetilen API'ler atlanmamalı, API arayüzleri veya imzaları değiştirilmemeli, belirtilen davranıştan sapılmamalı ya da işlem yapmama işlemleri dahil edilmemelidir.

    Bu Uyumluluk Tanımı, Android'in API'leri içeren bazı donanım türlerinin cihaz uygulamaları tarafından atlanmasına izin verir. Bu gibi durumlarda API'ler mevcut olmalı ve makul bir şekilde davranmalıdır. Bu senaryoya özgü şartlar için 7. Bölüm'e bakın.

    3.2. Soft API Uyumluluğu

    Android, 3.1 Bölümü'ndeki yönetilen API'lere ek olarak, Android uygulamalarının derleme sırasında uygulanamayan Intent'ler, izinler ve benzer özellikleri gibi yalnızca çalışma zamanında önemli bir "yumuşak" API içerir.

    3.2.1. İzinler

    Cihaz uygulayıcıları, izin referans sayfasında [Kaynaklar, 5] belirtildiği gibi tüm izin sabitlerini desteklemeli ve uygulamalıdır. 10. Bölüm'de Android güvenlik modeliyle ilgili ek şartların listelendiğini unutmayın.

    3.2.2. Derleme Parametreleri

    Android API'leri, android.os.Build sınıfında [Resources, 6] mevcut cihazı tanımlamak için tasarlanmış bir dizi sabit içerir. Cihaz uygulamalarında tutarlı ve anlamlı değerler sağlamak için aşağıdaki tabloda, cihaz uygulamalarının UYGUN OLMASI GEREKEN bu değerlerin biçimleriyle ilgili ek kısıtlamalar yer almaktadır.

    Parametre Yorumlar
    android.os.Build.VERSION.RELEASE Şu anda çalışan Android sisteminin, kullanıcılar tarafından okunabilir biçimdeki sürümü. Bu alanda [Kaynaklar, 7] bölümünde tanımlanan dize değerlerinden biri bulunmalıdır.
    android.os.Build.VERSION.SDK Şu anda çalışan Android sisteminin sürümü (üçüncü taraf uygulama kodunun erişebileceği bir biçimde). Android 4.2 için bu alanın tam sayı değeri 17 OLMALIDIR.
    android.os.Build.VERSION.SDK_INT Şu anda çalışan Android sisteminin sürümü (üçüncü taraf uygulama kodunun erişebileceği bir biçimde). Android 4.2 için bu alanın tam sayı değeri 17 OLMALIDIR.
    android.os.Build.VERSION.INCREMENTAL Cihaz uygulayıcısı tarafından seçilen ve o anda çalışan Android sisteminin belirli derlemesini kullanıcılar tarafından okunabilir biçimde belirten bir değer. Bu değer, son kullanıcılara sunulan farklı derlemeler için yeniden KULLANILAMAZ. Bu alanın tipik bir kullanımı, derlemeyi oluşturmak için hangi derleme numarasının veya kaynak denetimi değişiklik tanımlayıcısının kullanıldığını belirtmektir. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş dize ("") veya null değer OLMAMASI gerekir.
    android.os.Build.BOARD Cihaz uygulayıcısı tarafından seçilen ve cihaz tarafından kullanılan belirli dahili donanımı kullanıcı tarafından okunabilir biçimde tanımlayan bir değer. Bu alanın olası bir kullanımı, cihazı besleyen kartın belirli bir revizyonunu belirtmektir. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.BRAND Cihazı üreten şirketin, kuruluşun, şahsın vb. adını kullanıcı tarafından okunabilir biçimde tanımlayan, cihaz uygulayıcısı tarafından seçilen bir değer. Bu alanın olası bir kullanımı, cihazı satan OEM'i ve/veya operatörü belirtmektir. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.CPU_ABI Yerel kodun talimat setinin adı (CPU türü + ABI kuralı). 3.3 Bölümü: Yerel API Uyumluluğu'na bakın.
    android.os.Build.CPU_ABI2 Yerel kodun ikinci talimat setinin (CPU türü + ABI kuralı) adı. 3.3 Bölümü: Yerel API Uyumluluğu'na bakın.
    android.os.Build.DEVICE Cihaz uygulayıcısı tarafından seçilen ve cihazın gövdesinin (bazen "endüstriyel tasarım" olarak da adlandırılır) belirli yapılandırmasını veya düzeltmesini tanımlayan bir değer. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.FINGERPRINT Bu derlemeyi benzersiz şekilde tanımlayan bir dize. Makul ölçüde okunaklı OLMALIDIR. Şu şablonu İZLEMELİYDİR:
    $(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
    Örneğin:
    acme/mydevice/generic:4.2/JRN53/3359:userdebug/test-keys
    Parmak izi boşluk karakterleri İÇ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.
    android.os.Build.HARDWARE 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.
    android.os.Build.HOST Derlemenin oluşturulduğu ana makineyi benzersiz şekilde tanımlayan, kullanıcı tarafından okunabilir biçimde bir dize. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir.
    android.os.Build.ID Cihaz uygulayıcısı tarafından, belirli bir sürümü belirtmek için kullanıcı tarafından okunabilir biçimde seçilen bir tanımlayıcı. Bu alan, android.os.Build.VERSION.INCREMENTAL ile aynı olabilir ancak son kullanıcıların yazılım derlemeleri arasında ayrım yapması için yeterince anlamlı bir değer OLMALIDIR. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.MANUFACTURER Ü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.
    android.os.Build.MODEL Cihaz uygulayıcısı tarafından seçilen ve son kullanıcının bildiği cihaz adını içeren bir değer. Bu, cihazın pazarlandığı ve son kullanıcılara satıldığı adla aynı OLMALIDIR. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Bununla birlikte, alanın boş veya boş dize ("") OLMAMASI ZORUNLUDUR.
    android.os.Build.PRODUCT Cihaz uygulayıcısı tarafından seçilen ve ürünün geliştirme adını veya kod adını (SKU) içeren bir değer. Kullanıcılar tarafından okunabilir OLMALIDIR ancak son kullanıcıların görüntülemesi için tasarlanmayabilir. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.SERIAL Varsa donanım seri numarası. Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^([a-zA-Z0-9]{0,20})$" normal ifadesiyle eşleşmelidir.
    android.os.Build.TAGS Cihaz uygulayıcısı tarafından seçilen ve derlemeyi daha da ayırt edici hale getiren, virgülle ayrılmış bir etiket listesi. Örneğin, "unsigned,debug". Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.TIME Derlemenin gerçekleştiği zamanın zaman damgasını temsil eden bir değer.
    android.os.Build.TYPE Derlemenin çalışma zamanı yapılandırmasını belirten, cihaz uygulayıcısı tarafından seçilen bir değer. Bu alanda, üç tipik Android çalışma zamanı yapılandırmasına karşılık gelen değerlerden biri OLMALIDIR: "user", "userdebug" veya "eng". Bu alanın değeri 7 bit ASCII olarak kodlanabilir ve "^[a-zA-Z0-9.,_-]+$" normal ifadesiyle eşleşmelidir.
    android.os.Build.USER Derlemeyi oluşturan kullanıcının (veya otomatik kullanıcının) adı veya kullanıcı kimliği. Bu alanın biçimiyle ilgili herhangi bir koşul yoktur. Ancak alanın boş veya boş dize ("") OLMAMASI gerekir.

    3.2.3. Intent Uyumluluğu

    Cihaz uygulamalarında, aşağıdaki bölümlerde açıklandığı gibi Android'in gevşek bağlantılı Intent sistemi dikkate alınmalıdır. "Uygulanması", cihaz uygulayıcının eşleşen bir Intent filtresi belirten ve belirtilen her Intent kalıbı için doğru davranışı bağlayan ve uygulayan bir Android Activity veya Service sağlaması GEREKTİĞİ anlamına gelir.

    3.2.3.1. Temel Uygulama Amaçları

    Android yayın öncesi projesi, kişiler, takvim, fotoğraf galerisi, müzik çalar gibi çeşitli temel uygulamaları tanımlar. Cihaz uygulayıcıları bu uygulamaları alternatif sürümlerle DEĞİŞTİREBİLİR.

    Ancak bu tür alternatif sürümler, yayın öncesi proje tarafından sağlanan aynı Intent kalıplarını UYGUNLAŞTIRMALIDIR. Örneğin, bir cihazda alternatif bir müzik çalar varsa şarkı seçmek için üçüncü taraf uygulamaları tarafından yayınlanan Intent kalıbını yine de dikkate almalıdır.

    Aşağıdaki uygulamalar temel Android sistem uygulamaları olarak kabul edilir:

    • Masa Saati
    • Tarayıcı
    • Takvim
    • Kişiler
    • Galeri
    • GlobalSearch
    • Roketatar
    • Müzik
    • Ayarlar

    Temel Android sistem uygulamaları, "herkese açık" olarak kabul edilen çeşitli etkinlik veya hizmet bileşenleri içerir. Yani "android:exported" özelliği bulunmayabilir veya "true" değerine sahip olabilir.

    Temel Android sistem uygulamalarından birinde tanımlanan ve "false" değerine sahip bir android:exported özelliği aracılığıyla herkese açık olmayan olarak işaretlenmeyen her etkinlik veya hizmet için cihaz uygulamalarında, temel Android sistem uygulamasıyla aynı Intent filtresi kalıplarını uygulayan aynı türde bir bileşen BULUNMASI GEREKİR.

    Diğer bir deyişle, cihaz uygulaması temel Android sistem uygulamalarını DEĞİŞTİREBİLİR. Ancak bu durumda, cihaz uygulaması, değiştirilen her temel Android sistem uygulaması tarafından tanımlanan tüm Intent kalıplarını DESTEKLEMELİDİR.

    3.2.3.2. Intent Geçersiz Kılmaları

    Android genişletilebilir bir platform olduğundan cihaz uygulamalarında, 3.2.3.2 Bölümü'nde 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ü devralmasını engellememelidir. Bu yasak, özellikle kullanıcının tümü 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 amacıyla 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 Broadcast 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 Broadcast Intent kalıplarını destekleyen Android bileşenleri İÇERMEMELİDİR. Cihaz uygulayıcıları, 3.2.3.1 numaralı bölümde listelenen temel uygulamalar tarafından kullanılan Intent kalıplarından hiçbirini DEĞİŞTİRMELİ veya GENİŞLETMEMELİDİR. Cihaz uygulamaları, kendi kuruluşlarıyla açıkça ilişkili olan ad alanlarının kullanıldığı Intent kalıplarını İÇERİEBİLİR.

    Bu yasak, Bölüm 3.6'da Java dil sınıfları için belirtilene benzer.

    3.2.3.4. Yayın Amaçları

    Üçüncü taraf uygulamaları, donanım veya yazılım ortamındaki değişiklikler hakkında bilgilendirilmek için belirli Intent'leri yayınlamak üzere platformdan yararlanır. Android uyumlu cihazlar, uygun sistem etkinliklerine yanıt olarak herkese açık yayın Intent'lerini YAYINLAMALIDIR. Yayın intent'leri SDK dokümanlarında açıklanmaktadır.

    3.3. Yerel API Uyumluluğu

    3.3.1 Uygulama İkili Arabirimleri

    Dalvik'te çalışan yönetilen kod, uygulama .apk dosyasında uygun cihaz donanım mimarisi için derlenmiş bir ELF .so dosyası olarak sağlanan yerel kodu çağırabilir. Yerel kod, temel işlemci teknolojisine oldukça bağlı olduğundan Android, Android NDK'da docs/CPU-ARCH-ABIS.html dosyasında bir dizi Uygulama İkili Arabirimi (ABI) tanımlar. Bir cihaz uygulaması bir veya daha fazla tanımlanmış ABI ile uyumluysa aşağıdaki gibi Android NDK ile uyumluluğu UYGULAMALIDIR.

    Bir cihaz uygulaması, Android ABI'si desteği içeriyorsa:

    • Standart Java Native Interface (JNI) semantikleri kullanılarak yönetilen ortamda çalışan kodun yerel koda çağrılması 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
    • Cihaz tarafından desteklenen yerel Uygulama İkili Arabirimi'ni (ABI) android.os.Build.CPU_ABI API üzerinden doğru şekilde bildirmelidir.
    • Yalnızca Android NDK'nın en son sürümünde, docs/CPU-ARCH-ABIS.txt dosyasında belgelenen ABI'leri bildirmelidir.
    • Yukarı yönlü Android açık kaynak projesinde 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.0)
    • libGLESv2.so (OpenGL ES 2.0)
    • 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)
    • 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.

    Yerel kod uyumluluğu zordur. Bu nedenle, cihaz uygulayıcılarının uyumluluğu sağlamak için yukarıda listelenen kitaplıkların yayın öncesi uygulamalarını kullanmalarının ÇOK önemle tavsiye edildiği tekrar vurgulanmalıdır.

    3.4. Web Uyumluluğu

    3.4.1. WebView Uyumluluğu

    Android Açık Kaynak uygulaması, android.webkit.WebView'ü uygulamak için WebKit oluşturma motorunu kullanır. Bir web oluşturma sistemi için kapsamlı bir test paketi geliştirmek mümkün olmadığından cihaz uygulayıcıları, WebView uygulamasında WebKit'in belirli bir yayın öncesi derlemesini KULLANMAK ZORUNDADIR. Özellikle:

    • Cihaz uygulamalarının android.webkit.WebViewuygulamaları, Android 4.2 için yayındaki Android Açık Kaynak ağacındaki 534.30 WebKit derlemesini temel ALMALIDIR. Bu derleme, Web Görünümü için belirli bir işlev ve güvenlik düzeltmeleri grubu içerir. Cihaz uygulayıcıları WebKit uygulamasına özelleştirmeler EKLEYEBİLİR ancak bu tür özelleştirmeler, oluşturma davranışı da dahil olmak üzere Web Görünümü'nün davranışını DEĞİŞTİRMEMELİDİR.
    • WebView tarafından bildirilen kullanıcı aracısı dizesi şu biçimde OLMALIDIR:
      Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30
      • $(VERSION) dizesinin değeri android.os.Build.VERSION.RELEASE değeriyle AYNI OLMALIDIR
      • $(LOCALE) dizesinin değeri, ülke kodu ve dil için ISO kurallarına uymalı ve cihazın mevcut yapılandırılmış yerel ayarını belirtmelidir.
      • $(MODEL) dizesinin değeri android.os.Build.MODEL değeriyle AYNI OLMALIDIR.
      • $(BUILD) dizesinin değeri android.os.Build.ID değeriyle AYNI OLMALIDIR
      • Cihaz uygulamaları, kullanıcı aracısı dizesinde Mobile öğesini EKSİLTİREBİLİR.

    WebView bileşeni, HTML5'in mümkün olduğunca büyük bir kısmını [Kaynaklar, 11] desteklemelidir. Cihaz uygulamalarının, WebView'de HTML5 ile ilişkili aşağıdaki API'lerin her birini en azından desteklemesi GEREKİR:

    Ayrıca, cihaz uygulamaları HTML5/W3C webstorage API'yi [Kaynaklar, 15] destekleMELİ ve HTML5/W3C IndexedDB API'yi [Kaynaklar, 16] 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.

    Tüm JavaScript API'leri gibi HTML5 API'leri de, geliştirici tarafından normal Android API'leri aracılığıyla açıkça etkinleştirilmediği sürece WebView'de varsayılan olarak devre dışı bırakılmalıdır.

    3.4.2. Tarayıcı Uyumluluğu

    Cihaz uygulamalarında, genel kullanıcıların web'de gezinmesi için bağımsız bir tarayıcı uygulaması BULUNMASI GEREKİ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ÖNDERMEYEBİLİR.

    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ı için destek İÇERMELİDİR [Kaynaklar, 11]. Cihaz uygulamalarının, HTML5 ile ilişkili aşağıdaki API'lerin her birini en azından desteklemesi GEREKİR:

    Ayrıca, cihaz uygulamaları HTML5/W3C webstorage API'yi [