summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/res/res/values-ca/strings.xml3
-rw-r--r--core/res/res/values-cs/strings.xml3
-rw-r--r--core/res/res/values-de/strings.xml3
-rw-r--r--core/res/res/values-es-rUS/strings.xml3
-rw-r--r--core/res/res/values-es/strings.xml3
-rw-r--r--core/res/res/values-fa/strings.xml3
-rw-r--r--core/res/res/values-fi/strings.xml3
-rw-r--r--core/res/res/values-fr-rCA/strings.xml3
-rw-r--r--core/res/res/values-hr/strings.xml3
-rw-r--r--core/res/res/values-ja/strings.xml3
-rw-r--r--core/res/res/values-ka-rGE/strings.xml3
-rw-r--r--core/res/res/values-ko/strings.xml3
-rw-r--r--core/res/res/values-ky-rKG/strings.xml3
-rw-r--r--core/res/res/values-ms-rMY/strings.xml3
-rw-r--r--core/res/res/values-pt/strings.xml3
-rw-r--r--core/res/res/values-ro/strings.xml3
-rw-r--r--core/res/res/values-ru/strings.xml3
-rw-r--r--core/res/res/values-si-rLK/strings.xml3
-rw-r--r--core/res/res/values-sr/strings.xml3
-rw-r--r--core/res/res/values-tr/strings.xml3
-rw-r--r--core/res/res/values-uk/strings.xml3
-rw-r--r--core/res/res/values-ur-rPK/strings.xml3
-rw-r--r--core/res/res/values-zh-rCN/strings.xml3
-rw-r--r--core/res/res/values-zh-rTW/strings.xml3
-rw-r--r--docs/html-ndk/ndk/reference/reference_toc.cs50
-rw-r--r--docs/html/develop/index.jd2
-rw-r--r--docs/html/distribute/engage/engage_toc.cs18
-rw-r--r--docs/html/distribute/tools/open-distribution.jd8
-rw-r--r--docs/html/google/index.jd2
-rw-r--r--docs/html/images/cards/card-google-cloud-messaging_16-9_2x.pngbin8148 -> 14183 bytes
-rw-r--r--docs/html/jd_collections.js3
-rw-r--r--docs/html/preview/samples.jd2
-rw-r--r--docs/html/preview/setup-sdk.jd4
-rw-r--r--docs/html/tools/data-binding/guide.jd1435
-rw-r--r--docs/html/tools/data-binding/index.jd18
-rw-r--r--docs/html/tools/sdk/ndk/index.jd4465
-rw-r--r--docs/html/tools/tools_toc.cs65
-rw-r--r--docs/html/training/run-background-service/create-service.jd4
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java12
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java32
-rw-r--r--tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java37
41 files changed, 1606 insertions, 4623 deletions
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index c2411ab..78c67bd 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor d\'empremtes digitals està brut. Neteja\'l i torna-ho a provar."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"El dit s\'ha mogut massa ràpid. Torna-ho a provar."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"El dit s\'ha mogut massa lentament. Torna-ho a provar."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El maquinari per a empremtes digitals no està disponible."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index cf57ec2..54072ed 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -429,8 +429,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otisků prstů je znečištěn. Vyčistěte jej a zkuste to znovu."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Pohyb prstem byl příliš rychlý. Zkuste to znovu."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Není k dispozici hardware ke snímání otisků prstů."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d45777d..d685561 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Fingerabdruck konnte nicht verarbeitet werden. Versuchen Sie es erneut."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerabdrucksensor ist verschmutzt. Reinigen Sie ihn und versuchen Sie es erneut."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Finger zu schnell bewegt. Versuchen Sie es erneut."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Finger zu langsam bewegt. Versuchen Sie es erneut."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Fingerabdruckhardware nicht verfügbar"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index e6d037d..c129eb8 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se pudo procesar la huella digital. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Limpia el sensor y vuelve a intentarlo."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Moviste el dedo muy rápido. Vuelve a intentarlo."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Moviste el dedo muy lento. Vuelve a intentarlo."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El hardware para detectar huellas digitales no está disponible."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 2632cf6..d5e14ed 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"El sensor de huellas digitales está sucio. Límpialo y vuelve a intentarlo."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Has quitado el dedo demasiado rápido. Vuelve a intentarlo."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Has movido el dedo demasiado despacio. Vuelve a intentarlo."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"El hardware de huella digital no está disponible."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 3bf6752..eea68df 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"حسگر اثر انگشت کثیف است. لطفاً آن را تمیز کنید و دوباره امتحان نمایید."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"حرکت انگشت خیلی سریع بود. لطفاً دوباره امتحان کنید."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"حرکت انگشت خیلی آهسته بود. لطفاً دوباره امتحان کنید."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"سخت‌افزار اثرانگشت در دسترس نیست."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 9d9563f..5b9170c 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Sormenjäljen käsittely epäonnistui. Yritä uudelleen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Sormenjälkitunnistin on likainen. Puhdista tunnistin ja yritä uudelleen."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Liikutit sormea liian nopeasti. Yritä uudelleen."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Sormenjälkilaitteisto ei ole käytettävissä."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 03c3d83..04d916e 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Impossible de traiter les empreintes digitales. Veuillez essayer de nouveau."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Le capteur d\'empreintes digitales est sale. Veuillez le nettoyer et essayer de nouveau."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Vous avez déplacé votre doigt trop rapidement. Veuillez réessayer."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Matériel d\'empreinte numérique indisponible."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index d93ded6..0a57621 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -428,8 +428,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor otiska prsta nije čist. Očistite ga i pokušajte ponovo."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Prebrzo pomicanje prsta. Pokušajte ponovo."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Presporo pomicanje prsta. Pokušajte ponovo."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardver za otisak prsta nije dostupan."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index e44bc44..b7447cd 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"指紋を処理できませんでした。もう一度お試しください。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋センサーに汚れがあります。汚れを落としてもう一度お試しください。"</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"指の動きが速すぎました。もう一度お試しください。"</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"指の動きが遅すぎました。もう一度お試しください。"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指紋ハードウェアは使用できません。"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 0b2e413..b1033a7 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"თითის ანაბეჭდი ვერ მუშავდება. გთხოვთ, სცადოთ ხელახლა."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"თითის ანაბეჭდის სენსორი დაბინძურებულია. გთხოვთ, გაასუფთაოთ და სცადოთ ხელახლა."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"თითის აღება მეტისმეტად სწრაფად მოხდა. გთხოვთ, სცადოთ ხელახლა."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"თითის აღება მეტისმეტად ნელა მოხდა. გთხოვთ, სცადოთ ხელახლა."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"თითის ანაბეჭდის აპარატურა არ არის ხელმისაწვდომი."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f679436..855e08d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"지문 센서를 깨끗이 닦고 다시 시도하세요."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"손가락을 너무 빨리 움직였습니다. 다시 시도해 주세요."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"지문 인식 하드웨어를 사용할 수 없습니다."</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 27fb058..35df085 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -554,8 +554,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Манжа изи иштелбей койду. Кайра аракет кылыңыз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Манжа изинин сенсору кирдеп калган. Тазалап, кайра аракет кылыңыз."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Манжа өтө тез жылдырылды. Кайра аракет кылыңыз."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">".Манжа өтө акырын жылдырылды. Кайра аракет кылыңыз."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Манжа изинин аппараттык камсыздоосу жеткиликтүү эмес."</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 4e870f7..c8ea6ae 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Tidak dapat memproses cap jari. Sila cuba lagi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Penderia cap jari kotor. Sila bersihkan dan cuba lagi."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Jari digerakkan terlalu cepat. Sila cuba lagi."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Jari digerakkan terlalu perlahan. Sila cuba lagi."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Perkakasan cap jari tidak tersedia."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index c7b47e1..db7febf 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Não foi possível processar a impressão digital. Tente novamente."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"O sensor de impressão digital está sujo. Limpe-o e tente novamente."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"O dedo foi retirado rápido demais. Tente novamente."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"O movimento do dedo está muito lento. Tente novamente."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardware de impressão digital não disponível."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 15ac3c7..304118f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -428,8 +428,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Amprenta nu a putut fi procesată. Încercați din nou."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzorul pentru amprente este murdar. Curățați-l și încercați din nou."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Ați mișcat degetul prea repede. Încercați din nou."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Ați mișcat degetul prea lent. Încercați din nou."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardware-ul pentru amprentă nu este disponibil."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index d4ce526..29e05f8 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -429,8 +429,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не удалось распознать отпечаток. Повторите попытку."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Очистите сканер и повторите попытку."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Вы слишком быстро убрали палец. Повторите попытку."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Вы перемещали палец слишком медленно. Повторите попытку."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Сканер недоступен"</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 003747b..46c0761 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"ඇඟිලි සලකුණු සංවේදකය අපිරිසිදුයි. කරුණාකර පිරිසිදු කර නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"ඇඟිල්ල ඉතා වේගයෙන් ගෙන යන ලදී. කරුණාකර නැවත උත්සාහ කරන්න."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"ඇඟිල්ල වඩා සෙමෙන් ගෙන යන ලදි. කරුණාකර නැවත උත්සාහ කරන්න."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"ඇඟිලි සලකුණු දෘඪාංගය ලද නොහැකිය."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 6178dd5..973e90c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -428,8 +428,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Није успела обрада отиска прста. Покушајте поново."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензор за отиске прстију је прљав. Очистите га и покушајте поново."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Пребрзо сте померили прст. Покушајте поново."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Превише споро сте померили прст. Покушајте поново."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Хардвер за отиске прстију није доступан."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index f48e418..5cc6d0b 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Parmak izi sensörü kirli. Lütfen temizleyin ve tekrar deneyin."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Parmak hareketi çok hızlıydı. Lütfen tekrar deneyin."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Parmak hareketi çok yavaştı. Lütfen tekrar deneyin."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Parmak izi donanımı kullanılamıyor."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 318ca95..a27afc0 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -429,8 +429,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Не вдалось обробити відбиток. Повторіть спробу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Датчик відбитків забруднився. Очистьте його та повторіть спробу."</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Ви забрали палець надто швидко. Повторіть спробу."</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Ви провели пальцем надто повільно. Повторіть спробу."</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Апаратне забезпечення для сканування відбитка недоступне."</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index 146f00c..33639bf 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"فنگر پرنٹ پر کارروائی نہیں کی جا سکی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"فنگر پرنٹ سینسر گندا ہے۔ براہ کرم صاف کریں اور دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"انگلی کو کافی تیزی سے ہٹا لیا گیا۔ براہ کرم دوبارہ کوشش کریں۔"</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"انگلی کو بہت آہستہ ہٹایا گیا۔ براہ کرم دوبارہ کوشش کریں۔"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"فنگر پرنٹ ہارڈ ویئر دستیاب نہیں ہے۔"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index cdb2b7e..58053aa 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"无法处理指纹,请重试。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指纹传感器有脏污。请擦拭干净,然后重试。"</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"手指移动太快,请重试。"</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"手指移动太慢,请重试。"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指纹硬件无法使用。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index dc700ff..f980c2a 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -427,8 +427,7 @@
<string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"無法處理指紋,請再試一次。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"指紋感應器有髒汙。請清潔感應器,然後再試一次。"</string>
<string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"手指移動速度過快,請再試一次。"</string>
- <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
- <skip />
+ <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"手指移動速度過慢,請再試一次。"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"指紋硬體無法使用。"</string>
diff --git a/docs/html-ndk/ndk/reference/reference_toc.cs b/docs/html-ndk/ndk/reference/reference_toc.cs
index 3e10562..404a0a6 100644
--- a/docs/html-ndk/ndk/reference/reference_toc.cs
+++ b/docs/html-ndk/ndk/reference/reference_toc.cs
@@ -8,40 +8,66 @@
<ul id="nav">
<li class="nav-section">
- <div class="nav-section-header"><a href="group___asset.html"><span class="en">Asset</span></a></div>
+ <div class="nav-section-header"><a href="/ndk/reference/group___asset.html"><span class="en">Asset Manager</span></a></div>
<ul>
- <li><a href="asset__manager_8h.html">asset_manager.h</a></li>
- <li><a href="asset__manager__jni_8h.html">asset_manager_jni.h</a></li>
+ <li><a href="/ndk/reference/asset__manager_8h.html">asset_manager.h</a></li>
+ <li><a href="/ndk/reference/asset__manager__jni_8h.html">asset_manager_jni.h</a></li>
</ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___bitmap.html"><span class="en">
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___bitmap.html"><span class="en">
Bitmap</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/bitmap_8h.html">bitmap.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___configuration.html"><span class="en">
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___configuration.html"><span class="en">
Configuration</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/configuration_8h.html">configuration.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___input.html"><span class="en">
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___input.html"><span class="en">
Input</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/input_8h.html">input.h</a></li>
+ <li><a href="/ndk/reference/keycodes_8h.html">keycodes.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___looper.html"><span class="en">
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___looper.html"><span class="en">
Looper</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/looper_8h.html">looper.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___native_activity.html"><span class="en">
- Native Activity</span></a></div>
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___native_activity.html"><span class="en">
+ Native Activity and Window</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/native__activity_8h.html">native_activity.h</a></li>
+ <li><a href="/ndk/reference/native__window_8h.html">native_window.h</a></li>
+ <li><a href="/ndk/reference/native__window__jni_8h.html">native_window.h</a></li>
+ <li><a href="/ndk/reference/rect_8h.html">rect.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___sensor.html"><span class="en">
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___sensor.html"><span class="en">
Sensor</span></a></div>
+ <ul>
+ <li><a href="/ndk/reference/sensor_8h.html">sensor.h</a></li>
+ </ul>
</li>
<li class="nav-section">
- <div class="nav-section-header empty"><a href="group___storage.html"><span class="en">
- Storage</span></a></div>
+ <div class="nav-section-header empty"><a href="/ndk/reference/group___storage.html"><span class="en">
+ Storage Manager</span></a></div>
</li>
+ <ul>
+ <li><a href="/ndk/reference/storage__manager_8h.html">sensor_manager.h</a></li>
+ <li><a href="/ndk/reference/obb_8h.html">obb.h</a></li>
+ </ul>
</ul>
<script type="text/javascript">
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index 17db9e5..bbd2f71 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -97,7 +97,7 @@ excludeFromSuggestions=true
<section class="dac-section dac-gray"><div class="wrap">
<h1 class="dac-section-title">Ubiquitous computing on Android</h1>
<div class="dac-section-subtitle">
- Opening up new stuff.
+ A great experience for your users across devices.
</div>
<div class="resource-widget resource-flow-layout col-16"
data-query="collection:develop/landing/ubicomp"
diff --git a/docs/html/distribute/engage/engage_toc.cs b/docs/html/distribute/engage/engage_toc.cs
index cf02465..91206d3 100644
--- a/docs/html/distribute/engage/engage_toc.cs
+++ b/docs/html/distribute/engage/engage_toc.cs
@@ -53,24 +53,6 @@
<span class="en">Integrate GCM</span></a>
</div>
</li>
- <li class="nav-section">
- <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
- var:toroot?>distribute/engage/app-updates.html">
- <span class="en">Update Regularly</span></a>
- </div>
- </li>
- <li class="nav-section">
- <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
- var:toroot?>distribute/engage/community.html">
- <span class="en">Engage Your Community</span></a>
- </div>
- </li>
- <li class="nav-section">
- <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
- var:toroot?>distribute/engage/video.html">
- <span class="en">Delight with Videos</span></a>
- </div>
- </li>
</ul>
diff --git a/docs/html/distribute/tools/open-distribution.jd b/docs/html/distribute/tools/open-distribution.jd
index e28102d..a929692 100644
--- a/docs/html/distribute/tools/open-distribution.jd
+++ b/docs/html/distribute/tools/open-distribution.jd
@@ -80,14 +80,6 @@ page.image=/distribute/images/alt-distribution.jpg
</p>
<p>
- <strong>Note:</strong> The <strong>Install Now</strong> button, shown in
- Figure 1, appears only if the user has configured their device to allow
- installation from <a href=
- "{@docRoot}distribute/open.html#unknown-sources">unknown sources</a> and
- opened your email in the native Gmail app.
-</p>
-
-<p>
Distributing apps through email is convenient if you’re sending them to a few
trusted users, as it provides few protections from piracy and unauthorized
distribution; that is, anyone you send your apps to can simply forward them
diff --git a/docs/html/google/index.jd b/docs/html/google/index.jd
index a4190c9..e3b2ae1 100644
--- a/docs/html/google/index.jd
+++ b/docs/html/google/index.jd
@@ -11,7 +11,7 @@ footer.hide=1
<div class="wrap">
<div class="cols dac-hero-content">
<div class="col-1of2 col-push-1of2 dac-hero-figure">
- <img class="dac-hero-image" src="/images/google/hero-play-services_2x.png" style="padding-bottom:2em">
+ <img class="dac-hero-image" src="/images/google/hero-play-services_2x.png" style="height:400px">
</div>
<div class="col-1of2 col-pull-1of2">
<h1 class="dac-hero-title">Build better apps with Google</h1>
diff --git a/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png b/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
index 6bdf13c..5310c7b 100644
--- a/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
+++ b/docs/html/images/cards/card-google-cloud-messaging_16-9_2x.png
Binary files differ
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index c1f37e9..46d81e5 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -349,9 +349,6 @@ var RESOURCE_COLLECTIONS = {
"distribute/engage/easy-signin.html",
"distribute/analyze/build-better-apps.html",
"distribute/engage/gcm.html",
- "distribute/engage/app-updates.html",
- "distribute/engage/community.html",
- "distribute/engage/video.html"
]
},
"distribute/monetize": {
diff --git a/docs/html/preview/samples.jd b/docs/html/preview/samples.jd
index 29b9e2a..21d4215 100644
--- a/docs/html/preview/samples.jd
+++ b/docs/html/preview/samples.jd
@@ -1,5 +1,5 @@
page.title=Samples
-page.image=images/cards/card-samples_16-9_2x.png
+page.image=images/cards/samples-new_2x.png
@jd:body
<p>
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
index b31b104..f0def9b 100644
--- a/docs/html/preview/setup-sdk.jd
+++ b/docs/html/preview/setup-sdk.jd
@@ -72,8 +72,8 @@ App</a> training lesson first.</a></p>
<ul>
<li><code>compileSdkVersion</code> is set to <code>'android-MNC'</code></li>
- <li><code>minSdkVersion</code> is set to <code>'android-MNC'</code></li>
- <li><code>targetSdkVersion</code> is set to <code>'android-MNC'</code></li>
+ <li><code>minSdkVersion</code> is set to <code>'MNC'</code></li>
+ <li><code>targetSdkVersion</code> is set to <code>'MNC'</code></li>
</ul>
diff --git a/docs/html/tools/data-binding/guide.jd b/docs/html/tools/data-binding/guide.jd
new file mode 100644
index 0000000..6a933d8
--- /dev/null
+++ b/docs/html/tools/data-binding/guide.jd
@@ -0,0 +1,1435 @@
+page.title=Data Binding Guide
+page.tags="databinding", "layouts"
+@jd:body
+
+<div class="wrap">
+<p class="caution" style="background-color:#fffdeb;">
+The <strong>Android Data Binding Library</strong> is available as a <strong>developer
+preview</strong>. Expression syntax and behaviors may change prior to the full release
+of the library, currently planned for Q3 2015. If you have feedback or want to report
+issues, please use the <a href="https://code.google.com/p/android-developer-preview/">issue
+tracker</a>. Stay tuned for more information about Data Binding and examples of how to use it. </a>
+</p>
+</div>
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>
+ In this document:
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#build_environment">Build Environment</a>
+ </li>
+
+ <li>
+ <a href="#data_binding_layout_files">Data Binding Layout Files</a>
+ <ol>
+ <li>
+ <a href="writing_expressions">Writing your first data binding
+ expressions</a>
+ </li>
+
+ <li>
+ <a href="data_object">Data Object</a>
+ </li>
+
+ <li>
+ <a href="binding_data">Binding Data</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#layout_details">Layout Details</a>
+ <ol>
+ <li>
+ <a href="imports">Imports</a>
+ </li>
+
+ <li>
+ <a href="variables">Variables</a>
+ </li>
+
+ <li>
+ <a href="custom_binding_class_names">Custom Binding Class Names</a>
+ </li>
+
+ <li>
+ <a href="includes">Includes</a>
+ </li>
+
+ <li>
+ <a href="expression_language">Expression Language</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#data_objects">Data Objects</a>
+ <ol>
+ <li>
+ <a href="observable_objects">Observable Objects</a>
+ </li>
+
+ <li>
+ <a href="observablefields">ObservableFields</a>
+ </li>
+
+ <li>
+ <a href="observable_collections">Observable Collections</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#generated_binding">Generated Binding</a>
+ <ol>
+ <li>
+ <a href="creating">Creating</a>
+ </li>
+
+ <li>
+ <a href="views_with_ids">Views With IDs</a>
+ </li>
+
+ <li>
+ <a href="variables">Variables</a>
+ </li>
+
+ <li>
+ <a href="viewstubs">ViewStubs</a>
+ </li>
+
+ <li>
+ <a href="advanced_binding">Advanced Binding</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#attribute_setters">Attribute Setters</a>
+ <ol>
+ <li>
+ <a href="automatic_setters">Automatic Setters</a>
+ </li>
+
+ <li>
+ <a href="renamed_setters">Renamed Setters</a>
+ </li>
+
+ <li>
+ <a href="custom_setters">Custom Setters</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#converters">Converters</a>
+ <ol>
+ <li>
+ <a href="object_conversions">Object Conversions</a>
+ </li>
+
+ <li>
+ <a href="custom_conversions">Custom Conversions</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </div><!-- qv -->
+</div><!-- qv-wrapper -->
+
+
+<p>
+ This document explains how to use the Data Binding Library to write
+ declarative layouts and minimize the glue code necessary to bind your
+ application logic and layouts.
+</p>
+
+<h2 id="build_environment">
+ Build Environment
+</h2>
+
+<p>
+ <strong>Setting Up Work Environment:</strong>
+</p>
+
+<p>
+ To set up your application to use data binding, add data binding to the class
+ path of your build gradle file, right below "android".
+</p>
+
+<pre>
+ dependencies {
+ classpath <strong>"com.android.tools.build:gradle:1.2.3"
+ </strong>classpath <strong>"com.android.databinding:dataBinder:</strong>1.0-rc0"
+ }
+}
+</pre>
+<p>
+ Then make sure jcenter is in the repositories list for your sub projects.
+</p>
+
+<pre>
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+</pre>
+<p>
+ In each module you want to use data binding, apply the plugin right after
+ android plugin
+</p>
+
+<pre>
+apply plugin: ‘com.android.application&apos;
+apply plugin: &apos;<strong>com.android.databinding</strong>&apos;
+</pre>
+<p>
+ The data binding plugin is going to add necessary <strong>provided</strong>
+ and <strong>compile configuration</strong> dependencies to your project.
+</p>
+
+<h2 id="data_binding_layout_files">
+ Data Binding Layout Files
+</h2>
+
+<h3 id="writing_expressions">
+ Writing your first data binding expressions
+</h3>
+
+<p>
+ Data-binding layout files are slightly different and start with a root tag of
+ <strong>layout</strong> followed by a <strong>data</strong> element and a
+ <strong>view</strong> root element. This view element is what your root would
+ be in a non-binding layout file. A sample file looks like this:
+</p>
+
+<pre>
+<em>&lt;?</em><strong>xml version="1.0" encoding="utf-8"</strong><em>?&gt;
+</em>&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"</strong>&gt;
+ &lt;<strong>data</strong>&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+ &lt;/<strong>data</strong>&gt;
+ &lt;<strong>LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"</strong>&gt;
+ &lt;<strong>TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="&commat;{user.firstName}"</strong>/&gt;
+ &lt;<strong>TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="&commat;{user.lastName}"</strong>/&gt;
+ &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+ The user <strong>variable</strong> within <strong>data</strong> describes a
+ property that may be used within this layout.
+</p>
+
+<pre>
+&lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+</pre>
+<p>
+ Expressions within the layout are written in the attribute properties using
+ the “<code>&commat;{}</code>” syntax. Here, the TextView’s text is set to the
+ firstName property of user:
+</p>
+
+<pre>
+&lt;<strong>TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="&commat;{user.firstName}"</strong>/&gt;
+</pre>
+<h3 id="data_object">
+ Data Object
+</h3>
+
+<p>
+ Let’s assume for now that you have a plain-old Java object (POJO) for User:
+</p>
+
+<pre>
+<strong>public class </strong>User {
+ <strong>public final </strong>String <strong>firstName</strong>;
+ <strong>public final </strong>String <strong>lastName</strong>;
+ <strong>public </strong>User(String firstName, String lastName) {
+ <strong>this</strong>.<strong>firstName </strong>= firstName;
+ <strong>this</strong>.<strong>lastName </strong>= lastName;
+ }
+}
+</pre>
+<p>
+ This type of object has data that never changes. It is common in applications
+ to have data that is read once and never changes thereafter. It is also
+ possible to use a JavaBeans objects:
+</p>
+
+<pre>
+<strong>public class </strong>User {
+ <strong>private final </strong>String <strong>firstName</strong>;
+ <strong>private final </strong>String <strong>lastName</strong>;
+ <strong>public </strong>User(String firstName, String lastName) {
+ <strong>this</strong>.<strong>firstName </strong>= firstName;
+ <strong>this</strong>.<strong>lastName </strong>= lastName;
+ }
+ <strong>public </strong>String getFirstName() {
+ <strong>return this</strong>.<strong>firstName</strong>;
+ }
+ <strong>public </strong>String getLastName() {
+ <strong>return this</strong>.<strong>lastName</strong>;
+ }
+}
+</pre>
+<p>
+ From the perspective of data binding, these two classes are equivalent. The
+ expression <strong><code>&commat;{user.firstName}</code></strong> used for
+ the TextView’s <strong><code>android:text</code></strong> attribute will
+ access the <strong><code>firstName</code></strong> field in the former class
+ and the <code>getFirstName()</code> method in the latter class.
+</p>
+
+<h3 id="binding_data">
+ Binding Data
+</h3>
+
+<p>
+ By default, a Binding class will be generated based on the name of the layout
+ file, converting it to Pascal case and suffixing “Binding” to it. The above
+ layout file was <code>activity_main.xml</code> so the generate class was
+ <code>ActivityMainBinding</code>. This class holds all the bindings from the
+ layout properties (e.g. the <code>user</code> variable) to the layout’s Views
+ and knows how to assign values for the binding expressions.The easiest means
+ for creating the bindings is to do it while inflating:
+</p>
+
+<pre>
+&commat;Override
+<strong>protected void </strong>onCreate(Bundle savedInstanceState) {
+ <strong>super</strong>.onCreate(savedInstanceState);
+ ActivityMainBinding binding = DataBindingUtil.<em>setContentView</em>(<strong>this</strong>, R.layout.<em><strong>main_activity</strong></em>);
+ User user = <strong>new </strong>User(<strong>"Test"</strong>, <strong>"User"</strong>);
+ binding.setUser(user);
+}
+</pre>
+<p>
+ You’re done! Run the application and you’ll see Test User in the UI.
+ Alternatively, you can get the view via:
+</p>
+
+<pre>
+MainActivityBinding binding = MainActivityBinding.<em>inflate</em>(getLayoutInflater());
+</pre>
+<p>
+ If you are using data binding items inside a ListView or RecyclerView
+ adapter, you may prefer to use:
+</p>
+
+<pre>
+ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup,
+false);
+//or
+ListItemBinding binding = DataBindingUtil.<em>inflate</em>(layoutInflater, R.layout.<em><strong>list_item</strong></em>, viewGroup, <strong>false</strong>);
+</pre>
+<h2 id="layout_details">
+ Layout Details
+</h2>
+
+<h3 id="imports">
+ Imports
+</h3>
+
+<p>
+ Zero or more <strong><code>import</code></strong> elements may be used inside
+ the <strong><code>data</code></strong> element. These allow easy reference to
+ classes inside your layout file, just like in Java.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.view.View"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+ Now, View may be used within your binding expression:
+</p>
+
+<pre>
+&lt;<strong>TextView
+ android:text="&commat;{user.lastName}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="&commat;{user.isAdult ? View.VISIBLE : View.GONE}"</strong>/&gt;
+</pre>
+<p>
+ When there are class name conflicts, one of the classes may be renamed to an
+ “alias:”
+</p>
+
+<pre>
+&lt;<strong>import type="android.view.View"</strong>/&gt;
+&lt;<strong>import type="com.example.real.estate.View"
+ alias="Vista"</strong>/&gt;
+</pre>
+<p>
+ Now, <strong><code>Vista</code></strong> may be used to reference the
+ <code>com.example.real.estate.View</code> and
+ <strong><code>View</code></strong> may be used to reference
+ <code>android.view.View</code> within the layout file. Imported types may be
+ used as type references in variables and expressions:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="com.example.User"</strong>/&gt;
+ &lt;<strong>import type="java.util.List"</strong>/&gt;
+ &lt;<strong>variable name="user" type="User"</strong>/&gt;
+ &lt;<strong>variable name="userList" type="List&amp;lt;User&gt;"</strong>/&gt;
+ &lt;/<strong>data</strong>&gt;
+</pre>
+<p class="note">
+ <strong>Note</strong>: Android Studio does not yet handle imports so the
+ autocomplete for imported variables may not work in your IDE. Your
+ application will still compile fine and you can work around the IDE issue by
+ using fully qualified names in your variable definitions.
+</p>
+
+<pre>
+&lt;<strong>TextView
+ android:text="&commat;{((User)(user.connection)).lastName}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+ Imported types may also be used when referencing static fields and methods in
+ expressions:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="com.example.MyStringUtils"</strong>/&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+ android:text="&commat;{MyStringUtils.capitalize(user.lastName)}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+ Just as in Java, <code>java.lang.*</code> is imported automatically.
+</p>
+
+<h3 id="variables">
+ Variables
+</h3>
+
+<p>
+ Any number of <strong><code>variable</code></strong> elements may be used
+ inside the <strong><code>data</code></strong> element. Each
+ <strong><code>variable</code></strong> element describes a property that may
+ be set on the layout to be used in binding expressions within the layout
+ file.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.graphics.drawable.Drawable"</strong>/&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+ &lt;<strong>variable name="image" type="Drawable"</strong>/&gt;
+ &lt;<strong>variable name="note" type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+ The variable types are inspected at compile time, so if a variable implements
+ <a href="#observable_objects">Observable</a> or is an <a href=
+ "#observable_collections">observable collection</a>, that should be reflected
+ in the type. If the variable is a base class or interface that does not
+ implement the Observable* interface, the variables will <strong>not
+ be</strong> observed!
+</p>
+
+<p>
+ When there are different layout files for various configurations (e.g.
+ landscape or portrait), the variables will be combined. There must not be
+ conflicting variable definitions between these layout files.
+</p>
+
+<p>
+ The generated binding class will have a setter and getter for each of the
+ described variables. The variables will take the default Java values until
+ the setter is called &mdash; <code>null</code> for reference types,
+ <code>0</code> for <code>int</code>, <code>false</code> for
+ <code>boolean</code>, etc.
+</p>
+
+<h3 id="custom_binding_class_names">
+ Custom Binding Class Names
+</h3>
+
+<p>
+ By default, a Binding class is generated based on the name of the layout
+ file, starting it with upper-case, removing underscores ( _ ) and
+ capitalizing the following letter and then suffixing “Binding”. This class
+ will be placed in a databinding package under the module package. For
+ example, the layout file <code>contact_item.xml</code> will generate
+ <code>ContactItemBinding</code>. If the module package is
+ <code>com.example.my.app</code>, then it will be placed in
+ <code>com.example.my.app.databinding</code>.
+</p>
+
+<p>
+ Binding classes may be renamed or placed in different packages by adjusting
+ the <strong><code>class</code></strong> attribute of the
+ <strong><code>data</code></strong> element. For example:
+</p>
+
+<pre>
+&lt;<strong>data class="ContactItem"</strong>&gt;
+ ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+ This generates the binding class as <code>ContactItem</code> in the
+ databinding package in the module package. If the class should be generated
+ in a different package within the module package, it may be prefixed with
+ “.”:
+</p>
+
+<pre>
+&lt;<strong>data class=".ContactItem"</strong>&gt;
+ ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+ In this case, <code>ContactItem</code> is generated in the module package
+ directly. Any package may be used if the full package is provided:
+</p>
+
+<pre>
+&lt;<strong>data class="com.example.ContactItem"</strong>&gt;
+ ...
+&lt;/<strong>data</strong>&gt;
+</pre>
+<h3 id="includes">
+ Includes
+</h3>
+
+<p>
+ Variables may be passed into an included layout&apos;s binding from the
+ containing layout by using the application namespace and the variable name in
+ an attribute:
+</p>
+
+<pre>
+<em>&lt;?</em><strong>xml version="1.0" encoding="utf-8"</strong><em>?&gt;
+</em>&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"
+</strong> <strong> xmlns:bind="http://schemas.android.com/apk/res-auto"</strong>&gt;
+ &lt;<strong>data</strong>&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+ &lt;/<strong>data</strong>&gt;
+ &lt;<strong>LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"</strong>&gt;
+ &lt;<strong>include layout="&commat;layout/name"
+ bind:user="&commat;{user}"</strong>/&gt;
+ &lt;<strong>include layout="&commat;layout/contact"
+ bind:user="&commat;{user}"</strong>/&gt;
+ &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+ Here, there must be a <code>user</code> variable in both the
+ <code>name.xml</code> and <code>contact.xml</code> layout files.
+</p>
+
+<h3 id="expression_language">
+ Expression Language
+</h3>
+
+<h4 id="common_features">
+ Common Features
+</h4>
+
+<p>
+ The expression language looks a lot like a Java expression. These are the
+ same:
+</p>
+
+<ul>
+ <li>Mathematical <strong><code>+ - / * %</code></strong>
+ </li>
+
+ <li>String concatenation <strong><code>+</code></strong>
+ </li>
+
+ <li>
+ <code>L</code>ogical <strong><code>&& ||</code></strong>
+ </li>
+
+ <li>Binary <strong><code>&</code> <code>|</code> <code>^</code></strong>
+ </li>
+
+ <li>Unary <strong><code>+ - ! ~</code></strong>
+ </li>
+
+ <li>Shift <strong><code>&gt;&gt; &gt;&gt;&gt; &lt;&lt;</code></strong>
+ </li>
+
+ <li>Comparison <strong><code>== &gt; &lt; &gt;= &lt;=</code></strong>
+ </li>
+
+ <li>
+ <strong><code>instanceof</code></strong>
+ </li>
+
+ <li>Grouping <strong><code>()</code></strong>
+ </li>
+
+ <li>Literals - character, String, numeric, <strong><code>null</code></strong>
+ </li>
+
+ <li>Cast
+ </li>
+
+ <li>Method calls
+ </li>
+
+ <li>Field access
+ </li>
+
+ <li>Array access <strong><code>[]</code></strong>
+ </li>
+
+ <li>Ternary operator <strong><code>?:</code></strong>
+ </li>
+</ul>
+
+<p>
+ Examples:
+</p>
+
+<pre>
+<strong>android:text="&commat;{String.valueOf(index + 1)}"
+android:visibility="&commat;{age &amp;lt; 13 ? View.GONE : View.VISIBLE}"
+android:transitionName=&apos;&commat;{"image_" + id}&apos;</strong>
+</pre>
+<h4 id="missing_operations">
+ Missing Operations
+</h4>
+
+<p>
+ A few operations are missing from the expression syntax that you can use in
+ Java.
+</p>
+
+<ul>
+ <li>
+ <strong><code>this</code></strong>
+ </li>
+
+ <li>
+ <strong><code>super</code></strong>
+ </li>
+
+ <li>
+ <strong><code>new</code></strong>
+ </li>
+
+ <li>Explicit generic invocation
+ </li>
+</ul>
+
+<h4 id="null_coalescing_operator">
+ Null Coalescing Operator
+</h4>
+
+<p>
+ The null coalescing operator (<strong><code>??</code></strong>) chooses the
+ left operand if it is not null or the right if it is null.
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.displayName ?? user.lastName}"</strong>
+</pre>
+<p>
+ This is functionally equivalent to:
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.displayName != null ? user.displayName : user.lastName}"</strong>
+</pre>
+<h4 id="property_reference">
+ Property Reference
+</h4>
+
+<p>
+ The first was already discussed in the <a href=
+ "#writing_your_first_data_binding_expressions">Writing your first data
+ binding expressions</a> above: short form JavaBean references. When an
+ expression references a property on a class, it uses the same format for
+ fields, getters, and ObservableFields.
+</p>
+
+<pre>
+<strong>android:text="&commat;{user.lastName}"</strong>
+</pre>
+<h4>
+ Avoiding NullPointerException
+</h4>
+
+<p>
+ Generated data binding code automatically checks for nulls and avoid null
+ pointer exceptions. For example, in the expression
+ <code>&commat;{user.name}</code>, if <code>user</code> is null,
+ <code>user.name</code> will be assigned its default value (null). If you were
+ referencing <code>user.age</code>, where age is an <code>int</code>, then it
+ would default to 0.
+</p>
+
+<h4 id="collections">
+ Collections
+</h4>
+
+<p>
+ Common collections: arrays, lists, sparse lists, and maps, may be accessed
+ using the <code>[]</code> operator for convenience.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.util.SparseArray"</strong>/&gt;
+ &lt;<strong>import type="java.util.Map"</strong>/&gt;
+ &lt;<strong>import type="java.util.List"</strong>/&gt;
+ &lt;<strong>variable name="list" type="List&lt;String&gt;"</strong>/&gt;
+ &lt;<strong>variable name="sparse" type="SparseArray&amp;lt;String&gt;"</strong>/&gt;
+ &lt;<strong>variable name="map" type="Map&amp;lt;String, String&gt;"</strong>/&gt;
+ &lt;<strong>variable name="index" type="int"</strong>/&gt;
+ &lt;<strong>variable name="key" type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+<strong>android:text="&commat;{list[index]}"
+</strong>…
+<strong>android:text="&commat;{sparse[index]}"
+</strong>…
+<strong>android:text="&commat;{map[key]}"
+</strong>
+</pre>
+<h4 id="string_literals">
+ String Literals
+</h4>
+
+<p>
+ When using single quotes around the attribute value, it is easy to use double
+ quotes in the expression:
+</p>
+
+<pre>
+<strong>android:text=&apos;&commat;{map["firstName"]}&apos;</strong>
+</pre>
+<p>
+ It is also possible to use double quotes to surround the attribute value.
+ When doing so, String literals should either use the &amp;quot; or back quote
+ (`).
+</p>
+
+<pre>
+<strong>android:text="&commat;{map[`firstName`}"
+android:text="&commat;{map[&amp;quot;firstName&amp;quot;]}"</strong>
+</pre>
+<h4 id="resources">
+ Resources
+</h4>
+
+<p>
+ It is possible to access resources as part of expressions using the normal
+ syntax:
+</p>
+
+<pre>
+<strong>android:padding="&commat;{large? &commat;dimen/largePadding : &commat;dimen/smallPadding}"</strong>
+</pre>
+<p>
+ Format strings and plurals may be evaluated by providing parameters:
+</p>
+
+<pre>
+<strong>android:text="&commat;{&commat;string/nameFormat(firstName, lastName)}"
+android:text="&commat;{&commat;plurals/banana(bananaCount)}"</strong>
+</pre>
+<p>
+ When a plural takes multiple parameters, all parameters should be passed:
+</p>
+
+<pre>
+
+ Have an orange
+ Have %d oranges
+
+android:text="<strong>&commat{&commatplurals/orange(orangeCount, orangeCount)}</strong>"
+</pre>
+<p>
+ Some resources require explicit type evaluation.
+</p>
+
+<table>
+ <tr>
+ <th>
+ Type
+ </th>
+ <th>
+ Normal Reference
+ </th>
+ <th>
+ Expression Reference
+ </th>
+ </tr>
+
+ <tr>
+ <td>
+ <pre>
+String[]
+</pre>
+ </td>
+ <td>
+ &commat;array
+ </td>
+ <td>
+ &commat;stringArray
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ int[]
+ </td>
+ <td>
+ &commat;array
+ </td>
+ <td>
+ &commat;intArray
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ TypedArray
+ </td>
+ <td>
+ &commat;array
+ </td>
+ <td>
+ &commat;typedArray
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ Animator
+ </td>
+ <td>
+ &commat;animator
+ </td>
+ <td>
+ &commat;animator
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ StateListAnimator
+ </td>
+ <td>
+ &commat;animator
+ </td>
+ <td>
+ &commat;stateListAnimator
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ color <code>int</code>
+ </td>
+ <td>
+ <pre>
+&commat;color
+</pre>
+ </td>
+ <td>
+ &commat;color
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ ColorStateList
+ </td>
+ <td>
+ &commat;color
+ </td>
+ <td>
+ &commat;colorStateList
+ </td>
+ </tr>
+</table>
+
+<h2 id="data_objects">
+ Data Objects
+</h2>
+
+<p>
+ Any plain old Java object (POJO) may be used for data binding, but modifying
+ a POJO will not cause the UI to update. The real power of data binding can be
+ used by giving your data objects the ability to notify when data changes.
+ There are three different data change notification mechanisms,
+ <code>Observable</code> objects, <code>ObservableField</code>s, and
+ <code>observable collections</code>.
+</p>
+
+<p>
+ When one of these observable data object is bound to the UI and a property of
+ the data object changes, the UI will be updated automatically.
+</p>
+
+<h3 id="observable_objects">
+ Observable Objects
+</h3>
+
+<p>
+ A class implementing <code>android.databinding.Observable</code> interface
+ will allow the binding to attach a single listener to a bound object to
+ listen for changes of all properties on that object.
+</p>
+
+<p>
+ The <code>Observable</code> interface has a mechanism to add and remove
+ listeners, but notifying is up to the developer. To make development easier,
+ a base class, <code>BaseObservable,</code> was created to implement the
+ listener registration mechanism. The data class implementer is still
+ responsible for notifying when the properties change. This is done by
+ assigning a <code>Bindable</code> annotation to the getter and notifying in
+ the setter.
+</p>
+
+<pre>
+<strong>private static class </strong>User <strong>extends </strong>BaseObservable {
+ <strong>private </strong>String <strong>firstName</strong>;
+ <strong>private </strong>String <strong>lastName</strong>;
+ &commat;Bindable
+ <strong>public </strong>String getFirstName() {
+ <strong>return this</strong>.<strong>firstName</strong>;
+ }
+ &commat;Bindable
+ <strong>public </strong>String getFirstName() {
+ <strong>return this</strong>.<strong>lastName</strong>;
+ }
+ <strong>public void </strong>setFirstName(String firstName) {
+ <strong>this</strong>.<strong>firstName </strong>= firstName;
+ notifyPropertyChanged(BR.firstName);
+ }
+ <strong>public void </strong>setLastName(String lastName) {
+ <strong>this</strong>.<strong>lastName </strong>= lastName;
+ notifyPropertyChanged(BR.lastName);
+ }
+}
+</pre>
+<p>
+ The <code>Bindable</code> annotation generates an entry in the BR class file
+ during compilation. The BR class file will be generated in the module
+ package.If the base class for data classes cannot be changed, the
+ <code>Observable</code> interface may be implemented using the convenient
+ <code>PropertyChangeRegistry</code> to store and notify listeners
+ efficiently.
+</p>
+
+<h3 id="observablefields">
+ ObservableFields
+</h3>
+
+<p>
+ A little work is involved in creating Observable classes, so developers who
+ want to save time or have few properties may use ObservableFields.
+ ObservableFields are self-contained observable objects that have a single
+ field. There are versions for all primitive types and one for reference
+ types. To use, create a public final field in the data class:
+</p>
+
+<pre>
+<strong>private static class </strong>User <strong>extends </strong>BaseObservable {
+ <strong>public final </strong>ObservableField&lt;String&gt; <strong>firstName </strong>=
+ <strong>new </strong>ObservableField&lt;&gt;();
+ <strong>public final </strong>ObservableField&lt;String&gt; <strong>lastName </strong>=
+ <strong>new </strong>ObservableField&lt;&gt;();
+ <strong>public final </strong>ObservableInt <strong>age </strong>= <strong>new </strong>ObservableInt();
+}
+</pre>
+<p>
+ That&apos;s it! To access the value, use the set and get accessor methods:
+</p>
+
+<pre>
+user.<strong>firstName</strong>.set(<strong>"Google"</strong>);
+<strong>int </strong>age = user.<strong>age</strong>.get();
+</pre>
+<h3 id="observable_collections">
+ Observable Collections
+</h3>
+
+<p>
+ Some applications use more dynamic structures to hold data. Observable
+ collections allow keyed access to these data objects.ObservableArrayMap is
+ useful when the key is a reference type, such as String.
+</p>
+
+<pre>
+ObservableArrayMap&lt;String, Object&gt; user = <strong>new </strong>ObservableArrayMap&lt;&gt;();
+user.put(<strong>"firstName"</strong>, <strong>"Google"</strong>);
+user.put(<strong>"lastName"</strong>, <strong>"Inc."</strong>);
+user.put(<strong>"age"</strong>, 17);
+</pre>
+<p>
+ In the layout, the map may be accessed through the String keys:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.databinding.ObservableMap"</strong>/&gt;
+ &lt;<strong>variable name="user" type="ObservableMap&amp;lt;String, Object&gt;"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+ android:text=&apos;&commat;{user["lastName"]}&apos;
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+&lt;<strong>TextView
+ android:text=&apos;&commat;{String.valueOf(1 + (Integer)user["age"])}&apos;
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+ ObservableArrayList is useful when the key is an integer:
+</p>
+
+<pre>
+ObservableArrayList&lt;Object&gt; user = <strong>new </strong>ObservableArrayList&lt;&gt;();
+user.add(<strong>"Google"</strong>);
+user.add(<strong>"Inc."</strong>);
+user.add(17);
+</pre>
+<p>
+ In the layout, the list may be accessed through the indices:
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.databinding.ObservableList"</strong>/&gt;
+ &lt;<strong>import type="com.example.my.app.Fields"</strong>/&gt;
+ &lt;<strong>variable name="user" type="ObservableList&amp;lt;Object&gt;"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+…
+&lt;<strong>TextView
+ android:text=&apos;&commat;{user[Fields.LAST_NAME]}&apos;
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+&lt;<strong>TextView
+ android:text=&apos;&commat;{String.valueOf(1 + (Integer)user[Fields.AGE])}&apos;
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<h2 id="generated_binding">
+ Generated Binding
+</h2>
+
+<p>
+ The generated binding class links the layout variables with the Views within
+ the layout. As discussed earlier, the name and package of the Binding may be
+ <a href="#custom_binding_class_names">customized</a>. The Generated binding
+ classes all extend <code>android.databinding.ViewDataBinding</code>.
+</p>
+
+<h3 id="creating">
+ Creating
+</h3>
+
+<p>
+ The binding should be created soon after inflation to ensure that the View
+ hierarchy is not disturbed prior to binding to the Views with expressions
+ within the layout. There are a few ways to bind to a layout. The most common
+ is to use the static methods on the Binding class.The inflate method inflates
+ the View hierarchy and binds to it all it one step. There is a simpler
+ version that only takes a <code>LayoutInflater</code> and one that takes a
+ <code>ViewGroup</code> as well:
+</p>
+
+<pre>
+MyLayoutBinding binding = MyLayoutBinding.<em>inflate</em>(<strong>layoutInflater</strong>);
+MyLayoutBinding binding = MyLayoutBinding.<em>inflate</em>(LayoutInflater, viewGroup, false);
+</pre>
+<p>
+ If the layout was inflated using a different mechanism, it may be bound
+ separately:
+</p>
+
+<pre>
+MyLayoutBinding binding = MyLayoutBinding.<em>bind</em>(viewRoot);
+</pre>
+<p>
+ Sometimes the binding cannot be known in advance. In such cases, the binding
+ can be created using the DataBindingUtil class:
+</p>
+
+<pre>
+ViewDataBinding binding = DataBindingUtil.<em>inflate</em>(LayoutInflater, layoutId,
+ parent, attachToParent);
+ViewDataBinding binding = DataBindingUtil.<em>bindTo</em>(viewRoot, layoutId);
+</pre>
+<h3 id="views_with_ids">
+ Views With IDs
+</h3>
+
+<p>
+ A public final field will be generated for each View with an ID in the
+ layout. The binding does a single pass on the View hierarchy, extracting the
+ Views with IDs. This mechanism can be faster than calling findViewById for
+ several Views. For example:
+</p>
+
+<pre>
+&lt;<strong>layout xmlns:android="http://schemas.android.com/apk/res/android"</strong>&gt;
+ &lt;<strong>data</strong>&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+ &lt;/<strong>data</strong>&gt;
+ &lt;<strong>LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"</strong>&gt;
+ &lt;<strong>TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="&commat;{user.firstName}"</strong>
+ <strong>android:id="&commat;+id/firstName"</strong>/&gt;
+ &lt;<strong>TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="&commat;{user.lastName}"</strong>
+ <strong>android:id="&commat;+id/lastName"</strong>/&gt;
+ &lt;/<strong>LinearLayout</strong>&gt;
+&lt;/<strong>layout</strong>&gt;
+</pre>
+<p>
+ Will generate a binding class with:
+</p>
+
+<pre>
+<strong>public final </strong>TextView <strong>firstName</strong>;
+<strong>public final </strong>TextView <strong>lastName</strong>;
+</pre>
+<p>
+ IDs are not nearly as necessary as without data binding, but there are still
+ some instances where access to Views are still necessary from code.
+</p>
+
+<h3 id="variables2">
+ Variables
+</h3>
+
+<p>
+ Each variable will be given accessor methods.
+</p>
+
+<pre>
+&lt;<strong>data</strong>&gt;
+ &lt;<strong>import type="android.graphics.drawable.Drawable"</strong>/&gt;
+ &lt;<strong>variable name="user" type="com.example.User"</strong>/&gt;
+ &lt;<strong>variable name="image" type="Drawable"</strong>/&gt;
+ &lt;<strong>variable name="note" type="String"</strong>/&gt;
+&lt;/<strong>data</strong>&gt;
+</pre>
+<p>
+ will generate setters and getters in the binding:
+</p>
+
+<pre>
+<strong>public abstract </strong>com.example.User getUser();
+<strong>public abstract void </strong>setUser(com.example.User user);
+<strong>public abstract </strong>Drawable getImage();
+<strong>public abstract void </strong>setImage(Drawable image);
+<strong>public abstract </strong>String getNote();
+<strong>public abstract void </strong>setNote(String note);
+</pre>
+<h3 id="viewstubs">
+ ViewStubs
+</h3>
+
+<p>
+ ViewStubs are a little different from normal Views. They start off invisible
+ and when they either are made visible or are explicitly told to inflate, they
+ replace themselves in the layout by inflating another layout.
+</p>
+
+<p>
+ Because the ViewStub essentially disappears from the View hierarchy, the View
+ in the binding object must also disappear to allow collection. Because the
+ Views are final, a ViewStubProxy object takes the place of the ViewStub,
+ giving the developer access to the ViewStub when it exists and also access to
+ the inflated View hierarchy when the ViewStub has been inflated.
+</p>
+
+<p>
+ When inflating another layout, a binding must be established for the new
+ layout. Therefore, the ViewStubProxy must listen to the ViewStub&apos;s
+ OnInflateListener and establish the binding at that time. Since only one can
+ exist, the ViewStubProxy allows the developer to set an OnInflateListener on
+ it that it will call after establishing the binding.
+</p>
+
+<h3 id="advanced_binding">
+ Advanced Binding
+</h3>
+
+<h4 id="dynamic_variables">
+ Dynamic Variables
+</h4>
+
+<p>
+ At times, the specific binding class won&apos;t be known. For example, a
+ RecyclerView Adapter operating against arbitrary layouts won&apos;t know the
+ specific binding class. It still must assign the binding value during the
+ onBindViewHolder.
+</p>
+
+<p>
+ In this example, all layouts that the RecyclerView binds to have an "item"
+ variable. The BindingHolder has a getBinding method returning the
+ <code>ViewDataBinding</code> base.
+</p>
+
+<pre>
+<strong>public void </strong>onBindViewHolder(BindingHolder holder, <strong>int </strong>position) {
+ <strong>final </strong>T item = <strong>mItems</strong>.get(position);
+ holder.getBinding().setVariable(BR.item, item);
+ holder.getBinding().executePendingBindings();
+}
+</pre>
+<h4 id="immediate_binding">
+ Immediate Binding
+</h4>
+
+<p>
+ When a variable or observable changes, the binding will be scheduled to
+ change before the next frame. There are times, however, when binding must be
+ executed immediately. To force execution, use the
+ <code>executePendingBindings()</code> method.
+</p>
+
+<h4>
+ Background Thread
+</h4>
+
+<p>
+ You can change your data model in a background thread as long as it is not a
+ collection. Data binding will localize each variable / field while evaluating
+ to avoid any concurrency issues.
+</p>
+
+<h2 id="attribute_setters">
+ Attribute Setters
+</h2>
+
+<p>
+ Whenever a bound value changes, the generated binding class must call a
+ setter method on the View with the binding expression. The data binding
+ framework has ways to customize which method to call to set the value.
+</p>
+
+<h3 id="automatic_setters">
+ Automatic Setters
+</h3>
+For an attribute, data binding tries to find the method setAttribute. The
+namespace for the attribute does not matter, only the attribute name itself.
+<p>
+ For example, an expression associated with TextView&apos;s attribute
+ <strong><code>android:text</code></strong> will look for a setText(String).
+ If the expression returns an int, data binding will search for a setText(int)
+ method. Be careful to have the expression return the correct type, casting if
+ necessary. Note that data binding will work even if no attribute exists with
+ the given name. You can then easily "create" attributes for any setter by
+ using data binding. For example, support DrawerLayout doesn&apos;t have any
+ attributes, but plenty of setters. You can use the automatic setters to use
+ one of these.
+</p>
+
+<pre>
+&lt;android.support.v4.widget.<strong>DrawerLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:scrimColor="&commat;{&commat;color/scrim}"
+ app:drawerListener="&commat;{fragment.drawerListener}"/&gt;</strong>
+</pre>
+<h3 id="renamed_setters">
+ Renamed Setters
+</h3>
+
+<p>
+ Some attributes have setters that don&apos;t match by name. For these
+ methods, an attribute may be associated with the setter through
+ BindingMethods annotation. This must be associated with a class and contains
+ BindingMethod annotations, one for each renamed method. For example, the
+ <strong><code>android:tint</code></strong> attribute is really associated
+ with setImageTintList, not setTint.
+</p>
+
+<pre>
+&commat;BindingMethods({
+ &commat;BindingMethod(type = <strong>"android.widget.ImageView"</strong>,
+ attribute = <strong>"android:tint"</strong>,
+ method = <strong>"setImageTintList"</strong>),
+})
+</pre>
+<p>
+ It is unlikely that developers will need to rename setters; the android
+ framework attributes have already been implemented.
+</p>
+
+<h3 id="custom_setters">
+ Custom Setters
+</h3>
+
+<p>
+ Some attributes need custom binding logic. For example, there is no
+ associated setter for the <strong><code>android:paddingLeft</code></strong>
+ attribute. Instead, <code>setPadding(left, top, right, bottom)</code> exists.
+ A static binding adapter method with the <code>BindingAdapter</code>
+ annotation allows the developer to customize how a setter for an attribute is
+ called.
+</p>
+
+<p>
+ The android attributes have already had <code>BindingAdapter</code>s created.
+ For example, here is the one for <code>paddingLeft</code>:
+</p>
+
+<pre>
+
+&commat;BindingAdapter(<strong>"android:paddingLeft"</strong>)
+<strong>public static void </strong>setPaddingLeft(View view, <strong>int </strong>padding) {
+ view.setPadding(padding,
+ view.getPaddingTop(),
+ view.getPaddingRight(),
+ view.getPaddingBottom());
+}
+</pre>
+<p>
+ Binding adapters are useful for other types of customization. For example, a
+ custom loader can be called off-thread to load an image.
+</p>
+
+<p>
+ Developer-created binding adapters will override the data binding default
+ adapters when there is a conflict.
+</p>
+
+<p>
+ You can also have adapters that receive multiple parameters.
+</p>
+
+<pre>
+&commat;BindingAdapter({<strong>"bind:imageUrl"</strong>, <strong>"bind:error"</strong>})
+<strong>public static void </strong>loadImage(ImageView view, String url, Drawable error) {
+ Picasso.<em>with</em>(view.getContext()).load(url).error(error).into(view);
+}
+</pre>
+<pre>
+&lt;ImageView app:imageUrl=“&commat;{venue.imageUrl}”
+app:error=“&commat;{&commat;drawable/venueError}”/&gt;
+</pre>
+
+<p>
+ This adapter will be called if both <strong>imageUrl</strong> and
+ <strong>error</strong> are used for an ImageView and <em>imageUrl</em> is a
+ string and <em>error</em> is a drawable.
+</p>
+
+<ul>
+ <li>Custom namespaces are ignored during matching.
+ </li>
+
+ <li>You can also write adapters for android namespace.
+ </li>
+</ul>
+
+<h2 id="converters">
+ Converters
+</h2>
+
+<h3 id="object_conversions">
+ Object Conversions
+</h3>
+
+<p>
+ When an Object is returned from a binding expression, a setter will be chosen
+ from the automatic, renamed, and custom setters. The Object will be cast to a
+ parameter type of the chosen setter.
+</p>
+
+<p>
+ This is a convenience for those using ObservableMaps to hold data. for
+ example:
+</p>
+
+<pre>
+&lt;<strong>TextView
+ android:text=&apos;&commat;{userMap["lastName"]}&apos;
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+
+<p>
+The <code>userMap</code> returns an Object and that Object will be automatically cast to
+ parameter type found in the setter <code>setText(CharSequence)</code>. When there
+ may be confusion about the parameter type, the developer will need
+ to cast in the expression.
+</p>
+
+<h3 id="custom_conversions">Custom Conversions</h3>
+
+<p>
+ Sometimes conversions should be automatic between specific types. For
+ example, when setting the background:
+</p>
+
+<pre>
+&lt;<strong>View
+ android:background="&commat;{isError ? &commat;color/red : &commat;color/white}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
+<p>
+ Here, the background takes a <code>Drawable</code>, but the color is an
+ integer. Whenever a <code>Drawable</code> is expected and an integer is
+ returned, the <code>int</code> should be converted to a
+ <code>ColorDrawable</code>. This conversion is done using a static method
+ with a BindingConversion annotation:
+</p>
+
+<pre>
+&commat;BindingConversion
+<strong>public static </strong>ColorDrawable convertColorToDrawable(<strong>int </strong>color) {
+ <strong>return new </strong>ColorDrawable(color);
+}
+</pre>
+<p>
+ Note that conversions only happen at the setter level, so it is <strong>not
+ allowed</strong> to mix types like this:
+</p>
+
+<pre>
+&lt;<strong>View
+ android:background="&commat;{isError ? &commat;drawable/error : &commat;color/white}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"</strong>/&gt;
+</pre>
diff --git a/docs/html/tools/data-binding/index.jd b/docs/html/tools/data-binding/index.jd
new file mode 100644
index 0000000..4ad11b6
--- /dev/null
+++ b/docs/html/tools/data-binding/index.jd
@@ -0,0 +1,18 @@
+page.title=Android Data Binding Library
+page.metaDescription=
+
+@jd:body
+
+<p>
+ Some text here.
+</p>
+
+
+
+<!-- <h2>Related Resources</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="tag:engagement"
+ data-sortOrder="random"
+ data-cardSizes="6x2"
+ data-maxResults="3">
+ </div> -->
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd
index ae15bc1..90116d4 100644
--- a/docs/html/tools/sdk/ndk/index.jd
+++ b/docs/html/tools/sdk/ndk/index.jd
@@ -1,4470 +1,21 @@
-ndk=true
-page.template=sdk
-
-
-ndk.mac64_download=android-ndk-r10e-darwin-x86_64.bin
-ndk.mac64_bytes=388937326
-ndk.mac64_checksum=2cb8893a5701603519d38a7e04c50e81
-
-ndk.linux64_download=android-ndk-r10e-linux-x86_64.bin
-ndk.linux64_bytes=401522849
-ndk.linux64_checksum=19af543b068bdb7f27787c2bc69aba7f
-
-ndk.linux32_download=android-ndk-r10e-linux-x86.bin
-ndk.linux32_bytes=394281908
-ndk.linux32_checksum=c3edd3273029da1cbd2f62c48249e978
-
-ndk.win64_download=android-ndk-r10e-windows-x86_64.exe
-ndk.win64_bytes=419616132
-ndk.win64_checksum=8412bb4991a95e08fda50b5a44d95df7
-
-ndk.win32_download=android-ndk-r10e-windows-x86.exe
-ndk.win32_bytes=396563176
-ndk.win32_checksum=1a82445baaf62aec3a46386ab1e5772c
-
-
-
page.title=Android NDK
@jd:body
-
-<div id="tos" style="display:none;width:760px;height:0;margin:0 auto">
-
-<div id="download" class="ndk" style="
-z-index: 99;
-width: 720px;
-position: absolute;
-margin: -70px 0;
-padding: 14px;
-background: white;
-border: 1px solid #999;
-box-shadow: -10px 10px 50px #888;
--moz-box-shadow: -10px 10px 50px #888;
--webkit-box-shadow: -10px 10px 50px #888;">
-<p>Before installing the Android NDK, you must agree to the following terms and conditions.</p>
-<div class="sdk-terms" style="width:auto" onfocus="this.blur()">
-<h2 class="norule">Terms and Conditions</h2>
-This is the Android Software Development Kit License Agreement
-
-<h3>1. Introduction</h3>
-1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and
-specifically including the Android system files, packaged APIs, and Google APIs add-ons) is
-licensed to you subject to the terms of this License Agreement. This License Agreement forms a
-legally binding contract between you and Google in relation to your use of the SDK.
-
-1.2 “Android” means the Android software stack for devices, as made available under the Android
-Open Source Project, which is located at the following URL: http://source.android.com/, as updated
-from time to time.
-
-1.3 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600
-Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-
-<h3>2. Accepting this License Agreement</h3>
-2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the
-SDK if you do not accept this License Agreement.
-
-2.2 By clicking to accept, you hereby agree to the terms of this License Agreement.
-
-2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred
-from receiving the SDK under the laws of the United States or other countries including the country
-in which you are resident or from which you use the SDK.
-
-2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other
-entity, you represent and warrant that you have full legal authority to bind your employer or such
-entity to this License Agreement. If you do not have the requisite authority, you may not accept
-the License Agreement or use the SDK on behalf of your employer or other entity.
-
-
-<h3>3. SDK License from Google</h3>
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide,
-royalty-free, non-assignable and non-exclusive license to use the SDK solely to develop
-applications to run on the Android platform.
-
-3.2 You agree that Google or third parties own all legal right, title and interest in and to the
-SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property
-Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law,
-and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.3 You may not use the SDK for any purpose not expressly permitted by this License Agreement.
-Except to the extent required by applicable third party licenses, you may not: (a) copy (except for
-backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create
-derivative works of the SDK or any part of the SDK; or (b) load any part of the SDK onto a mobile
-handset or any other hardware device except a personal computer, combine any part of the SDK with
-other software, or distribute any software or device incorporating a part of the SDK.
-
-3.4 You agree that you will not take any actions that may cause or result in the fragmentation of
-Android, including but not limited to distributing, participating in the creation of, or promoting
-in any way a software development kit derived from the SDK.
-
-3.5 Use, reproduction and distribution of components of the SDK licensed under an open source
-software license are governed solely by the terms of that open source software license and not this
-License Agreement.
-
-3.6 You agree that the form and nature of the SDK that Google provides may change without prior
-notice to you and that future versions of the SDK may be incompatible with applications developed
-on previous versions of the SDK. You agree that Google may stop (permanently or temporarily)
-providing the SDK (or any features within the SDK) to you or to users generally at Google's sole
-discretion, without prior notice to you.
-
-3.7 Nothing in this License Agreement gives you a right to use any of Google's trade names,
-trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including
-copyright and trademark notices) that may be affixed to or contained within the SDK.
-
-
-<h3>4. Use of the SDK by You</h3>
-4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under
-this License Agreement in or to any software applications that you develop using the SDK, including
-any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a)
-this License Agreement and (b) any applicable law, regulation or generally accepted practices or
-guidelines in the relevant jurisdictions (including any laws regarding the export of data or
-software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the SDK to develop applications for general public users, you will
-protect the privacy and legal rights of those users. If the users provide you with user names,
-passwords, or other login information or personal information, you must make the users aware that
-the information will be available to your application, and you must provide legally adequate
-privacy notice and protection for those users. If your application stores personal or sensitive
-information provided by users, it must do so securely. If the user provides your application with
-Google Account information, your application may only use that information to access the user's
-Google Account when, and for the limited purposes for which, the user has given you permission to
-do so.
-
-4.4 You agree that you will not engage in any activity with the SDK, including the development or
-distribution of an application, that interferes with, disrupts, damages, or accesses in an
-unauthorized manner the servers, networks, or other properties or services of any third party
-including, but not limited to, Google or any mobile communications carrier.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any data, content, or resources that you create, transmit or display
-through Android and/or applications for Android, and for the consequences of your actions
-(including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any breach of your obligations under this License Agreement, any applicable
-third party contract or Terms of Service, or any applicable law or regulation, and for the
-consequences (including any loss or damage which Google or any third party may suffer) of any such
-breach.
-
-
-<h3>5. Your Developer Credentials</h3>
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer
-credentials that may be issued to you by Google or which you may choose yourself and that you will
-be solely responsible for all applications that are developed under your developer credentials.
-
-
-<h3>6. Privacy and Information</h3>
-6.1 In order to continually innovate and improve the SDK, Google may collect certain usage
-statistics from the software including but not limited to a unique identifier, associated IP
-address, version number of the software, and information on which tools and/or services in the SDK
-are being used and how they are being used. Before any of this information is collected, the SDK
-will notify you and seek your consent. If you withhold consent, the information will not be
-collected.
-
-6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in
-accordance with Google's Privacy Policy.
-
-
-<h3>7. Third Party Applications</h3>
-7.1 If you use the SDK to run applications developed by a third party or that access data, content
-or resources provided by a third party, you agree that Google is not responsible for those
-applications, data, content, or resources. You understand that all data, content or resources which
-you may access through such third party applications are the sole responsibility of the person from
-which they originated and that Google is not liable for any loss or damage that you may experience
-as a result of the use or access of any of those third party applications, data, content, or
-resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third
-party application may be protected by intellectual property rights which are owned by the providers
-(or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell,
-distribute or create derivative works based on these data, content, or resources (either in whole
-or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may
-be subject to separate terms between you and the relevant third party. In that case, this License
-Agreement does not affect your legal relationship with these third parties.
-
-
-<h3>8. Using Android APIs</h3>
-8.1 Google Data APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be
-protected by intellectual property rights which are owned by Google or those parties that provide
-the data (or by other persons or companies on their behalf). Your use of any such API may be
-subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or
-create derivative works based on this data (either in whole or in part) unless allowed by the
-relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you
-shall retrieve data only with the user's explicit consent and only when, and for the limited
-purposes for which, the user has given you permission to do so.
-
-
-<h3>9. Terminating this License Agreement</h3>
-9.1 This License Agreement will continue to apply until terminated by either you or Google as set
-out below.
-
-9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK
-and any relevant developer credentials.
-
-9.3 Google may at any time, terminate this License Agreement with you if:
-(A) you have breached any provision of this License Agreement; or
-(B) Google is required to do so by law; or
-(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated
-its relationship with Google or ceased to offer certain parts of the SDK to you; or
-(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country
-in which you are resident or from which you use the service, or the provision of the SDK or certain
-SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.
-
-9.4 When this License Agreement comes to an end, all of the legal rights, obligations and
-liabilities that you and Google have benefited from, been subject to (or which have accrued over
-time whilst this License Agreement has been in force) or which are expressed to continue
-indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall
-continue to apply to such rights, obligations and liabilities indefinitely.
-
-
-<h3>10. DISCLAIMER OF WARRANTIES</h3>
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE
-SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE
-SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR
-COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-
-<h3>11. LIMITATION OF LIABILITY</h3>
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS
-LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY
-LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN
-AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-
-<h3>12. Indemnification</h3>
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless
-Google, its affiliates and their respective directors, officers, employees and agents from and
-against any and all claims, actions, suits or proceedings, as well as any and all losses,
-liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or
-accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes
-any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of
-any person or defames any person or violates their rights of publicity or privacy, and (c) any
-non-compliance by you with this License Agreement.
-
-
-<h3>13. Changes to the License Agreement</h3>
-13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK.
-When these changes are made, Google will make a new version of the License Agreement available on
-the website where the SDK is made available.
-
-
-<h3>14. General Legal Terms</h3>
-14.1 This License Agreement constitutes the whole legal agreement between you and Google and
-governs your use of the SDK (excluding any services which Google may provide to you under a
-separate written agreement), and completely replaces any prior agreements between you and Google in
-relation to the SDK.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is
-contained in this License Agreement (or which Google has the benefit of under any applicable law),
-this will not be taken to be a formal waiver of Google's rights and that those rights or remedies
-will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any
-provision of this License Agreement is invalid, then that provision will be removed from this
-License Agreement without affecting the rest of this License Agreement. The remaining provisions of
-this License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the
-parent shall be third party beneficiaries to this License Agreement and that such other companies
-shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that
-confers a benefit on (or rights in favor of) them. Other than this, no other person or company
-shall be third party beneficiaries to this License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST
-COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE
-LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The rights granted in this License Agreement may not be assigned or transferred by either you
-or Google without the prior written approval of the other party. Neither you nor Google shall be
-permitted to delegate their responsibilities or obligations under this License Agreement without
-the prior written approval of the other party.
-
-14.7 This License Agreement, and your relationship with Google under this License Agreement, shall
-be governed by the laws of the State of California without regard to its conflict of laws
-provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located
-within the county of Santa Clara, California to resolve any legal matter arising from this License
-Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for
-injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-
-<em>November 13, 2012</em>
-</div>
-
-
-
-<div id="sdk-terms-form">
-<p>
-<input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
-<label id="agreeLabel" for="agree">I have read and agree with the above terms and conditions</label>
-</p>
-<p><a href="" class="button disabled ndk" id="downloadForRealz" onclick="return onDownloadNdkForRealz(this);"></a></p>
-</div>
-
-
-
-</div>
-</div>
-
- <div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
-
- <ol>
- <li><a href="#Downloads">Downloads</a></li>
- <li><a href="#Revisions">Revisions</a></li>
- <li><a href="#Reqs">System and Software Requirements</a></li>
- <li><a href="#Installing">Installing the NDK</a></li>
- <li><a href="#GetStarted">Getting Started with the NDK</a>
- <ol>
- <li><a href="#Using">Using the NDK</a></li>
- </ol>
- </li>
- <li><a href="#Contents">Contents of the NDK</a>
- <ol>
- <li><a href="#Tools">Development tools</a></li>
- <li><a href="#Docs">Documentation</a></li>
- <li><a href="#Samples">Sample apps</a></li>
- </ol>
- </li>
- </ol>
- </div>
- </div>
-
<p>The NDK is a toolset that allows you to implement parts
- of your app using native-code languages such as C and C++. For certain types of apps,
- this can be helpful so you can reuse existing code libraries written in these
- languages, but most apps do not need the Android NDK.</p>
+ of your app using native-code languages such as C and C++. Typically, good use cases for the NDK
+ are CPU-intensive applications such as game engines, signal processing, and physics simulation.
+ </p>
<p>Before downloading the NDK, you should understand that <strong>the NDK
will not benefit most apps</strong>. As a developer, you need to balance its benefits
against its drawbacks. Notably, using native code on Android
generally does not result in a noticable performance improvement,
but it always increases your app complexity. In general, you should only use the NDK
- if it is essential to your app&mdash;never because you simply prefer to program in C/C++.</p>
-
- <p>Typical good candidates for the NDK are CPU-intensive workloads such as game engines,
- signal processing, physics simulation, and so on. When examining
- whether or not you should develop in native code, think about your requirements and see if the
- Android framework APIs provide the functionality that you need.</p>
-
-
-<h2 id="Downloads">Downloads</h2>
-
-
-<script>
-$('#Downloads').after($('#download-table'));
-</script>
-
-<h2 id="Revisions">Revisions</h2>
-
-<p>The following sections provide information about releases of the NDK.</p>
-
-<div class="toggle-content opened">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-opened.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 10e</a> <em>(May 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Integrated the workaround for Cortex-A53 Erratum 843419 into the
- {@code aarch64-linux-android-4.9} linker. For more information on this workaround, see
- <a href="https://sourceware.org/ml/binutils/2015-03/msg00446.html">Workaround for cortex-a53
- erratum 843419.</a></li>
-
- <li>Added Clang 3.6; {@code NDK_TOOLCHAIN_VERSION=clang} now picks that version
- of Clang by default.</li>
-
- <li>Removed Clang 3.4.</li>
-
- <li>Removed GCC 4.6.</li>
-
- <li>Implemented multithreading support in {@code ld.gold} for all architectures. It can
- now link with or without support for multithreading; the default is to do it without.
- <ul>
- <li>To compile with multithreading, use the {@code --threads} option.</li>
- <li>To compile without multithreading, use the {@code --no-threads} option.</li>
- </ul>
- </li>
-
- <li>Upgraded GDB/gdbserver to 7.7 for all architectures.</li>
-
- <li>Removed the NDK package for 32-bit Darwin.</li>
- </ul>
- </dd>
- <dl>
-
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed a crash that occurred when there were OpenMP loops outside of the main thread.</li>
-
- <li>Fixed a GCC 4.9 internal compiler error (<i>ICE</i>) that occured when the user declared
- {@code #pragma GCC optimize ("O0")}, but had a different level of optimization specified
- on the command line. The {@code pragma} takes precedence.</li>
-
- <li>Fixed an error that used to produce a crash with the following error message:
-<pre>
-in add_stores, at var-tracking.c:6000
-</pre>
- </li>
-
- <li>Implemented a workaround for a Clang 3.5 issue in which LLVM auto-vectorization
- generates {@code llvm.cttz.v2i64()}, an instruction with no counterpart in the ARM
- instruction set.</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Made the following header and library fixes:</li>
- <ul>
- <li>Fixed {@code PROPERTY_*} in {@code media/NdkMediaDrm.h}.</li>
- <li>Fixed {@code sys/ucontext.h} for {@code mips64}.</li>
- <li>Dropped the Clang version check for {@code __builtin_isnan} and
- {@code __builtin_isinf}.</li>
- <li>Added {@code android-21/arch-mips/usr/include/asm/reg.h}
- and {@code android-21/arch-mips64/usr/include/asm/reg.h}.</li>
- </ul>
- </li>
-
- <li>Fixed a spurious array-bounds warning that GCC 4.9 produced for x86, and reenabled the
- array bounds warning that GCC 4.9 had produced for ARM. The warning for ARM had
- previously been unconditionally disabled.</li>
-
- <li>Fixed Clang 3.5 for {@code mips} and {@code mips64} to create a writable
- {@code .gcc_except_table} section, thus matching GCC behavior. This change allows you
- to avoid the following linker warning:
-
-<pre>
-.../ld: warning: creating a DT_TEXTREL in a shared object
-</pre>
- </li>
-
- <li>Backported a fix for {@code compiler-rt} issues that were causing crashes when Clang
- compiled for {@code mips64}. For more information, see LLVM Issue
- <a href="http://llvm.org/bugs/show_bug.cgi?id=20098">20098</a>.</li>
-
- <li>Fixed Clang 3.5 crashes that occurred on non-ASCII comments. (Issue
- <a href="https://code.google.com/p/android/issues/detail?id=81440">81440</a>)</li>
-
- <li>Fixed {@code stlport collate::compare} to return {@code -1} and {@code 1}. Previously,
- it had returned arbitrary signed numbers.</li>
-
- <li>Fixed {@code ndk-gdb} for 64-bit ABIs. (Issue
- <a href="https://code.google.com/p/android/issues/detail?id=118300">118300</a>)</li>
-
- <li>Fixed the crash that the HelloComputeNDK sample for RenderScript was producing on
- Android 4.4 (Android API level 19). For more information, see
- <a href="http://stackoverflow.com/questions/28057049/targeting-pre-lollipop-devices-using-renderscript-from-ndk-c">this page</a>.</li>
-
- <li>Fixed {@code libc++ __wrap_iter} for GCC. For more information, see LLVM Issue
- <a href="http://llvm.org/bugs/show_bug.cgi?id=22355">22355</a>.</li>
-
- <li>Fixed {@code .asm} support for ABI {@code x86_64}.</li>
-
- <li>Implemented a workaround for the GCC 4.8 {@code stlport} issue. (Issue
- <a href="https://android-review.googlesource.com/#/c/127773">127773</a>)</li>
-
- <li>Removed the trailing directory separator {@code \\} from the project path in Windows.
- (Issue <a href="https://code.google.com/p/android/issues/detail?id=160584">160584</a>)
- </li>
-
- <li>Fixed a {@code no rule to make target} error that occurred when compiling a single
- {@code .c} file by executing the {@code ndk-build.cmd} command from {@code gradle}. (Issue
- <a href="https://code.google.com/p/android/issues/detail?id=66937">66937</a>)</li>
-
- <li>Added the {@code libatomic.a} and {@code libgomp.a} libraries that had been missing from
- the following host toolchains:
- <ul>
- <li>{@code aarch64-linux-android-4.9}</li>
- <li>{@code mips64el-linux-android-4.9}</li>
- <li>{@code mipsel-linux-android-4.9}</li>
- <li>{@code x86_64-4.9}</li>
- </ul>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Added {@code ld.gold} for {@code aarch64}. The default linker remains {@code ld.bfd}.
- To explicitly enable {@code ld.gold}, add {@code -fuse-ld=gold} to the
- {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} variable.</li>
-
- <li>Built the MIPS and MIPS64 toolchains with {@code binutils-2.25}, which provides improved
- R6 support.</li>
-
- <li>Made {@code -fstandalone-debug} (full debug info) a default option for Clang.</li>
-
- <li>Replaced {@code -fstack-protector} with {@code -fstack-protector-strong} for
- the ARM, AArch64, X86, and X86_64 toolchains for GCC 4.9, Clang 3.5, and
- Clang 3.6.</li>
-
- <li>Added the {@code --package} command-line switch to {@code ndk-gdb} to allow the build
- system to override the package name. (Issue
- <a href="https://code.google.com/p/android/issues/detail?id=56189">56189</a>)</li>
-
- <li> Deprecated {@code -mno-ldc1-stc1} for MIPS. This option may not work with the new
- {@code -fpxx} and {@code -mno-odd-spreg} options, or with the FPXX ABI.</li>
-
- <li>Added MIPS MSA and R6 detection to {@code cpu-features}.</li>
-
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 10d</a> <em>(December 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Made GCC 4.8 the default for all 32-bit ABIs. Deprecated GCC 4.6, and
- will remove it next release. To restore previous behavior, either add
- <code>NDK_TOOLCHAIN_VERSION=4.6</code> to ndk-build, or
- add <code>--toolchain=arm-linux-androideabi-4.6</code> when executing
- <code>make-standalone-toolchain.sh</code> on the command line. GCC 4.9 remains the
- default for 64-bit ABIs.</li>
-
- <li>Stopped all x86[_64] toolchains from adding <code>-mstackrealign</code> by default. The
- NDK toolchain assumes a 16-byte stack alignment. The tools and options used by default
- enforce this rule. A user writing assembly code must make sure to preserve stack
- alignment, and ensure that other compilers also comply with this rule.
- (GCC bug <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496">38496</a>)</li>
-
- <li>Added Address Sanitizer functionality to Clang 3.5 support to the ARM and x86 ABIs.
- For more information on this change, see the
- <a href="https://code.google.com/p/address-sanitizer/wiki/Android">Address
- Sanitizer</a> project.</li>
-
- <li>Introduced the requirement, starting from API level 21, to use <code>-fPIE -pie
- </code> when building. In API levels 16 and higher, ndk-build uses <code>PIE</code>
- when building. This change has a number of implications, which are discussed in
- <a href="https://code.google.com/p/android-developer-preview/issues/detail?id=888">
- Developer Preview Issue 888</a>.
- These implications do not apply to shared libraries.</li>
- </ul>
- </dd>
- <dl>
-
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Made more fixes related to
- <a href="https://gcc.gnu.org/ml/gcc-patches/2014-10/msg00906.html">
- A53 Errata #835769</a> in the aarch64-linux-android-4.9 linker. As part of this, GCC
- passes a new option, <code>--fix-cortex-a53-835769</code>, when
- <code>-mfix-cortex-a53-835769</code> (enabled by default) is specified.
- For more information, see this
- <a href="https://sourceware.org/ml/binutils/2014-10/msg00198.html">binutils message</a>
- and this
- <a href="https://sourceware.org/ml/binutils/2014-11/msg00287.html">binutils message</a>.
- </li>
-
- <li>Documented a fix to a libc++ <code>sscanf/vsscanf</code> hang that occurred in API level
- 21. The fix itself had been implemented in r10c.
- (Issue <a href="http://b.android.com/77988">77988</a>)</li>
-
- <li>Fixed an AutoFDO (<code>-fauto-profile</code>) crash that occurred with GCC 4.9 when
- <code>-Os</code> was specified. (Issue <a href="http://b.android.com/77571">77571</a>)</li>
- </ul>
- </dd>
-
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Made the following header and library fixes:</li>
- <ul>
- <li>Added <code>posix_memalign</code> to API level 16. Also, added a prototype in
- <code>stdlib.h</code> to API levels 16 to 19.
- (Issue <a href="http://b.android.com/77861">77861</a>)</li>
- <li>Fixed <code>stdatomic.h</code> so that it includes <code>&lt;atomic&gt;</code> only for
- C++11.</li>
- <li>Modified the following headers for standalone use: <code>sys/user.h</code>, and
- <code>gl2ext.h</code>, <code>dlext.h</code>, <code>fts.h</code>, <code>sgidefs.h</code>
- for API level 21.</li>
- <li>Modified <code>sys/user.h</code> to rename <code>mxcsr_mask</code> as <code>mxcr_mask</code>,
- and to change the data type for <code>u_ar0</code></li> from <code>unsigned long</code>
- to </code>struct user_regs_struct*</code>.
- <li>Changed <code>sysconf()</code> return value type from <code>int</code> to
- <code>long</code>.</li>
- </ul>
-
- <li>Fixed ndk-build's handling of <code>thumb</code> for <code>LOCAL_ARM_MODE</code>: In
- r10d, ndk-build adds <code>LOCAL_LDFLAGS+=-mthumb</code> by default, unless one of the
- following conditions applies:</li>
- <ul>
- <li>You have set <code>LOCAL_ARM_MODE</code> equal to <code>arm</code>.</li>
- <li>You are doing a debug build (with settings such as <code>APP_OPTIM=debug</code> and
- <code>AndroidManifest.xml</code> containing <code>android:debuggable="true"</code>),
- where ARM mode is the default in order to retain compatibility with earlier toolchains.
- (Issue <a href="http://b.android.com/74040">74040</a>)</li>
- </ul>
-
- <li>Fixed <code>LOCAL_SRC_FILES</code> in ndk-build to use Windows absolute paths.
- (Issue <a href="http://b.android.com/74333">74333</a>)</li>
-
- <li>Removed bash-specific code from ndk-gdb. (Issue <a href="http://b.android.com/73338">73338</a>)</li>
-
- <li>Removed bash-specific code from <code>make-standalone-toolchain.sh</code>.
- (Issue <a href="http://b.android.com/74145">74145)</a></li>
-
- <li>Revised documentation concerning a fix for <code>System.loadLibrary()</code> transitive
- dependencies. (Issue <a href="http://b.android.com/41790">41790</a>)</li>
-
- <li>Fixed a problem that was preventing 64-bit packages from extracting on Ubuntu 14.04 and
- OS X 10.10 (Yosemite). (Issue <a href="http://b.android.com/78148">78148</a>)</li>
-
- <li>Fixed an issue with <code>LOCAL_PCH</code> to improve Clang support. (Issue
- <a href="http://b.android.com/77575">77575</a>)</li>
-
- <li>Clarified "requires executable stack" warning from ld.gold. (Issue
- <a href="http://b.android.com/79115">79115</a>)</li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-
-
-
-
-
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 10c</a> <em>(October 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Made the following changes to download structure:</li>
- <ul>
- <li>Each package now contains both the 32- and the 64-bit headers, libraries, and tools for
- its respective platform.</li>
- <li>STL libraries with debugging info no longer need be downloaded separately.</li>
- </ul>
- <li>Changed everything previously called <code>Android-L</code> to the official release
- designation: <code>android-21</code>.</li>
- <li>Updated GCC 4.9 by rebasing to the <code>google</code> branch
- of the GCC repository. Major differences from the upstream version of GCC 4.9 include:</li>
-
- <ul>
- <li>The <code>-O2</code> option now turns on vectorization, without loop peeling but with more
- aggressive unrolling.</li>
- <li>Enhancements to FDO and <a href="https://gcc.gnu.org/wiki/LightweightIpo#LIPO_-_Profile_Feedback_Based_Lightweight_IPO">
- LIPO</a></li>
- <p>For more detailed information, see <em>Important bug fixes</em> below.</p>
- </ul>
-
- <li>Added Clang 3.5 support to all hosts: <code>NDK_TOOLCHAIN_VERSION=clang</code>
- now picks Clang 3.5. Note that:</li>
- <ul>
-
- <li>ARM and x86 default to using the integrated assembler. If this causes issues, use
- <code>-fno-integrated-as</code> as a workaround.</code>
- <li>Clang 3.5 issues more warnings for unused flags, such as the <code>-finline-functions</code>
- option that GCC supports.</li>
- <p>When migrating from projects using GCC, you can use
- <code>-Wno-invalid-command-line-argument</code> and <code>-Wno-unused-command-line-argument</code>
- to ignore the unused flags until you're able decide on what to do with them longer-term.</p>
-
- </ul>
- <li>Made it possible to enter ART debugging mode, when debugging on an Android 5.0 device using
- ART as its virtual machine, by specifying the <code>art-on</code> option. For more information,
- see <code>prebuilt/common/gdb/common.setup</code> in the directory containing the NDK.</li>
- <li>Removed support for Clang 3.3.</li>
- <li>Deprecated GCC 4.6, and may remove it from future releases.</li>
- <li>Updated mclinker to 2.8 with Identical Code Folding ("ICF") support. Specify ICF using the
- <code>--icf</code> option.</li>
- <li>Broadened <code>arm_neon.h</code> support in x86 and x86_64, attaining coverage of ~93% of
- NEON intrinsics. For more information about NEON support:
- <ul>
- <li>Navigate to the NDK Programmer's Guide (<code>docs/Programmers_Guide/html/</code>), and see
- Architectures and CPUs > Neon.</li>
- <li>Examine the updated <code>hello-neon</code> sample in <code>samples/</code>.
- <li>See Intel's guide to <a href="https://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-automatic-porting-solution-tips-and-tricks"> porting from ARM NEON to Intel SSE.</a></li>
- </ul>
- <li>Documented support for <code>_FORTIFY_SOURCE</code> in <code>headers/libs/android-21</code>,
- which appeared in r10 (when <code>android-21</code> was still called <code>Android-L</code>),
- but had no documentation.</li>
- </ul>
- </dd>
- <dl>
-
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed an internal compiler error with GCC4.9/aarch64 that was causing the following
- error message (Issue <a href="http://b.android.com/77564">77564</a>):</li>
-<pre>
-internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
-</pre>
- <li>Fixed incorrect code generation from GCC4.9/arm. (Issue
- <a href="http://b.android.com/77567">77567<a>)</li>
- <li>Fixed an internal compiler error with GCC4.9/mips involving inline-assembly. (Issue
- <a href="http://b.android.com/77568">77568</a>)</li>
- <li>Fixed incorrect code that GCC4.9/arm was generating for <code>x = (cond) ? y : x</code>.
- (Issue <a href="http://b.android.com/77569">77569</a>)</li>
- <li>Fixed GCC4.9/aarch64 and Clang3.5/aarch64 to work around the
- <a href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141006/116322.html">
- Cortex-A53 erratum (835769)</a> by default. Disable the workaround by specifying
- <code>-mno-fix-cortex-a53-835769</code>.</li>
- </ul>
- </dd>
-
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Made the following header and library fixes to <code>android-21</code>:
- <ul>
-
- <li>Added more TV keycodes: <code>android/keycodes.h</code></li>
- <li>Added more constants and six new sensor functions to <code>android/sensor.h</code>:
- <code>ASensorManager_getDefaultSensorEx</code>, <code>ASensor_getFifoMaxEventCount</code>,
- <code>ASensor_getFifoReservedEventCount</code>, <code>ASensor_getStringType</code>,
- <code>ASensor_getReportingMode</code>, and <code>ASensor_isWakeUpSensor</code>.</li>
- <li>Fixed <code>stdatomic.h</code> to improve compatibility with GCC 4.6, and provide support
- for the <code>&lt;atomic&gt;</code> header.</li>
- <li>Added <code>sys/ucontext.h</code> and <code>sys/user.h</code> to all API levels. The
- <code>signal.h</code> header now includes <code>&lt;sys/ucontext.h&gt;</code>. You may
- remove any existing definition of <code>struct ucontext</code>.</li>
- <li>Added <code>posix_memalign</code> to API levels 17, 18, and 19.</li>
- <li>Added the following functions to all architectures:
- <code>android_set_abort_message</code>, <code>posix_fadvise</code>,
- <code>posix_fadvise64</code>, <code>pthread_gettid_np</code>.</li>
- <li>Added the required permissions to the <code>native-media/AndroidManifest.xml</code>
- sample.
- (Issue <a href="https://android-review.googlesource.com/#/c/106640/">106640</a>)</li>
- <li>Added <code>clock_nanosleep</code> and <code>clock_settime</code> to API level 21. (Issue
- <a href="http://b.android.com/77372">77372</a>)
- <li>Removed the following symbols from all architectures:
- <code>get_malloc_leak_info</code>, <code>free_malloc_leak_info</code>,
- <code>__srget</code>, <code>__swbuf</code>, <code>__srefill</code>, <code>__swsetup</code>,
- <code>__sdidinit</code>, <code>__sflags</code>, <code>__sfp</code>,
- <code>__sinit</code>, <code>__smakebuf</code>, <code>__sflush</code>, <code>__sread</code>,
- <code>__swrite</code>, <code>__sseek</code>, <code>__sclose</code>,
- <code>_fwalk</code>, <code>__sglue</code>, <code>__get_thread</code>, <code>__wait4</code>,
- <code>__futex_wake</code>, <code>__open</code>, <code>__get_tls</code>,
- <code>__getdents64</code>, and <code>dlmalloc</code>.</li>
- <li>Removed the following functions from the 64-bit architectures: <code>basename_r</code>,
- <code>dirname_r</code>, <code>__isthreaded</code>, <code>_flush_cache</code> (mips64).</li>
- <li>Removed the following function from the 32-bit architectures:
- <code>__signalfd4</code>.</li>
- <li>Changed the type of the third argument from <code>size_t</code> to <code>int</code> in
- the following functions: <code>strtoll_l</code>, <code>strtoull_l</code>,
- <code>wcstoll_l</code>, and <code>wcstoull_l</code>.</li>
- <li>Restored the following functions to the 64-bit architecture: <code>arc4random</code>,
- <code>arc4random_buf</code>, and <code>arc4random_uniform</code>.</li>
- <li>Moved <code>cxa_*</code> and the <code>new</code> and <code>delete</code> operators back
- to <code>libstdc++.so</code>. This change restores r9d behavior; previous versions of r10
- contained dummy files.</li>
-
- </ul>
- <li>Restored MXU support in GCC 4.8 and 4.9 for mips. This support had been absent from
- r10 and r10b because those versions of GCC had been compiled with binutils-2.24, which did
- not support MXU. It now does.</li>
- <li>Fixed <code>--toolchain=</code> in <code>make-standalone-toolchain.sh</code> so that it
- now properly supports use of a suffix specifying a version of Clang.</li>
- <li>Fixed the libc++/armeabi <code>strtod()</code> functions.</li>
- <li>Made fixes to NDK documentation in <code>docs/</code>.</li>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Enhanced <code>cpu-features</code> to detect ARMv8 support for the following
- instruction sets: AES, CRC32, SHA2, SHA1, and 64-bit PMULL/PMULL2. (Issue
- <a href="https://android-review.googlesource.com/#/c/106360/">106360</a>)</li>
-
- <li>Modified ndk-build to use <code>*-gcc-ar</code>, which is available in GCC 4.8, GCC 4.9, and
- Clang. Clang specifies it, instead of <code>*-ar</code>. This setting brings improved LTO
- support.</li>
-
- <li>Removed the <code>include-fixed/linux/a.out.h</code> and
- <code>include-fixed/linux/compiler.h</code> headers from the GCC compiler.
- (Issue <a href ="http://b.android.com/73728">73728</a>)</li>
-
- <li>Fixed an issue related to <code>-flto</code> with GCC 4.8 on Mac OS X. The error message
- read:</li>
-
- <pre>
-.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
-Symbol not found: _environ
-</pre>
-
- <li>Fixed a typo in <code>build-binary.mk.</code> (Issue
- <a href="http://b.android.com/76992">76992</a>)</li>
- </ul>
- </dd>
-
- <dt>Important known issues:</dt>
- <dd>
- <ul>
- <li>Specifying -Os (<code>-fauto-profile</code>) in GCC4.9 may cause crashing.
- (Issue <a href="http://b.android.com/77571">77571</a>)</li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 10b</a> <em>(September 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
-
- <dt>Important notes:</dt>
- <dd>
- <ul>
- <li>Because of the 512MB size restriction on downloadable packages, the following 32-bit items are not in the 32-bit NDK download packages. Instead, they reside in the 64-bit ones:</li>
- <ul>
- <li>Android-L headers</li>
- <li>GCC 4.9</li>
- </ul>
- <li>Currently, the only Renderscript support provided by the NDK is for 32-bit Renderscript with Android 4.4 (API level 19). You cannot build HelloComputeNDK (the only Renderscript sample) with any other combination of Renderscript (32- or 64-bit) and Android version.</li>
- <li>To compile native-codec, you must use a 64-bit NDK package, which is where all the Android-L headers are located. </li>
- </ul>
- </dd>
-
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed gdb 7.6 in GCC 4.8/4.9. (Issues <a href="http://b.android.com/74112">74112</a> and <a href="http://b.android.com/74371">74371</a>.)</li>
- <li>Fixed GCC 4.8/4.9 for x86, so that they no longer enable <code>-msse4.2</code> and <code>-mpopcnt</code> by default. (Issue <a href="http://b.android.com/73843">73843</a>.)</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Removed <code>stdio.h</code> from the <code>include-fixed/</code> directories of all versions of GCC. (Issue <a href="http://b.android.com/73728">73728</a>.)</li>
- <li>Removed duplicate header files from the Windows packages in the <code>platforms/android-L/arch-*/usr/include/linux/netfilter*/</code> directories. (Issue <a href="https://code.google.com/p/android/issues/detail?id=73704">73704</a>.)</li>
- <li>Fixed a problem that prevented Clang from building HelloComputeNDK.</li>
- <li>Fixed atexit. (Issue <a href="http://b.android.com/66595">66595</a>.)</li>
- <li>Made various fixes to the docs in <code>docs/</code> and <code>sources/third_party/googletest/README.NDK</code>. (Issue <a href="http://b.android.com/74069">74069</a>.)</li>
- <li>Made the following fixes to the Android-L headers:</li>
- <ol>
- <li>Added the following functions to <code>ctype.h</code> and <code>wchar.h</code>: <code>dn_expand()</code>, <code>grantpt()</code>, <code> inet_nsap_addr()</code>, <code>inet_nsap_ntoa()</code>, <code>insque()</code>, <code>nsdispatch()</code>, <code>posix_openpt()</code>, <code>__pthread_cleanup_pop()</code>, <code>__pthread_cleanup_push()</code>, <code>remque()</code>, <code>setfsgid()</code>, <code>setfsuid()</code>, <code>splice()</code>, <code>tee()</code>, <code>twalk()</code> (Issue <a href = "http://b.android.com/73719">73719</a>), and 42 <code>*_l()</code> functions.</li>
-
- <li>Renamed <code>cmsg_nxthdr</code> to <code>__cmsg_nxthdr</code>.</li>
-
- <li>Removed <code>__libc_malloc_dispatch</code>.</li>
-
- <li>Changed the <code>ptrace()</code> prototype to <code>long ptrace(int, ...);</code>.</li>
-
- <li>Removed <code>sha1.h</code>.</li>
-
- <li>Extended <code>android_dlextinfo</code> in <code>android/dlext.h</code>.</li>
-
- <li>Annotated <code>__NDK_FPABI__</code> for functions receiving or returning float- or double-type values in <code>stdlib.h</code>, <code>time.h</code>, <code>wchar.h</code>, and <code>complex.h</code>.</li>
- </ol>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Updated <code>mipsel-linux-android-4.9</code> and <code>mips64el-linux-android-4.9</code>, implementing a new multilib directory layout, and providing support for gdb-7.7</li>
- <li>Enhanced <code>cpu-features</code> to detect more arm64 features. (Change list <a href="https://android-review.googlesource.com/#/c/100339">100339</a>.)</li>
- </dd>
- </ul>
-
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 10</a> <em>(July 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Added 3 new ABIs, all 64-bit: arm64-v8a, x86_64, mips64.</li> Note that:
- <ul>
- <li>GCC 4.9 is the default compiler for 64-bit ABIs. Clang is currently version 3.4.
-<code>NDK_TOOLCHAIN_VERSION=clang</code>
- may not work for arm64-v8a and mips64.</li>
- <li>Android-L is the first level with 64-bit support. Note that this API
-level is a temporary one, and only for L-preview. An actual API level number will replace it at
-L-release.</li>
- <li>This release includes now includes <code>all32</code> and <code>all64</code>
-settings for <code>APP_ABI</code>.
- <ul>
- <li><code>APP_ABI=all32</code> is equivalent to
-<code>APP_ABI=armeabi,armeabi-v7a,x86,mips</code>.</li>
- <li><code>APP_ABI=all64</code> is equivalent to
-<code>APP_ABI=arm64-v8a,x86_64,mips64</code>.</li>
- <li><code>APP_ABI=all</code> selects all ABIs.</li>
- </ul>
- <li>The new GNU libstdc++ in Android-L contains all <code>&lt;tr1/cmath&gt;</code>
-Before defining your own math function, check <code>_GLIBCXX_USE_C99_MATH_TR1</code> to see a
-function with that name already exists, in order to avoid "multiple definition" errors from the
-linker.</li>
- <li>The cpu-features library has been updated for the ARMv8 kernel. The existing
-cpu-features library may fail to detect the presence of NEON on the ARMv8 platform. Recompile your
-code with the new version.</li>
- </ul>
- <li>Added a new <code>platforms/android-L/</code> API directory. It includes:</li>
- <ul>
- <li>Updated Bionic headers, which had not changed from Android API levels 3
-(Cupcake) to 19 (KitKat). This new version, for level L, is to be synchronized with AOSP.</li>
- <li>New media APIs and a native-codec sample.</li>
- <li>An updated <code>Android.h</code> header for SLES/OpenSLES, enabling support for
-single-precision, floating-point audio format in AudioPlayer.</li>
- <li>GLES 3.1 and AEP extensions to <code>libGLESv3.so.</code></li>
- <li>GLES2 and GLES3 headers updated to the latest official Khronos versions.</li>
- </ul>
- <li>Added GCC 4.9 compilers to the 32-/64-bit ABIs. GCC 4.9 is the default (only) compiler
-for 64-bit ABIs, as previously mentioned. For 32-bit ABIs, you must explcitly enable GCC 4.9, as
-GCC 4.6 is still the default.</li>
- <ul>
- <li>For ndk-build, enable 32-bit, GCC 4.9 building either by adding
-<code>NDK_TOOLCHAIN_VERSION=4.9</code> to <code>Application.mk</code>, or exporting it as an
-environment variable from the command line.</li>
- <li>For a standalone toolchain, use the <code>--toolchain=</code> option in the
-<code>make-standalone-toolchain.sh</code> script. For example: <code>--toolchain=arm-linux-androideabi-4.9.</code></li>
- </ul>
- <li>Upgraded GDB to version 7.6 in GCC 4.8/4.9 and x86*. Since GDB is still at version GDB-7.3.x in
-GCC 4.6 (the default for ARM and MIPS), you must set
-<code>NDK_TOOLCHAIN_VERSION=4.8</code> or <code>4.9</code> to enable ndk-gdb to select GDB 7.6.</li>
- <li>Added the <code>-mssse3</code> build option to provide SSSE3 support, and made it the default for ABI x86
-(upgrading from SSE3). The image released by Google does not contain SSSE3 instructions.</li>
- <li>Updated GCC 4.8 to 4.8.3.</li>
- <li>Improved ARM libc++ EH support by switching from gabi++ to libc++abi. For details, see the "C++ Support" section of the documentation.
- Note that:</li>
- <ul>
- <li>All tests except for locale now pass for Clang 3.4 and GCC 4.8. For more
-information, see the "C++ Support" section of the documentation.</li>
- <li>The libc++ libraries for X86 and MIPS libc++ still use gabi++.</li>
- <li>GCC 4.7 and later can now use &lt;atomic&gt;.</li>
- <li>You must add <code>-fno-strict-aliasing</code> if you use <code> &lt;list&gt;</code>, because <code>__list_imp::_end</code>_ breaks
- TBAA rules. (Issue <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571">61571</a>.)</li>
- <li>As of GCC 4.6, LIBCXX_FORCE_REBUILD:=true no longer rebuilds libc++. Rebuilding it
-requires the use of a different compiler. Note that Clang 3.3 is untested.</li>
- </ul>
- <li>mclinker is now version 2.7, and has aarch64 Linux support.</li>
- <li>Added precompiled header support for headers specified by <code>LOCAL_PCH</code>. (Issue <a href="http://b.android.com/25412">25412</a>).</li>
- </dd>
- <dl>
-
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed libc++ so that it now compiles <code>std::feof</code>, etc. (Issue <a
-href="http://b.android.com/66668">66668</a>).</li>
- <li>Fixed a Clang 3.3/3.4 atomic library call that caused crashes in some of the libc++
-tests for ABI armeabi.</li>
- <li>Fixed Clang 3.4 crashes that were occurring on reading precompiled headers. (Issue <a
-href="http://b.android.com/66657">66657</a>).</li>
- <li>Fixed the Clang 3.3/3.4 <code>-O3</code> assert on:</li>
- <code>llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode*
-llvm::MDBuilder::createBranchWeights(llvm::ArrayRef<unsigned int>): Assertion Weights.size() >= 2
-&& "Need at least two branch weights!"</code> (Issue <a href="http://b.android.com/57381">57381</a>).
- <li>Fixed the following Clang 3.3/3.4 crash:</li>
- <code>Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file
-Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018</code>.
-(Issue <a href="http://b.android.com/66950">66950</a>).
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed headers:</li>
- <ul>
- <li>Fixed 32-bit <code>ssize_t</code> to be <code>int</code> instead of <code>long
-int</code>.</li>
- <li>Fixed <code>WCHAR_MIN</code> and <code>WCHAR_MAX</code> so that they they take
-appropriate signs according to the architecture they're running on:</li>
- <ul>
- <li>X86/MIPS: signed.
- <li>ARM: unsigned.
- <li>To force X86/MIPS to default to unsigned, use
-<code>-D__WCHAR_UNSIGNED__</code>.</li>
- <li>To force <code>wchar_t</code> to be 16 bits, use <code>-fshort-wchar</code>.</li>
- </ul>
- <li>Removed non-existent symbols from 32-bit <code>libc.so</code>, and added <code>pread64</code>,
-<code>pwrite64</code>, <code>ftruncate64</code> for
-Android API level 12 and higher. (Issue <a href="http://b.android.com/69319">69319</a>). For more
-information, see the commit message accompanying AOSP change list
- <a href="https://android-review.googlesource.com/#/c/94137">94137</a>.</li>
- </ul>
- <li>Fixed GCC warning about redefinition of <code>putchar</code>. Warning message reads:</li>
- <code>include/stdio.h:236:5: warning: conflicts with previous declaration here
-[-Wattributes] int putchar(int);</code> (Change list <a
-href="https://android-review.googlesource.com/#/c/91185">91185</a>).
- <li>Fixed <code>make-standalone-toolchain.sh --stl=libc++</code> so that it:</li>
- <ul>
- <li>Copies <code>cxxabi.h</code>. (Issue <a
-href="http://b.android.com/68001">68001</a>).</li>
- <li>Runs in directories other than the NDK install directory. (Issues <a
-href="http://b.android.com/67690">67690</a> and <a href="http://b.android.com/68647">68647</a>).</li>
- </ul>
- <li>Fixed GCC/Windows to quote arguments only when necessary for spawning processes in
-external programs. This change decreases the likelihood of exceeding the 32K length limit.</li>
- <li>Fixed an issue that made it impossible to adjust the <code>APP_PLATFORM</code>
-environment variable.</li>
- <li>Fixed the implementation of <code>IsSystemLibrary()</code> in crazy_linker so that it
-uses <code>strrchr()</code>
- instead of <code>strchr()</code> to find the library path's true basename.</li>
- <li>Fixed native-audio's inability to build in debug mode.</li>
- <li>Fixed gdb's inability to print extreme floating-point numbers. (Issue <a
-href="http://b.android.com/69203">69203</a>).</li>
- <li>Fixed Clang 3.4 inability to compile with <code>-Wl,-shared</code> (as opposed to
-<code>-shared</code>, which
- had no compilation issues). The problem was that Clang added <code>-pie</code> for Android
-targets if neither <code>-shared</code> nor <code>-static</code> existed. This behavior, which was
-incorrect, caused the linker to complain that <code>-shared</code> and <code>-pie</code> could not
-co-exist.</li>
-
- </ul>
- </dd>
-
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Added <code>arm_neon.h</code> to the x86 toolchain so that it now emulates ~47% of
-Neon. There is currently no support for 64-bit types. For more information, see the section on ARM
-Neon intrinsics support in the x86 documentation.</li>
- <li>Ported ARM/GOT_PREL optimization (present in GCC 4.6 built from the GCC google branch) to
-ARM GCC 4.8/4.9. This optimization sometimes reduces instruction count when accessing global
-variables. As an example, see the build.sh script in
-<code>$NDK/tests/build/b14811006-GOT_PREL-optimization/</code>.</li>
- <li>Added ARM version for STL gabi++, stlport, and libc++. They now have both it and Thumb
-mode.</li>
- <li>It is now possible to call the make-standalone-toolchain.sh script with
-<code>--toolchain=x86_64-linux-android-4.9</code>, which is equivalent to
-<code>--toolchain=x86_64-4.9</code>.</li>
- </dd>
- </ul>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 9d</a> <em>(March 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Added support for the Clang 3.4 compiler. The
-<code>NDK_TOOLCHAIN_VERSION=clang</code> option now picks Clang 3.4. GCC 4.6 is
-still the default compiler.</li>
- <li>Added <code>APP_ABI=armeabi-v7a-hard</code>, with
-additional multilib option <code>-mfloat-abi=hard</code>. These options are for
-use with ARM GCC 4.6/4.8 and Clang 3.3/3.4 (which use 4.8's assembler, linker,
-and libs). When using these options, note the following changes:</li>
- <ul>
- <li> When executing the <code>ndk-build</code> script, add the
-following options for armeabi-v7a target:
-<pre>TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
-TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard</pre>
-The built library is copied to <code>libs/armeabi-v7a</code>. For make to
-behave as expected, you cannot specify both <code>armeabi-v7a</code> and
-<code>armeabi-v7a-hard</code> as make targets (i.e., on the APP_ABI= line).
-Doing so causes one of them to be ignored. Note that <code>APP_ABI=all</code>
-is still equivalent to
-<code>armeabi armeabi-v7a x86 mips</code>.</li>
- <li>The <code>make-standalone-toolchain.sh</code> script copies
-additional libaries under <code>/hard</code> directories.
- Add the above <code>CFLAGS</code> and <code>LFLAGS</code> to your
-makefile to enable GCC or Clang to link with
- libraries in <code>/hard</code>.</li>
- </ul>
- <li>Added the yasm assembler, as well as <code>LOCAL_ASMFLAGS</code>
-and <code>EXPORT_ASMFLAGS</code> flags for x86
-targets. The <code>ndk-build</code> script uses
-<code>prebuilts/*/bin/yasm*</code> to build <code>LOCAL_SRC_FILES</code> that
-have the <code>.asm</code> extension.</li>
- <li>Updated MClinker to 2.6.0, which adds <code>-gc-sections</code>
-support.</li>
- <li>Added experimental libc++ support (upstream r201101). Use this new
-feature by following these steps:
- <ul>
- <li>Add <code>APP_STL := c++_static</code> or <code>APP_STL :=
-c++_shared</code> in <code>Application.mk</code>.
- You may rebuild from source via <code>LIBCXX_FORCE_REBUILD :=
-true</code></li>
- <li>Execute <code>make-standalone-toolchain.sh --stl=libc++</code>
-to create a standalone toolchain with libc++ headers/lib.</li>
- </ul>
- For more information, see
-<code>CPLUSPLUS-SUPPORT.html</code>.
-(Issue <a href="http://b.android.com/36496">36496</a>)</li>
- </ul>
- </dd>
- <dl>
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed an uncaught throw from an unexpected
-exception handler for GCC 4.6/4.8 ARM EABI. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59392">59392</a>)</li>
- <li>Fixed GCC 4.8 so that it now correctly resolves partial
-specialization of a template with
- a dependent, non-type template argument. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59052">59052</a>)</li>
- <li>Added more modules to prebuilt python (Issue <a
-href="http://b.android.com/59902">59902</a>):
- <ul>
- <li>Mac OS X: <code>zlib</code>, <code>bz2</code>,
-<code>_curses</code>, <code>_curses_panel</code>, <code>_hashlib</code>,
-<code>_ssl</code></li>
- <li>Linux: <code>zlib</code>, <code>nis</code>,
-<code>crypt</code>, <code>_curses</code>, and <code>_curses_panel</code></li>
- </ul>
- <li>Fixed the x86 and MIPS gdbserver
-<code>event_getmsg_helper</code>.</li>
- <li>Fixed numerous issues in the RenderScript NDK toolchain, including
-issues with compatibility across older devices and C++ reflection.</li>
-<br>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Header fixes:
- <ul>
- <li>Fixed a missing <code>#include &lt;sys/types.h&gt;</code> in
-<code>android/asset_manager.h</code> for Android API level 13 and higher.
- (Issue <a href="http://b.android.com/64988">64988</a>)</li>
- <li>Fixed a missing <code>#include <stdint.h></code> in
-<code>android/rect_manager.h</code> for Android API level 14 and higher.</li>
- <li>Added <code>JNICALL</code> to <code>JNI_OnLoad</code> and
-<code>JNI_OnUnload</code> in <code>jni.h</code>. Note that <code>JNICALL</code>
- is defined as <code>__NDK_FPABI__</code> For more information, see
-<code>sys/cdefs.h</code>.</li>
- <li>Updated the following headers so that they can be included
-without the need to
-manually include their dependencies (Issue <a
-href="http://b.android.com/64679">64679</a>):</li>
-<pre>
-android/tts.h
-EGL/eglext.h
-fts.h
-GLES/glext.h
-GLES2/gl2ext.h
-OMXAL/OpenMAXSL_Android.h
-SLES/OpenSLES_Android.h
-sys/prctl.h
-sys/utime.h
-</pre>
- <li>Added <code>sys/cachectl.h</code> for all architectures. MIPS
-developers can now include this header instead of writing <code>#ifdef
-__mips__</code>.</li>
- <li></code>Fixed <code>platforms/android-18/include/android/input.h
-</code> by adding <code>__NDK_FPABI__</code> to functions taking or returning
-float or double values.</li>
- <li>Fixed MIPS <code>struct stat</code>, which was incorrectly set
-to its 64-bit counterpart for Android API level 12 and later. This wrong
-setting was a
-regression introduced in release r9c.</li>
- <li>Defined <code>__PTHREAD_MUTEX_INIT_VALUE</code>,
-<code>__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE</code>,
- and <code>__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE</code> for Android API
-level 9 and lower.</li>
- <li>Added <code>scalbln</code>, <code>scalblnf</code>, and
-<code>scalblnl</code> to x86 <code>libm.so</code> for APIs 18 and later.</li>
- <li>Fixed a typo in
-<code>sources/android/support/include/iconv.h</code>.
- (Issue <a href="http://b.android.com/63806">63806</a>)</li>
-
- </ul>
- </li>
- <li>Fixed gabi++ <code>std::unexpected()</code> to call
-<code>std::terminate()</code> so that
- a user-defined <code>std::terminate()</code> handler has a chance to run.
-</li>
- <li>Fixed gabi++ to catch <code>std::nullptr</code>.</li>
- <li>Fixed samples Teapot and MoreTeapots:
- <ul>
- <li>Solved a problem with Tegra 2 and 3 chips by changing specular
-variables to use medium precision. Values for specular power can now be less
-than 1.0. </li>
- <li>Changed the samples so that pressing the volume button restores
-immersive mode and invalidates
-<code>SYSTEM_UI_FLAG_IMMERSIVE_STICKY</code>. Screen rotation does not
-trigger <code>onSystemUiVisibilityChange</code>, and so does not restore
-immersive mode.</li>
- </ul>
- </li>
- <li>Fixed the <code>ndk-build</code> script to add
-<code>-rpath-link=$SYSROOT/usr/lib</code> and
-<code>-rpath-link=$TARGET_OUT</code> in order to use <code>ld.bfd</code> to
-link executables. (Issue <a href="http://b.android.com/64266">64266</a>)</li>
- <li>Removed <code>-Bsymbolic</code> from all STL builds.</li>
- <li>Fixed <code>ndk-gdb-py.cmd</code> by setting <code>SHELL</code> as
-an environment variable
-instead of passing it to
- <code>python.exe</code>, which ignores the setting.
- (Issue <a href="http://b.android.com/63054">63054</a>)</li>
- <li>Fixed the <code>make-standalone-toolchain.sh</code> script so that
-the <code>--stl=stlport</code> option copies the gabi++ headers instead of
-symlinking them; the <code>cmd.exe</code> and MinGW shells do not understand
-symlinks created by cygwin.</li>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Applied execution permissions to all <code>*cmd</code> scripts
-previously intended for use only in the <code>cmd.exe</code> shell, in case
-developers prefer to use <code>ndk-build.cmd</code> in cygwin instead of the
-recommended <code>ndk-build</code> script.</li>
- <li>Improved the speed of the <code>make-standalone-toolchain.sh</code>
-script by moving instead of copying if the specified destination directory does
-not exist.</li>
- </dd>
- </ul>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 9c</a> <em>(December 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
-<p>This is a bug-fix-only release.</p>
- <dl>
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed a problem with GCC 4.8 ARM, in which the stack pointer is
-restored too early. This problem prevented the frame pointer from reliably
-accessing a variable in the stack frame. (GCC Issue <a
-href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854">58854</a>)</li>
-<li>Fixed a problem with GCC 4.8 libstdc++, in which a bug in
-std::nth_element was causing generation of code that produced a random
-segfault. (Issue <a
-href="https://code.google.com/p/android/issues/detail?id=62910">62910</a>)</li>
- <li>Fixed GCC 4.8 ICE in cc1/cc1plus with
-<code>-fuse-ld=mcld</code>, so that the following error no longer occurs:
-<pre>cc1: internal compiler error: in common_handle_option, at
-opts.c:1774</pre></li>
- <li>Fixed <code>-mhard-float</code> support for
-<code>__builtin</code> math functions. For ongoing information on fixes for
-<code>-mhard-float</code> with STL, please follow Issue <a
-href="http://b.android.com/61784">61784</a>.</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Header fixes:
- <ul>
- <li>Changed prototype of <code>poll</code> to <code>poll(struct
-pollfd *, nfds_t, int);</code> in <code>poll.h</code>.</li>
- <li>Added <code>utimensat</code> to <code>libc.so</code> for Android
-API levels 12 and 19. These libraries are now included for all Android API
-levels 12 through 19.</li>
-<li>Introduced <code>futimens</code> into <code>libc.so</code>, for Android API
-level 19.</li>
-<li>Added missing <code>clock_settime()</code> and
-<code>clock_nanosleep()</code> to <code>time.h</code> for Android API level 8
-and higher.</li>
-<li>Added <code>CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE,
-CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,</code> and
-<code>CLOCK_BOOTTIME_ALARM</code> in <code>time.h.</code></li>
-<li>Removed obsolete <code>CLOCK_REALTIME_HR</code> and
-<code>CLOCK_MONOTONIC_HR.</code></li>
- </ul>
- </li>
- <li>In samples Teapot, MoreTeapots, and
-<code>source/android/ndk_helper</code>:
- <ul>
-<li>Changed them so that they now use a hard-float abi for armeabi-v7a.</li>
-<li>Updated them to use immersive mode on Android API level 19 and
-higher.</li>
-<li>Fixed a problem with <code>Check_ReleaseStringUTFChars</code> in
-<code>/system/lib/libdvm.so</code> that was causing crashes on x86 devices.</li>
- </ul>
- </li>
-<li>Fixed <code>ndk-build</code> fails that happen in cygwin when the NDK
-package is
-referenced via symlink.</li>
-<li>Fixed <code>ndk-build.cmd</code> fails that happen in windows
-<code>cmd.exe</code> when
-<code>LOCAL_SRC_FILES</code> contains absolute paths. (Issue <a
-href="https://android-review.googlesource.com/#/c/69992">69992</a>)</li>
-<li>Fixed the <code>ndk-stack</code> script to proceed even when it can't parse
-a frame due to inability to find a routine, filename, or line number. In any of
-these cases, it prints <code>??</code>.</li>
-<li>Fixed the <code>ndk-stack</code> stack for windows-x64_64 targets so that
-it no longer erroneously matches a frame line with a line in the
-<code>stack:</code> section that doesn't contain <code>pc</code>,
-<code>eip</code>, or <code>ip</code>. For example:
-<pre>I/DEBUG ( 1151): #00 5f09db68 401f01c4
-/system/lib/libc.so</pre></li>
-<li>Fixed gabi++ so that it:
- <ul>
- <li>Does not use malloc() to allocate C++ thread-local
- objects.</li>
- <li>Avoids deadlocks in gabi++ in cases where libc.debug.malloc is
-non-zero in userdebug/eng Android platform builds.</li>
- </ul>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Added <code>LOCAL_EXPORT_LDFLAGS</code>.</li>
-<li>Introduced the <code>NDK_PROJECT_PATH=null</code> setting for use in an
-integrated build system where options are explicitly passed to
-<code>ndk-build</code>. With this setting, <code>ndk-build</code> makes no
-attempt to look for <code>NDK_PROJECT_PATH.</code> This setting also prevents
-variables from deriving default settings from NDK_PROJECT_PATH. As a result,
-the following variables must now be explicitly specified (with their default
-values if such exist): <code>NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT,
-NDK_DEBUG</code> (optional, default to 0), and other <code>APP_*</code>'s
-contained in <code>Application.mk</code>.</li>
-<li><code>APP_ABI</code> can now be enumerated in a comma-delimited list. For
-example:
-<pre>APP_ABI := "armeabi,armeabi-v7a"</pre></li>
-<li>Provided the ability to rebuild all of STL with debugging info in an
-optional, separate package called
-<code>android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip</code>, using the
-<code>-g</code> option. This option
-helps the <code>ndk-stack</code> script provide better a stack dump across STL.
-This change should not affect the code/size of the final, stripped file.</li>
-<li>Enhanced <code>hello-jni</code> samples to report <code>APP_ABI</code> at
-compilation.</li>
-<li>Used the <code>ar</code> tool in Deterministic mode (option
-<code>-D</code>) to build static libraries. (Issue <a
-href="http://b.android.com/60705">60705</a>)</li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 9b</a> <em>(October 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Updated {@code include/android/*h} and {@code math.h} for all Android API levels up to
- 18, including the addition of levels 13, 15, 16 and 17.
- For information on added APIs, see commit messages for Changes
- <a href="https://android-review.googlesource.com/68012">68012</a> and
- <a href="https://android-review.googlesource.com/68014">68014</a>.
- (Issues <a href="http://b.android.com/47150">47150</a>,
- <a href="http://b.android.com/58528">58528</a>, and
- <a href="http://b.android.com/38423">38423</a>)</li>
- <li>Added support for Android API level 19, including Renderscript binding.</li>
- <li>Added support for <code>-mhard-float</code> in the existing armeabi-v7a ABI. For more
- information and current restrictions on Clang, see
- {@code tests/device/hard-float/jni/Android.mk}.</li>
- <li>Migrated from GNU Compiler Collection (GCC) 4.8 to 4.8.2, and added diagnostic color
- support. To enable diagnostic colors, set <code>-fdiagnostics-color=auto</code>,
- <code>-fdiagnostics-color=always,</code> or export {@code GCC_COLORS} as shown below:
-<pre>
-GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
-</pre>
- For more information, see
- <a href="http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html">GCC
- Language Independent Options</a>.
- </li>
- <li>Added two new samples to demonstrate OpenGL ES 3.0 features: Teapot and MoreTeapots.
- These samples run on devices with Android 4.1 (API level 16) and higher.</li>
- <li>Deprecated GCC 4.7 and Clang 3.2 support, which will be removed in the next
- release.</li>
- </ul>
- </dd>
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed problem with ARM GCC 4.6 {@code thumb2} failing to generate 16-bit relative jump
- tables. (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48328">GCC Issue</a>)</li>
- <li>Fixed GCC 4.8 internal compiler error (ICE) on
- {@code g++.dg/cpp0x/lambda/lambda-defarg3.C}.
- (<a href="https://android-review.googlesource.com/62770">Change 62770</a>,
- <a href="http://gcc.gnu.org/ml/gcc/2013-07/msg00424.html">GCC Issue</a>)</li>
- <li>Fixed a problem with Windows 32-bit {@code *-gdb.exe} executables failing to launch.
- (<a href="http://b.android.com/58975">Issue 58975</a>)</li>
- <li>Fixed GCC 4.8 ICE when building bullet library. The error message is as follows:
- <pre>internal compiler error: verify_flow_info failed</pre>
- (<a href="http://b.android.com/58916">Issue 58916</a>,
- <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58165">GCC Issue</a>)</li>
- <li>Modified GDB/ARM build to skip {@code ARM.exidx} data for unwinding in prologue code and
- added a command ({@code set arm exidx-unwinding}) to control exidx-based stack unwinding.
- (<a href="http://b.android.com/55826">Issue 55826</a>)</li>
- <li>Fixed Clang 3.3 MIPS compiler problem where HI and LO registers are incorrectly
- reused.</li>
- <li>Fixed issue with MIPS 4.7 ICE in {@code dbx_reg_number}. The error message is as
-follows:
-<pre>
-external/icu4c/i18n/decimfmt.cpp:1322:1:
-internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
-</pre>
- (<a href="http://gcc.gnu.org/ml/gcc-patches/2012-12/msg00830.html">GCC Patch</a>)
-
- </li>
-
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Header fixes
- <ul>
- <li>Fixed the ARM {@code WCHAR_MIN} and {@code WCHAR_MAX} to be unsigned according to
- spec (the X86/MIPS versions are signed). Define {@code _WCHAR_IS_ALWAYS_SIGNED} to
- restore old behavior. (<a href="http://b.android.com/57749">Issue 57749</a>)</li>
- <li>Fixed {@code include/netinet/tcp.h} to contain {@code TCP_INFO} state enum.
- (<a href="http://b.android.com/38881">Issue 38881</a>)</li>
- <li>Fixed the {@code cdefs_elh.h} macro {@code _C_LABEL_STRING} to stop generating
- warnings in the GCC 4.8 toolchain when using c++11 mode.
- (<a href="http://b.android.com/58135">Issue 58135</a>,
- <a href="http://b.android.com/58652">Issue 58652</a>)</li>
- <li>Removed non-existent functions {@code imaxabs} and {@code imaxdiv} from header
- {@code inttypes.h}.</li>
- <li>Fixed issue with {@code pthread_exit()} return values and {@code pthread_self()}.
- (<a href="http://b.android.com/60686">Issue 60686</a>)</li>
- <li>Added missing {@code mkdtemp()} function, which already exists in {@code bionic}
- header {@code stdlib.h}.</li>
- </ul>
- </li>
- <li>Fixed problem building {@code samples/gles3jni} with Clang on Android API level 11.</li>
- <li>Fixed MCLinker to allow multiple occurrences of the following options:
- {@code -gc-sections} and {@code --eh-frame-hdr}.</li>
- <li>Fixed MCLinker to accept the {@code --no-warn-mismatch} option.</li>
- <li>Modified {@code cpu-features} option to not assume all VFPv4 devices support IDIV.
- Now this option only adds IDIV to white-listed devices, including Nexus 4.
- (<a href="http://b.android.com/57637">Issue 57637</a>)</li>
- <li>Fixed problem with {@code android_native_app_glue.c} erroneously logging errors on event
- predispatch operations.</li>
- <li>Fixed all operations on {@code gabi++} terminate and unexpected_handler to be
- thread-safe.</li>
- <li>Fixed several issues with Clang <code>-integrated-as</code> option so it can pass
- tests for {@code ssax-instructions} and {@code fenv}.</li>
- <li>Fixed GCC 4.6/4.7/4.8 compiler to pass the linker option {@code --eh-frame-hdr} even
- for static executables. For more information, see the
- <a href="http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00969.html">GCC patch</a>.</li>
- <li>Fixed extra apostrophe in <code>CPU-ARCH-ABIS.html</code>. For more information, see
- <code>NDK-DEPENDS.html</code>. (<a href="http://b.android.com/60142">Issue 60142</a>)</li>
- <li>Fixed extra quotes in ndk-build output on Windows.
- (<a href="http://b.android.com/60649">Issue 60649</a>)</li>
- <li>Fixed Clang 3.3 to compile ARM's built-in, atomic operations such as
- {@code __atomic_fetch_add}, {@code __atomic_fetch_sub}, and {@code __atomic_fetch_or}.
- </li>
- <li>Fixed Clang 3.3 ICE with customized {@code vfprintf}.
- (<a href="http://llvm.org/bugs/show_bug.cgi?id=16344">Clang issue</a>)
- </li>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Enabled OpenMP for all GCC builds. To use this feature, add the following flags to your
- build settings:
-<pre>
-LOCAL_CFLAGS += -fopenmp
-LOCAL_LDFLAGS += -fopenmp
-</pre>
- For code examples, see {@code tests/device/test-openmp}</li>
- <li>Reduced the size of {@code ld.mcld} significantly (1.5MB vs. {@code ld.bfd} 3.5MB and
- {@code ld.gold} 7.5MB), resulting in a speed improvement of approximately 20%.</li>
- <li>Added <code>LOCAL_CONLYFLAGS</code> and <code>APP_CONLYFLAGS</code> to specify
- options applicable to C only but not C++. The existing <code>LOCAL_CFLAGS</code>
- and <code>APP_CFLAGS</code> are also used for C++ compilation (to save trouble of
- specifying most options twice), so options such as <code>-std=gnu99</code> may fail in
- g++ builds with a warning and clang++ builds with an error.</li>
- <li>Added {@code gabi++} array helper functions.</li>
- <li>Modified GCC builds so that all {@code libgcc.a} files are built with
- <code>-funwind-tables</code> to allow the stack to be unwound past previously blocked
- points, such as <code>__aeabi_idiv0</code>.</li>
- <li>Added Ingenic MXU support in MIPS GCC4.6/4.7/4.8 with new <code>-mmxu</code>
-option.</li>
- <li>Extended MIPS GCC4.6/4.7/4.8 <code>-mldc1-sdc1</code> to control ldxc1/sdxc1 too</li>
- <li>Added crazy linker. For more information, see
- {@code sources/android/crazy_linker/README.TXT}.</li>
- <li>Fixed {@code bitmap-plasma} to draw to full screen rather than a 200x200 pixel
-area.</li>
- <li>Reduced linux and darwin toolchain sizes by 25% by creating symlinks to identical files.
- </li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p>
- <a href="#" onclick="return toggleContent(this)"> <img
- src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 9</a> <em>(July 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Added support for Android 4.3 (API level 18). For more information, see
- {@code STABLE-APIS.html} and new code examples in {@code samples/gles3jni/README}.
- <li>Added headers and libraries for OpenGL ES 3.0, which is supported by Android 4.3
- (API level 18) and higher.</li>
- <li>Added GNU Compiler Collection (GCC) 4.8 compiler to the NDK. Since GCC 4.6 is still
- the default, you must explicitly enable this option:
- <ul>
- <li>For {@code ndk-build} builds, export {@code NDK_TOOLCHAIN_VERSION=4.8} or
- add it in {@code Application.mk}.</li>
- <li>For standalone builds, use the {@code --toolchain=} option in
- {@code make-standalone-toolchain.sh}, for example:<br>
- {@code --toolchain=arm-linux-androideabi-4.8}</li>
- </ul>
- <p class="note"><strong>Note:</strong>
- The {@code -Wunused-local-typedefs} option is enabled by {@code -Wall}. Be
- sure to add {@code __attribute__((unused))} if you use compile-time asserts like
- {@code sources/cxx-stl/stlport/stlport/stl/config/features.h}, line #311. For more
- information, see
- <a href="https://android-review.googlesource.com/#/c/55460">Change 55460</a></p>
- <p class="note"><strong>Note:</strong>
- In the GCC 4.7 release and later, ARM compilers generate unaligned access code by
- default for ARMv6 and higher build targets. You may need to add the
- {@code -mno-unaligned-access} build option when building for kernels that do not support
- this feature.</p>
- </li>
- <li>Added Clang 3.3 support. The {@code NDK_TOOLCHAIN_VERSION=clang} build option
- now picks Clang 3.3 by default.
- <p class="note"><strong>Note:</strong>
- Both GCC 4.4.3 and Clang 3.1 are deprecated, and will be removed from the next NDK
- release.</p></li>
- <li>Updated GNU Project Debugger (GDB) to support python 2.7.5.</li>
- <li>Added MCLinker to support Windows hosts. Since {@code ld.gold}
- is the default where available, you must add {@code -fuse-ld=mcld} in
- {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} to enable MCLinker.</li>
- <li>Added {@code ndk-depends} tool which prints ELF library dependencies.
- For more information, see {@code NDK-DEPENDS.html}.
- (<a href="http://b.android.com/53486">Issue 53486</a>)</li>
- </ul>
- </dd>
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed potential event handling issue in {@code android_native_app_glue}.
- (<a href="http://b.android.com/41755">Issue 41755</a>)</li>
- <li>Fixed ARM/GCC-4.7 build to generate sufficient alignment for NEON load and store
- instructions VST and VLD.
- (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271">GCC Issue 57271</a>)</li>
- <li>Fixed a GCC 4.4.3/4.6/4.7 internal compiler error (ICE) for a constant negative index
- value on a string literal.
- (<a href="http://b.android.com/54623">Issue 54623</a>)</li>
- <li>Fixed GCC 4.7 segmentation fault for constant initialization with an object address.
- (<a href="http://b.android.com/56508">Issue 56508</a>)</li>
- <li>Fixed GCC 4.6 ARM segmentation fault for <code>-O</code> values when using Boost
- 1.52.0. (<a href="http://b.android.com/42891">Issue 42891</a>)
- <li>Fixed {@code libc.so} and {@code libc.a} to support the {@code wait4()} function.
- (<a href="http://b.android.com/19854">Issue 19854</a>)</li>
- <li>Updated the x86 libc.so and libc.a files to include the {@code clone()}
- function.</li>
- <li>Fixed {@code LOCAL_SHORT_COMMANDS} bug where the {@code linker.list} file is
- empty or not used.</li>
- <li>Fixed GCC MIPS build on Mac OS to use CFI directives, without which
- {@code ld.mcld --eh-frame-hdr} fails frequently.</li>
- <li>Fixed Clang 3.2 X86/MIPS internal compiler error in {@code llvm/lib/VMCore/Value.cpp}.
- (<a href="https://android-review.googlesource.com/#/c/59021">Change 59021</a>)</li>
- <li>Fixed GCC 4.7 64-bit Windows assembler crash. (Error: {@code out of memory allocating
- 4294967280 bytes}).</li>
- <li>Updated {@code ndk-gdb} script so that the {@code --start} or {@code --launch} actions
- now wait for the GNU Debug Server, so that it can more reliably hit breakpoints set
- early in the execution path (such as breakpoints in JNI code).
- (<a href="http://b.android.com/41278">Issue 41278</a>)
- <p class="note"><strong>Note:</strong>
- This feature requires jdb and produces warning about pending breakpoints.
- Specify the {@code --nowait} option to restore previous behavior.
- </p>
- </li>
- <li>Fixed GDB crash when library list is empty.</li>
- <li>Fixed GDB crash when using a {@code stepi} command past a {@code bx pc} or
- {@code blx pc} Thumb instruction.
- (<a href="http://b.android.com/56962">Issue 56962</a>,
- <a href="http://b.android.com/36149">Issue 36149</a>)</li>
- <li>Fixed MIPS {@code gdbserver} to look for {@code DT_MIPS_RLD_MAP} instead of
- {@code DT_DEBUG}. (<a href="http://b.android.com/56586">Issue 56586</a>)</li>
- <li>Fixed a circular dependency in the ndk-build script, for example: If A-&gt;B and
- B-&gt;B, then B was dropped from build.
- (<a href="http://b.android.com/56690">Issue 56690</a>)</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed the {@code ndk-build} script to enable you to specify a version of Clang as a
- command line option (e.g., {@code NDK_TOOLCHAIN_VERSION=clang3.2}). Previously, only
- specifying the version as an environment variable worked.</li>
- <li>Fixed gabi++ size of {@code _Unwind_Exception} to be 24 for MIPS build targets when
- using the Clang compiler.
- (<a href="https://android-review.googlesource.com/#/c/54141">Change 54141</a>)</li>
- <li>Fixed the {@code ndk-build} script to ensure that built libraries are actually
- removed from projects that include prebuilt static libraries when using the
- {@code ndk-build clean} command.
- (<a href="https://android-review.googlesource.com/#/c/54461">Change 54461</a>,
- <a href="https://android-review.googlesource.com/#/c/54480">Change 54480</a>)</li>
- <li>Modified the {@code NDK_ANALYZE=1} option to be less verbose.</li>
- <li>Fixed {@code gnu-libstdc++/Android.mk} to include a {@code backward/} path for builds
- that use backward compability.
- (<a href="http://b.android.com/53404">Issue 53404</a>)</li>
- <li>Fixed a problem where {@code stlport new} sometimes returned random values.</li>
- <li>Fixed {@code ndk-gdb} to match the order of {@code CPU_ABIS}, not {@code APP_ABIS}.
- (<a href="http://b.android.com/54033">Issue 54033</a>)</li>
- <li>Fixed a problem where the NDK 64-bit build on MacOSX choses the wrong path for
- compiler.
- (<a href="http://b.android.com/53769">Issue 53769</a>)</li>
- <li>Fixed build scripts to detect 64-bit Windows Vista.
- (<a href="http://b.android.com/54485">Issue 54485</a>)</li>
- <li>Fixed x86 {@code ntonl/swap32} error: {@code invalid 'asm': operand number
- out of range}.
- (<a href="http://b.android.com/54465">Issue 54465</a>,
- <a href="https://android-review.googlesource.com/#/c/57242">Change 57242</a>)</li>
- <li>Fixed {@code ld.gold} to merge string literals.</li>
- <li>Fixed {@code ld.gold} to handle large symbol alignment.</li>
- <li>Updated {@code ld.gold} to enable the {@code --sort-section=name} option.</li>
- <li>Fixed GCC 4.4.3/4.6/4.7 to suppress the {@code -export-dynamic} option for
- statically linked programs. GCC no longer adds an {@code .interp} section for statically
- linked programs.</li>
- <li>Fixed GCC 4.4.3 {@code stlport} compilation error about inconsistent {@code typedef}
- of {@code _Unwind_Control_Block}.
- (<a href="http://b.android.com/54426">Issue 54426</a>)</li>
- <li>Fixed {@code awk} scripts to handle {@code AndroidManifest.xml} files created on
- Windows which may contain trailing {@code \r} characters and cause build errors.
- (<a href="http://b.android.com/42548">Issue 42548</a>)</li>
- <li>Fixed {@code make-standalone-toolchain.sh} to probe the {@code prebuilts/}
- directory to detect if the host is 32 bit or 64 bit.</li>
- <li>Fixed the Clang 3.2 {@code -integrated-as} option.</li>
- <li>Fixed the Clang 3.2 ARM EHABI compact model {@code pr1} and {@code pr2} handler data.
- </li>
- <li>Added Clang {@code -mllvm -arm-enable-ehabi} option to fix the following Clang error:
- <pre>clang: for the -arm-enable-ehabi option: may only occur zero or one times!</pre>
- </li>
- <li>Fixed build failure when there is no {@code uses-sdk} element in application
- manifest. (<a href="http://b.android.com/57015">Issue 57015</a>)</li>
- </ul>
-
- </dd>
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Header Fixes
- <ul>
- <li>Modified headers to make {@code __set_errno} an inlined function, since
- {@code __set_errno} in {@code errno.h} is deprecated, and {@code libc.so} no longer
- exports it.</li>
- <li>Modified {@code elf.h} to include {@code stdint.h}.
- (<a href="http://b.android.com/55443">Issue 55443</a>)</li>
- <li>Fixed {@code sys/un.h} to be included independently of other headers.
- (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
- <li>Fixed all of the {@code MotionEvent_getHistorical} API family to take the
- {@code const AInputEvent* motion_event}.
- (<a href="http://b.android.com/55873">Issue 55873</a>)</li>
- <li>Fixed {@code malloc_usable_size} to take {@code const void*}.
- (<a href="http://b.android.com/55725">Issue 55725</a>)</li>
- <li>Fixed stdint.h to be more compatible with C99.
- (<a href="https://android-review.googlesource.com/#/c/46821">Change 46821</a>)</li>
- <li>Modified {@code wchar.h} to not redefine {@code WCHAR_MAX} and
- {@code WCHAR_MIN}</li>
- <li>Fixed {@code &lt;inttypes.h&gt;} declaration for pointer-related {@code PRI} and
- {@code SCN} macros. (<a href="http://b.android.com/57218">Issue 57218</a>)</li>
- <li>Changed the {@code sys/cdefs.h} header so that {@code __WCHAR_TYPE__} is 32-bit
- for API levels less than 9, which means that {@code wchat_t} is 32-bit for all
- API levels. To restore the previous behavior, define the {@code _WCHAR_IS_8BIT}
- boolean variable. (<a href="http://b.android.com/57267">Issue 57267</a>)</li>
- </ul>
- </li>
- <li>Added more formatting in NDK {@code docs/} and miscellaneous documentation fixes.
- </li>
- <li>Added support for a thin archive technique when building static libraries.
- (<a href="http://b.android.com/40303">Issue 40303</a>)</li>
- <li>Updated script {@code make-standalone-toolchain.sh} to support the {@code stlport}
- library in addition to {@code gnustl}, when you specify the option
- {@code --stl=stlport}. For more information, see {@code STANDALONE-TOOLCHAIN.html}.</li>
- <li>Updated the {@code make-standalone-toolchain.sh} script so that the
- {@code --llvm-version=} option creates the {@code $TOOLCHAIN_PREFIX-clang} and
- {@code $TOOLCHAIN_PREFIX-clang++} scripts in addition to {@code clang} and
- {@code clang++}, to avoid using the host's clang and clang++ definitions by accident.
- </li>
- <li>Added two flags to re-enable two optimizations in upstream Clang but disabled in
- NDK for better compatibility with code compiled by GCC:
- <ul>
- <li>Added a {@code -fcxx-missing-return-semantics} flag to re-enable <em>missing
-return
- semantics</em> in Clang 3.2+. Normally, all paths should terminate with a return
- statement for a value-returning function. If this is not the case, clang inserts
- an undefined instruction (or trap in debug mode) at the path without a return
- statement. If you are sure your code is correct, use this flag to allow the
- optimizer to take advantage of the undefined behavior. If you are not sure, do not
- use this flag. The caller may still receive a random incorrect value, but the
- optimizer will not exploit it and make your code harder to debug.</li>
- <li>Added a {@code -fglobal-ctor-const-promotion} flag to re-enable
- promoting global variables with static constructor to be constants. With this flag,
- the global variable optimization pass of LLVM tries to evaluate the global
- variables with static constructors and promote them to global constants. Although
- this optimization is correct, it may cause some incompatability with code compiled
- by GCC. For example, code may do {@code const_cast} to cast the constant to mutable
- and modify it. In GCC, the variable is in read-write and the code is run by
- accident. In Clang, the const variable is in read-only memory and may cause your
- application to crash.</li>
- </ul>
- </li>
- <li>Added {@code -mldc1-sdc1} to the MIPS GCC and Clang compilers. By default, compilers
- align 8-byte objects properly and emit the {@code ldc1} and {@code sdc1} instructions
- to move them around. If your app uses a custom allocator that does not always align
- with a new object's 8-byte boundary in the same way as the default allocator, your app
- may crash due to {@code ldc1} and {@code sdc1} operations on unaligned memory. In this
- case, use the {@code -mno-ldc1-sdc1} flag to workaround the problem.</li>
- <li>Downgraded the event severity from warning to info if {@code APP_PLATFORM_LEVEL} is
- larger than {@code APP_MIN_PLATFORM_LEVEL}. The {@code APP_PLATFORM_LEVEL} may be lower
- than {@code APP_PLATFORM} in {@code jni/Application.mk} because the NDK does not have
- headers for all levels. In this case, the actual level is shifted downwards. The
- {@code APP_MIN_PLATFORM_LEVEL} is specified by the {@code android:minSdkVersion} in
- your application's manifest.
- (<a href="http://b.android.com/39752">Issue 39752</a>)</li>
- <li>Added the {@code android_getCpuIdArm()} and {@code android_setCpuArm()} methods to
- {@code cpu-features.c}. This addition enables easier retrieval of the ARM CPUID
- information. (<a href="http://b.android.com/53689">Issue 53689</a>)</li>
- <li>Modified {@code ndk-build} to use GCC 4.7's {@code as/ld} for Clang compiling.
- <p class="note"><strong>Note:</strong>
- In GCC 4.7, {@code monotonic_clock} and {@code is_monotonic} have been renamed to
- {@code steady_clock} and {@code is_steady}, respectively.</p></li>
- <li>Added the following new warnings to the {@code ndk-build} script:
- <ul>
- <li>Added warnings if {@code LOCAL_LDLIBS/LDFLAGS} are used in static library
- modules.</li>
- <li>Added a warning if a configuration has no module to build.</li>
- <li>Added a warning for non-system libraries being used in
- {@code LOCAL_LDLIBS/LDFLAGS} of a shared library or executable modules.</li>
- </ul>
- </li>
- <li>Updated build scripts, so that if {@code APP_MODULES} is not defined and only static
- libraries are listed in {@code Android.mk}, the script force-builds all of them.
- (<a href="http://b.android.com/53502">Issue 53502</a>)</li>
- <li>Updated {@code ndk-build} to support absolute paths in {@code LOCAL_SRC_FILES}.</li>
- <li>Removed the {@code *-gdbtui} executables, which are duplicates of the {@code *-gdb}
- executables with the {@code -tui} option enabled.</li>
- <li>Updated the build scripts to warn you when the Edison Design Group (EDG) compiler
- front-end turns {@code _STLP_HAS_INCLUDE_NEXT} back on.
- (<a href="http://b.android.com/53646">Issue 53646</a>)</li>
- <li>Added the environment variable {@code NDK_LIBS_OUT} to allow overriding of the
- path for {@code libraries/gdbserver} from the default {@code $PROJECT/libs}.
- For more information, see {@code OVERVIEW.html}.</li>
- <li>Changed ndk-build script defaults to compile code with format string protection
- {@code -Wformat -Werror=format-security}. You may set
- {@code LOCAL_DISABLE_FORMAT_STRING_CHECKS=true} to disable it.
- For more information, see {@code ANDROID-MK.html}</li>
- <li>Added STL pretty-print support in {@code ndk-gdb-py}. For more information, see
- {@code NDK-GDB.html}.</li>
- <li>Added tests based on the googletest frameworks.</li>
- <li>Added a notification to the toolchain build script that warns you if the current shell
- is not {@code bash}.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 8e</a> <em>(March 2013)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Added 64-bit host toolchain set (package name suffix {@code *-x86_64.*}). For more
- information, see {@code CHANGES.HTML} and {@code NDK-BUILD.html}.</li>
- <li>Added Clang 3.2 compiler. GCC 4.6 is still the default. For information on using the
- Clang compiler, see {@code CHANGES.HTML}.</li>
- <li>Added static code analyzer for Linux/MacOSX hosts. For information on using the
- analyzer, see {@code CHANGES.HTML}.</li>
- <li>Added MCLinker for Linux/MacOSX hosts as an experimental feature. The {@code ld.gold}
- linker is the default where available, so you must explicitly enable it. For more
- information, see {@code CHANGES.HTML}.</li>
- <li>Updated ndk-build to use topological sort for module dependencies, which means the
- build automatically sorts out the order of libraries specified in
- {@code LOCAL_STATIC_LIBRARIES}, {@code LOCAL_WHOLE_STATIC_LIBRARIES} and
- {@code LOCAL_SHARED_LIBRARIES}. For more information, see {@code CHANGES.HTML}.
- (<a href="http://b.android.com/39378">Issue 39378</a>)</li>
- </ul>
- </dd>
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed build script to build all toolchains in {@code -O2}. Toolchains in previous
- releases were incorrectly built without optimization.</li>
- <li>Fixed build script which unconditionally builds Clang/llvm for MacOSX in 64-bit.</li>
- <li>Fixed GCC 4.6/4.7 internal compiler error:
- {@code gen_thumb_movhi_clobber at config/arm/arm.md:5832}.
- (<a href="http://b.android.com/52732">Issue 52732</a>)</li>
- <li>Fixed build problem where GCC/ARM 4.6/4.7 fails to link code using 64-bit atomic
- built-in functions.
- (<a href="http://b.android.com/41297">Issue 41297</a>)</li>
- <li>Fixed GCC 4.7 linker DIV usage mismatch errors.
- (<a href="http://sourceware.org/ml/binutils/2012-12/msg00202.html">Sourceware Issue</a>)
- <li>Fixed GCC 4.7 internal compiler error {@code build_data_member_initialization, at
- cp/semantics.c:5790}.</li>
- <li>Fixed GCC 4.7 internal compiler error {@code redirect_eh_edge_1, at tree-eh.c:2214}.
- (<a href="http://b.android.com/52909">Issue 52909</a>)</li>
- <li>Fixed a GCC 4.7 segfault.
- (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55245">GCC Issue</a>)</li>
- <li>Fixed {@code &lt;chrono&gt;} clock resolution and enabled {@code steady_clock}.
- (<a href="http://b.android.com/39680">Issue 39680</a>)</li>
- <li>Fixed toolchain to enable {@code _GLIBCXX_HAS_GTHREADS} for GCC 4.7 libstdc++.
- (<a href="http://b.android.com/41770">Issue 41770</a>,
- <a href="http://b.android.com/41859">Issue 41859</a>)</li>
- <li>Fixed problem with the X86 MXX/SSE code failing to link due to missing
- {@code posix_memalign}.
- (<a href="https://android-review.googlesource.com/#/c/51872">Change 51872</a>)</li>
- <li>Fixed GCC4.7/X86 segmentation fault in {@code i386.c}, function
- {@code distance_non_agu_define_in_bb()}.
- (<a href="https://android-review.googlesource.com/#/c/50383">Change 50383</a>)</li>
- <li>Fixed GCC4.7/X86 to restore earlier {@code cmov} behavior.
- (<a href="http://gcc.gnu.org/viewcvs?view=revision&revision=193554">GCC Issue</a>)</li>
- <li>Fixed handling NULL return value of {@code setlocale()} in libstdc++/GCC4.7.
- (<a href="http://b.android.com/46718">Issue 46718</a>)
- <li>Fixed {@code ld.gold} runtime undefined reference to {@code __exidx_start} and
- {@code __exidx_start_end}.
- (<a href="https://android-review.googlesource.com/#/c/52134">Change 52134</a>)</li>
- <li>Fixed Clang 3.1 internal compiler error when using Eigen library.
- (<a href="http://b.android.com/41246">Issue 41246</a>)</li>
- <li>Fixed Clang 3.1 internal compiler error including {@code &lt;chrono&gt;} in C++11
-mode.
- (<a href="http://b.android.com/39600">Issue 39600</a>)</li>
- <li>Fixed Clang 3.1 internal compiler error when generating object code for a method
- call to a uniform initialized {@code rvalue}.
- (<a href="http://b.android.com/41387">Issue 41387</a>)</li>
- <li>Fixed Clang 3.1/X86 stack realignment.
- (<a href="https://android-review.googlesource.com/#/c/52154">Change 52154</a>)</li>
- <li>Fixed problem with GNU Debugger (GDB) SIGILL when debugging on Android 4.1.2.
- (<a href="http://b.android.com/40941">Issue 40941</a>)</li>
- <li>Fixed problem where GDB cannot set {@code source:line} breakpoints when symbols
-contain
- long, indirect file paths.
- (<a href="http://b.android.com/42448">Issue 42448</a>)</li>
- <li>Fixed GDB {@code read_program_header} for MIPS PIE executables.
- (<a href="https://android-review.googlesource.com/#/c/49592">Change 49592</a>)</li>
- <li>Fixed {@code STLport} segmentation fault in {@code uncaught_exception()}.
- (<a href="https://android-review.googlesource.com/#/c/50236">Change 50236</a>)</li>
- <li>Fixed {@code STLport} bus error in exception handling due to unaligned access of
- {@code DW_EH_PE_udata2}, {@code DW_EH_PE_udata4}, and {@code DW_EH_PE_udata8}.</li>
- <li>Fixed Gabi++ infinite recursion problem with {@code nothrow new[]} operator.
- (<a href="http://b.android.com/52833">Issue 52833</a>)</li>
- <li>Fixed Gabi++ wrong offset to exception handler pointer.
- (<a href="https://android-review.googlesource.com/#/c/53446">Change 53446</a>)</li>
- <li>Removed Gabi++ redundant free on exception object
- (<a href="https://android-review.googlesource.com/#/c/53447">Change 53447</a>)</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed NDK headers:
- <ul>
- <li>Removed redundant definitions of {@code size_t}, {@code ssize_t}, and
- {@code ptrdiff_t}.</li>
- <li>Fixed MIPS and ARM {@code fenv.h} header.</li>
- <li>Fixed {@code stddef.h} to not redefine {@code offsetof} since it already exists
- in the toolchain.</li>
- <li>Fixed {@code elf.h} to contain {@code Elf32_auxv_t} and {@code Elf64_auxv_t}.
- (<a href="http://b.android.com/38441">Issue 38441</a>)
- </li>
- <li>Fixed the {@code #ifdef} C++ definitions in the
- {@code OpenSLES_AndroidConfiguration.h} header file.
- (<a href="http://b.android.com/53163">Issue 53163</a>)
- </li>
- </ul>
- </li>
- <li>Fixed {@code STLport} to abort after out of memory error instead of silently exiting.
- </li>
- <li>Fixed system and Gabi++ headers to be able to compile with API level 8 and lower.</li>
- <li>Fixed {@code cpufeatures} to not parse {@code /proc/self/auxv}.
- (<a href="http://b.android.com/43055">Issue 43055</a>)</li>
- <li>Fixed {@code ld.gold} to not depend on host libstdc++ and on Windows platforms,
- to not depend on the {@code libgcc_sjlj_1.dll} library.</li>
- <li>Fixed Clang 3.1 which emits inconsistent register list in {@code .vsave} and fails
- assembler.
- (<a href="https://android-review.googlesource.com/#/c/49930">Change 49930</a>)</li>
- <li>Fixed Clang 3.1 to be able to compile libgabi++ and pass the {@code test-stlport}
- tests for MIPS build targets.
- (<a href="https://android-review.googlesource.com/#/c/51961">Change 51961</a>)</li>
- <li>Fixed Clang 3.1 to only enable exception by default for C++, not for C.</li>
- <li>Fixed several issues in Clang 3.1 to pass most GNU exception tests.</li>
- <li>Fixed scripts {@code clang} and {@code clang++} in standalone NDK compiler to detect
- {@code -cc1} and to not specify {@code -target} when found.</li>
- <li>Fixed {@code ndk-build} to observe {@code NDK_APP_OUT} set in {@code Application.mk}.
- </li>
- <li>Fixed X86 {@code libc.so} and {@code lib.a} which were missing the {@code sigsetjmp}
- and {@code siglongjmp} functions already declared in {@code setjmp.h}.
- (<a href="http://b.android.com/19851">Issue 19851</a>)</li>
- <li>Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++ 11.
- (<a href="http://clang.llvm.org/cxx_status.html">Clang Issue</a>)</li>
- <li>Fixed cygwin path in argument passed to {@code HOST_AWK}.</li>
- <li>Fixed {@code ndk-build} script warning in windows when running from project's JNI
- directory.
- (<a href="http://b.android.com/40192">Issue 40192</a>)</li>
- <li>Fixed problem where the {@code ndk-build} script does not build if makefile has
- trailing whitespace in the {@code LOCAL_PATH} definition.
- (<a href="http://b.android.com/42841">Issue 42841</a>)</li>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Enabled threading support in GCC/MIPS toolchain.</li>
- <li>Updated GCC exception handling helpers {@code __cxa_begin_cleanup} and
- {@code __cxa_type_match} to have <em>default</em> visibility from the previous
- <em>hidden</em> visibility in GNU libstdc++. For more information, see
- {@code CHANGES.HTML}.</li>
- <li>Updated build scripts so that Gabi++ and STLport static libraries are now built with
- hidden visibility except for exception handling helpers.</li>
- <li>Updated build so that {@code STLport} is built for ARM in Thumb mode.</li>
- <li>Added support for {@code std::set_new_handler} in Gabi++.
- (<a href="http://b.android.com/52805">Issue 52805</a>)</li>
- <li>Enabled {@code FUTEX} system call in GNU libstdc++.</li>
- <li>Updated {@code ndk-build} so that it no longer copies prebuilt static library to
- a project's {@code obj/local/&lt;abi&gt;/} directory.
- (<a href="http://b.android.com/40302">Issue 40302</a>)</li>
- <li>Removed {@code __ARM_ARCH_5*__} from ARM {@code toolchains/*/setup.mk} script.
- (<a href="http://b.android.com/21132">Issue 21132</a>)</li>
- <li>Built additional GNU libstdc++ libraries in thumb for ARM.</li>
- <li>Enabled MIPS floating-point {@code madd/msub/nmadd/nmsub/recip/rsqrt}
- instructions with 32-bit FPU.</li>
- <li>Enabled graphite loop optimizer in GCC 4.6 and 4.7 to allow more optimizations:
- {@code -fgraphite}, {@code -fgraphite-identity}, {@code -floop-block}, {@code
--floop-flatten},
- {@code -floop-interchange}, {@code -floop-strip-mine}, {@code -floop-parallelize-all},
- and {@code -ftree-loop-linear}.
- (<a href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html">info</a>)</li>
- <li>Enabled {@code polly} for Clang 3.1 on Linux and Max OS X 32-bit hosts which analyzes
- and optimizes memory access. (<a href="http://polly.llvm.org">info</a>)</li>
- <li>Enabled {@code -flto} in GCC 4.7, 4.6, Clang 3.2 and Clang 3.1 on linux (Clang LTO
- via LLVMgold.so). MIPS compiler targets are not supported because {@code ld.gold}
- is not available.</li>
- <li>Enabled {@code --plugin} and {@code --plugin-opt} for {@code ld.gold} in GCC 4.6/4.7.
- </li>
- <li>Enabled {@code --text-reorder} for {@code ld.gold} in GCC 4.7.</li>
- <li>Configured GNU libstdc++ with {@code _GLIBCXX_USE_C99_MATH} which undefines the
- {@code isinf} script in the bionic header. For more information, see
- {@code CHANGES.html}.</li>
- <li>Added {@code APP_LDFLAGS} to the build scripts. For more information, see
- {@code ANDROID-MK.html}.</li>
- <li>Updated build scripts to allow {@code NDK_LOG=0} to disable the {@code NDK_LOG}.</li>
- <li>Updated build scripts to allow {@code NDK_HOST_32BIT=0} to disable the host developer
- environment 32-bit toolchain.</li>
- <li>Changed the default GCC/X86 flags {@code -march=} and {@code -mtune=} from
- {@code pentiumpro} and {@code generic} to {@code i686} and {@code atom}.</li>
- <li>Enhanced toolchain build scripts:
- <ul>
- <li>Fixed a race condition in {@code build-gcc.sh} for the {@code mingw} build type
- which was preventing a significant amount of parallel build processing.</li>
- <li>Updated {@code build-gabi++.sh} and {@code build-stlport.sh} so they can now run
- from the NDK package.
- (<a href="http://b.android.com/52835">Issue 52835</a>)
- </li>
- <li>Fixed {@code run-tests.sh} in the {@code MSys} utilities collection.</li>
- <li>Improved 64-bit host toolchain and Canadian Cross build support.</li>
- <li>Updated {@code build-mingw64-toolchain.sh} script to more recent version.</li>
- <li>Added option to build {@code libgnustl_static.a} and {@code stlport_static.a}
- without hidden visibility.</li>
- </ul>
- </li>
- </ul>
-
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 8d</a> <em>(December 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
- <dd>
- <ul>
- <li>Added the GNU Compiler Collection (GCC) 4.7 compiler to the NDK. The GCC 4.6 compiler
- is still the default, so you must to explicitly enable the new version as follows:
- <ul>
- <li>For {@code ndk-build}, export the {@code NDK_TOOLCHAIN_VERSION=4.7} variable
- <em>or</em> add it to {@code Application.mk}.</li>
- <li>For standalone builds, add the {@code --toolchain=} option to
- {@code make-standalone-toolchain.sh}, for example:
- <pre>--toolchain=arm-linux-androideabi-4.7</pre></li>
- </ul>
- <p class="note">
- <strong>Note:</strong> This feature is experimental. Please try it and
- <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
- </li>
- <li>Added {@code stlport} exception support via gabi++. Note that the new gabi++
- depends on {@code dlopen} and related code, meaning that:
- <ul>
- <li>You can no longer build a <em>static</em> executable using the {@code -static}
- option or include {@code libstlport_static.a} using
- {@code APP_STL := stlport_static}. (You can still use the {@code -static} option
- with a standalone toolchain.) Compiling a <em>dynamic</em> executable using
- {@code include $(BUILD_EXECUTABLE)} continues to work because the compiler
- automatically adds the {@code -ldl} option.</li>
- <li>If your project links using {@code -nostdlib} and {-Wl,--no-undefined}, you
- must manually include the {@code -ldl} option.</li>
- </ul>
- For more information, see {@code CPLUSPLUS-SUPPORT.html}.
-
- <p class="note">
- <strong>Note:</strong> This feature is experimental and works better with the GCC
- 4.6/4.7 compilers than with GCC 4.4.3 or Clang 3.1. Please try it and
- <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p>
- </li>
- <li>Added a {@code -mstack-protector-guard=} option for x86 to choose between a
- <em>global</em> default path which is compatible with older Android C library (bionic)
- and a new <em>tls</em> path (%gs:20) for {@code -fstack-protector},
- {@code -fstack-protector-all} and {@code -fstack-protector-strong} using the GCC 4.6
- and higher compilers.
-
- <p class="note">
- <strong>Note:</strong> The {@code -mstack-protector-guard} setting itself does not
- enable any {@code -fstack-protector*} options.</p>
- </li>
- <li>Added {@code android_setCpu()} function to
- {@code sources/android/cpufeatures/cpu-features.c} for use when auto-detection via
- {@code /proc} is not possible in Android 4.1 and higher.
- (<a href="http://code.google.com/p/chromium/issues/detail?id=164154">Chromium Issue
- 164154</a>)</li>
- </ul>
- </dd>
-
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li>Fixed unnecessary rebuild of object files when using the {@code ndk-build} script.
- (<a href="http://b.android.com/39810">Issue 39810</a>)</li>
- <li>Fixed a linker failure with the NDK 8c release for Mac OS X 10.6.x that produced the
- following error:
- <pre>
-dyld: lazy symbol binding failed: Symbol not found: _memmem
-Referenced from: ...../arm-linux-androideabi/bin/ld
-Expected in: /usr/lib/libSystem.B.dylib</pre>
- This problem was caused by building on Mac OS X 10.7, which produced binaries that were
- not compatible with Mac OS 10.6.x and the NDK.
- </li>
- <li>Removed the {@code -x c++} options from the Clang++ standalone build script.
- (<a href="http://b.android.com/39089">Issue 39089</a>)</li>
- <li>Fixed issues using the {@code NDK_TOOLCHAIN_VERSION=clang3.1} option in Cygwin.
- (<a href="http://b.android.com/39585">Issue 39585</a>)</li>
- <li>Fixed the {@code make-standalone-toolchain.sh} script to allow generation of a
- standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain
- can be used in Cygwin, MingGW or CMD.exe environments.
- (<a href="http://b.android.com/39915">Issue 39915</a>,
- <a href="http://b.android.com/39585">Issue 39585</a>)</li>
- <li>Added missing {@code SL_IID_ANDROIDBUFFERQUEUESOURCE} option in android-14 builds for
- ARM and X86.
- (<a href="http://b.android.com/40625">Issue 40625</a>)</li>
- <li>Fixed x86 CPU detection for the {@code ANDROID_CPU_X86_FEATURE_MOVBE} feature.
- (<a href="http://b.android.com/39317">Issue 39317</a>)</li>
- <li>Fixed an issue preventing the Standard Template Library (STL) from using C++
- sources that do not have a {@code .cpp} file extension.</li>
- <li>Fixed GCC 4.6 ARM internal compiler error <em>at reload1.c:1061</em>.
- (<a href="http://b.android.com/20862">Issue 20862</a>)</li>
- <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at emit-rtl.c:1954</em>.
- (<a href="http://b.android.com/22336">Issue 22336</a>)</li>
- <li>Fixed GCC 4.4.3 ARM internal compiler error <em>at postreload.c:396</em>.
- (<a href="http://b.android.com/22345">Issue 22345</a>)</li>
- <li>Fixed problem with GCC 4.6/4.7 skipping lambda functions.
- (<a href="http://b.android.com/35933">Issue 35933</a>)</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
- <dd>
- <ul>
- <li>NDK header file fixes:
- <ul>
- <li>Fixed {@code __WINT_TYPE__} and {@code wint_t} to be the same type.</li>
- <li>Corrected typo in {@code android/bitmap.h}.
- (<a href="http://b.android.com/15134">Issue 15134</a>)
- </li>
- <li>Corrected typo in {@code errno.h}.</li>
- <li>Added check for the presence of {@code __STDC_VERSION__} in {@code sys/cdefs.h}.
- (<a href="http://b.android.com/14627">Issue 14627</a>)
- </li>
- <li>Reorganized headers in {@code byteswap.h} and {@code dirent.h}.</li>
- <li>Fixed {@code limits.h} to include {@code page.h} which provides {@code PAGE_SIZE}
- settings.
- (<a href="http://b.android.com/39983">Issue 39983</a>)
- </li>
- <li>Fixed return type of {@code glGetAttribLocation()} and
- {@code glGetUniformLocation()} from {@code int} to {@code GLint}.</li>
- <li>Fixed {@code __BYTE_ORDER} constant for x86 builds.
- (<a href="http://b.android.com/39824">Issue 39824</a>)
- </li>
- </ul>
- </li>
- <li>Fixed {@code ndk-build} script to not overwrite {@code -Os} with {@code -O2} for ARM
- builds.</li>
- <li>Fixed build scripts to allow overwriting of {@code HOST_AWK}, {@code HOST_SED}, and
- {@code HOST_MAKE} settings.</li>
- <li>Fixed issue for {@code ld.gold} on {@code fsck_msdos} builds linking objects built by
- the Intel C/C++ compiler (ICC).</li>
- <li>Fixed ARM EHABI support in Clang to conform to specifications.</li>
- <li>Fixed GNU Debugger (GDB) to shorten the time spent on walking the target's link map
- during {@code solib} events.
- (<a href="http://b.android.com/38402">Issue 38402</a>)</li>
- <li>Fixed missing {@code libgcc.a} file when linking shared libraries.</li>
- </ul>
- </dd>
-
- <dt>Other changes:</dt>
- <dd>
- <ul>
- <li>Backported 64-bit built-in atomic functions for ARM to GCC 4.6.</li>
- <li>Added documentation for audio output latency, along with other documentation and
- fixes.</li>
- <li>Fixed debug builds with Clang so that non-void functions now raise a {@code SIGILL}
- signal for paths without a return statement.</li>
- <li>Updated {@code make-standalone-toolchain.sh} to accept the suffix {@code -clang3.1}
- which is equivalent to adding {@code --llvm-version=3.1} to the GCC 4.6 toolchain.</li>
- <li>Updated GCC and Clang bug report URL to:
- <a
-href="http://source.android.com/source/report-bugs.html">http://source.android.com/source/report-bug
-s.html</a></li>
- <li>Added ARM ELF support to {@code llvm-objdump}.</li>
- <li>Suppressed <em>treating c input as c++</em> warning for Clang builds.</li>
- <li>Updated build so that only the 32-bit version of {@code libiberty.a} is built and
- placed in {@code lib32/}.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 8c</a> <em>(November 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Important changes:</dt>
-
- <dd>
- <ul>
- <li>Added the Clang 3.1 compiler to the NDK. The GNU Compiler Collection (GCC) 4.6 is
- still the default, so you must explicitly enable the Clang compiler option as follows:
- <ul>
- <li>For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} <em>or</em>
- add this environment variable setting to {@code Application.mk}.</li>
- <li>For standalone builds, add {@code --llvm-version=3.1} to
- {@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
- makefile with {@code &lt;tool-path&gt;/bin/clang} and
- {@code &lt;tool-path&gt;/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
- details.</li>
- </ul>
- <p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
- <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p></li>
- <li>Added Gold linker {@code ld.gold} for the Windows toolchain. Gold linker is also the
- default for ARM and X86 on all hosts. You may override it to use the {@code ld.bfd}
- linker by adding {@code LOCAL_LDFLAGS += -fuse-ld=bfd} to {@code Android.mk}, or by
-passing
- {@code -fuse-ld=bfd} to the g++/clang++ command line that does the linking.</li>
- <li>Added checks for spaces in the NDK path to the {@code ndk-build[.cmd]} and
- {@code ndk-gdb} scripts, to prevent build errors that are difficult to diagnose.</li>
- <li>Made the following changes to API level handling:
- <ul>
- <li>Modified build logic so that projects that specify {@code android-10} through
- {@code android-13} in {@code APP_PLATFORM}, {@code project.properties} or
- {@code default.properties} link against {@code android-9} instead of
- {@code android-14}.
- <li>Updated build so that executables using android-16 (Jelly Bean) or higher are
- compiled with the {@code -fPIE} option for position-independent executables (PIE).
- A new {@code APP_PIE} option allows you to control this behavior. See {@code
- APPLICATION-MK.html} for details.
- <p class="note">
- <strong>Note:</strong> All API levels above 14 still link against {@code
- platforms/android-14} and no new {@code platforms/android-N} have been added.
- </p></li>
- <li>Modified {@code ndk-build} to provide warnings if the adjusted API level is larger
- than {@code android:minSdkVersion} in the project's {@code AndroidManifest.xml}.</li>
- </ul>
- </li>
- <li>Updated the {@code cpu-features} helper library to include more ARM-specific features.
- See {@code sources/android/cpufeatures/cpu-features.h} for details.</li>
- <li>Modified the long double on the X86 platform to be 8 bytes. This data type is now the
- same size as a double, but is still treated as a distinct type.</li>
- <li>Updated build for {@code APP_ABI=armeabi-v7a}:
- <ul>
- <li>Modified this build type to pass the {@code -march=armv7-a} parameter
- to the linker. This change ensures that v7-specific libraries and {@code crt*.o} are
- linked correctly.</li>
- <li>Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the
- {@code -mfpu=vfp} option used in previous releases.</li>
- </ul>
- </li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Important bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed an issue where running {@code make-standalone-toolchain.sh} with root privileges
- resulted in the stand alone tool chain being inaccessible to some users.
- (<a href="http://b.android.com/35279">Issue 35279</a>)
- <ul>
- <li>All files and executables in the NDK release package are set to have read and
- execute permissions for all.</li>
- <li>The ownership/group of {@code libstdc++.a} is now preserved when copied.</li>
- </ul>
- </li>
- <li>Removed redundant {@code \r} from Windows prebuilt {@code echo.exe}. The redundant
- {@code \r} caused {@code gdb.setup} to fail in the GNU Debugger (GDB) because it
- incorrectly became part of the path.
- (<a href="http://b.android.com/36054">Issue 36054</a>)</li>
- <li>Fixed Windows parallel builds that sometimes failed due to timing issues in the
- {@code host-mkdir} implementation.
- (<a href="http://b.android.com/25875">Issue 25875</a>)</li>
- <li>Fixed GCC 4.4.3 GNU {@code libstdc++} to <em>not</em> merge {@code typeinfo} names by
- default. For more details, see
- {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}.
- (<a href="http://b.android.com/22165">Issue 22165</a>)</li>
- <li>Fixed problem on {@code null} context in GCC 4.6
- {@code cp/mangle.c::write_unscoped_name}, where GCC may crash when the context is
- {@code null} and dereferenced in {@code TREE_CODE}.</li>
- <li>Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats.
- (<a href="http://b.android.com/34613">Issue 34613</a>)</li>
- <li>Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation
- where a stale stack location holding the dereferenced value was returned and caused
- runtime crashes.
- (<a href="http://b.android.com/38630">Issue 38630</a>)</li>
-
- <li>ARM-specific fixes:
- <ul>
- <li>Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the <em>mangling of
- &lt;va_list&gt; was changed in GCC 4.4</em>. The workaround using the
- {@code -Wno-psabi} switch to avoid this warning is no longer required.</li>
- <li>Fixed an issue when a project with {@code .arm} or {@code .neon} suffixes in
- {@code LOCAL_SRC_FILES} also used {@code APP_STL}. With {@code APP_STL}, the
- {@code ndk-build} script searches for C++ files in {@code LOCAL_SRC_FILES} before
- adding STL {@code header/lib} paths to compilation. Modified {@code ndk-build} to
- filter out {@code .arm} and {@code .neon} suffixes before the search, otherwise items
- in {@code LOCAL_SRC_FILES} like {@code myfile.cpp.arm.neon} won't be compiled as C++
- code.</li>
- <li>Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older
- binutils without {@code tag_FP_arch}, which was producing <em>assertion fail</em>
- error messages in GNU Binutils.
- (<a href="http://b.android.com/35209">Issue 35209</a>)
- </li>
- <li>Removed <em>Unknown EABI object attribute 44</em> warning when
- {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}</li>
- <li>Fixed an issue in GNU {@code stdc++} compilation with both {@code -mthumb} and
- {@code -march=armv7-a}, by modifying {@code make-standalone-toolchain.sh} to populate
- {@code headers/libs} in sub-directory {@code armv7-a/thumb}.
- (<a href="http://b.android.com/35616">Issue 35616</a>)
- </li>
- <li>Fixed <em>unresolvable R_ARM_THM_CALL relocation</em> error.
- (<a href="http://b.android.com/35342">Issue 35342</a>)
- </li>
- <li>Fixed internal compiler error at {@code reload1.c:3633}, caused by the ARM
- back-end expecting the wrong operand type when sign-extend from {@code char}.
- (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099">GCC Issue 50099</a>)</li>
- <li>Fixed internal compiler error with negative shift amount.
- (<a href="http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html">GCC Issue</a>)</li>
- </ul>
- </li>
-
- <li>Fixed {@code -fstack-protector} for X86, which is also the default for the
- {@code ndk-build} x86 ABI target.</li>
-
- <li>MIPS-specific fixes:
- <ul>
- <li>Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when
- compiling MIPS {@code libstlport_*}.</li>
- <li>Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM.
- (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369">GCC Issue 54369</a>)</li>
- <li>Backported fix for {@code cc1} compile process consuming 100% CPU.
- (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380">GCC Issue 50380</a>)</li>
- </ul>
- </li>
-
- <li>GNU Debugger-specific fixes:
- <ul>
- <li>Disabled Python support in gdb-7.x at build, otherwise the gdb-7.x configure
- function may pick up whatever Python version is available on the host and build
- {@code gdb} with a hard-wired dependency on a specific version of Python.
- (<a href="http://b.android.com/36120">Issue 36120</a>)
- </li>
- <li>Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none
- of the known architectures.
- (<a href="http://b.android.com/35392">Issue 35392</a>)
- </li>
- <li>Fixed Windows pathname support, by keeping the {@code :} character if it looks
- like it could be part of a Windows path starting with a drive letter.
- (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12843">GDB Issue 12843</a>)
- </li>
- <li>Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}.
- (<a href="http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html">GDB Issue</a>)
- </li>
- <li>Added fix to only read the current {@code solibs} when the linker is consistent.
- This change speeds up {@code solib} event handling.
- (<a href="http://b.android.com/37677">Issue 37677</a>)
- </li>
- <li>Added fix to make repeated attempts to find {@code solib} breakpoints. GDB now
- retries {@code enable_break()} during every call to {@code svr4_current_sos()} until
- it succeeds.
- (<a href="https://android-review.googlesource.com/#/c/43563">Change 43563</a>)</li>
- <li>Fixed an issue where {@code gdb} would not stop on breakpoints placed in
- {@code dlopen-ed} libraries.
- (<a href="http://b.android.com/34856">Issue 34856</a>)
- </li>
- <li>Fixed {@code SIGILL} in dynamic linker when calling {@code dlopen()}, on system
- where {@code /system/bin/linker} is stripped of symbols and
- {@code rtld_db_dlactivity()} is implemented as {@code Thumb}, due to not preserving
- {@code LSB} of {@code sym_addr}.
- (<a href="http://b.android.com/37147">Issue 37147</a>)
- </li>
- </ul>
- </li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Other bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed NDK headers:
- <ul>
- <li>Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from
- original kernel. (<a href="https://android-review.googlesource.com/#/c/43335">Change
- 43335</a>)</li>
- <li>Replaced struct member data {@code __unused} with {@code __linux_unused} in
- {@code linux/sysctl.h} and {@code linux/icmp.h} to avoid conflict with
- {@code #define __unused} in {@code sys/cdefs.h}.</li>
- <li>Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and
- {@code __END_DECLS}.</li>
- <li>Removed unimplemented functions in {@code malloc.h}.</li>
- <li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
- (<a href="http://b.android.com/1952">Issue 1952</a>)</li>
- <li>Fixed preprocessor macros in {@code &lt;arch&gt;/include/machine/*}.</li>
- <li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
- <li>Removed {@code linux-unistd.h}</li>
- <li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
- {@code ULONG_LONG_MAX} from {@code &lt;pthread.h&gt;} to {@code
-&lt;limits.h&gt;}.</li>
- </ul>
- </li>
- <li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
- <li>Fixed {@code _STLP_USE_EXCEPTIONS}, when not defined, to omit all declarations
- and uses of {@code __Named_exception}. Compiling and use of {@code __Named_exception}
- settings only occurs when {@code STLport} is allowed to use exceptions.</li>
- <li>Fixed building of Linux-only NDK packages without also building Windows code. Use the
- following settings to perform this type of build:
- <pre>./build/tools/make-release.sh --force --systems=linux-x86</pre></li>
- <li>Fixed {@code libc.so} so it does not export {@code atexit()} and {@code __do_handler}.
- These symbols are exported for ARM builds by the system version of the C library to
- support legacy native libraries. NDK-generated should never reference them directly.
- Instead, each shared library or executable should embed its own version of these symbols,
- provided by {@code crtbegin_*.o}.
- <p>If your project is linked with the {@code -nostdlib -Wl,--no-undefined} options, you
- must provide your own {@code __dso_handle} because {@code crtbegin_so.o} is not linked in
- this case. The content of {@code __dso_handle} does not matter, as shown in the following
- example code:</p>
-<pre>
-extern "C" {
- extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
- void *__dso_handle;
-}
-</pre>
- </li>
- <li>Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to
- generate a more readable form {@code function@plt}.</li>
- <li>Removed the following symbols, introduced in GCC 4.6 {@code libgcc.a}, from
- the X86 platform {@code libc.so} library: {@code __aeabi_idiv0}, {@code __aeabi_ldiv0},
- {@code __aeabi_unwind_cpp_pr1}, and {@code __aeabi_unwind_cpp_pr2}.</li>
- <li>Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS
- {@code crt*_so.S}.</li>
- <li>Updated {@code ndk-gdb} so that it only takes the last line of output for
- {@code ndk-build} {@code DUMP_XXXX}. This change ensures that if {@code Application.mk} or
- {@code Android.mk} print something with {@code $(info ...)} syntax, it does not get
- injected into the result of {@code DUMP_XXXX}.
- (<a href="https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ">More info</a>)</li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Other changes:</dt>
-
- <dd>
- <ul>
- <li>Removed {@code arch-x86} and {@code arch-mips} headers from
- {@code platforms/android-[3,4,5,8]}. Those headers were incomplete, since both X86 and
- MIPS ABIs are only supported at API 9 or higher.</li>
- <li>Simplified c++ include path in standalone packages, as shown below.
- (<a href="http://b.android.com/35279">Issue 35279</a>)
-<pre>
-&lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
- to:
-&lt;path&gt;/include/c++/4.6/
-</pre></li>
- <li>Fixed {@code ndk-build} to recognize more C++ file extensions by default:
- {@code .cc .cp .cxx .cpp .CPP .c++ .C}. You may still use {@code LOCAL_CPP_EXTENSION} to
- overwrite these extension settings.</li>
- <li>Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze
- frame on re-launch.</li>
- <li>Replaced deprecated APIs in NDK samples.
- (<a href="http://b.android.com/20017">Issue 20017</a>)
- <ul>
- <li>{@code hello-gl2} from android-5 to android-7</li>
- <li>{@code native-activity} from android-9 to android-10</li>
- <li>{@code native-audio} from android-9 to android-10</li>
- <li>{@code native-plasma} from android-9 to android-10</li>
- </ul>
- </li>
- <li>Added new branding for Android executables with a simpler scheme in section
- {@code .note.android.ident} (defined in {@code crtbegin_static/dynamic.o}) so that
- debugging tools can act accordingly. The structure member and values are defined as
- follows:
-<pre>
-static const struct {
- int32_t namesz; /* = 8, sizeof ("Android") */
- int32_t descsz; /* = 1 * sizeof(int32_t) */
- int32_t type; /* = 1, ABI_NOTETYPE */
- char name[sizeof "Android"]; /* = "Android" */
- int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
-}
-</pre>
- <p>The previous branding options in section {@code .note.ABI-tag} are deprecated.</p>
- </li>
- <li>Added a new script {@code run-tests-all.sh} which calls {@code run-tests.sh} and
- {@code standalone/run.sh} with various conditions. The script {@code run-tests.sh} runs
- without the {@code --abi} option, and is enhanced to compile most of the tests for all
- supported ABIs and run on all attached devices</li>
- </ul>
- </dd>
- </dl>
-
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 8b</a> <em>(July 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>The main features of this release are a new GNU Compiler Collection (GCC) 4.6 toolchain and
-GNU Debugger (GDB) 7.3.x which adds debugging support for the Android 4.1 (API Level 16) system
-image.</p>
-
- <dl>
- <dt>Important bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed {@code LOCAL_SHORT_COMMANDS} issues on Mac OS, Windows Cygwin environments for
-static libraries. List file generation is faster, and it is not regenerated to avoid repeated
-project rebuilds.</li>
- <li>Fixed several issues in {@code ndk-gdb}:
- <ul>
- <li>Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more
-consistently.</li>
- <li>Updated tool to accept device serial names containing spaces.</li>
- <li>Updated tool to retrieve {@code /system/bin/link} information, so {@code gdb} on
-the host can set a breakpoint in {@code __dl_rtld_db_dlactivity} and be aware of linker activity
-(e.g., rescan {@code solib} symbols when {@code dlopen()} is called).</li>
- </ul>
- </li>
- <li>Fixed {@code ndk-build clean} on Windows, which was failing to remove
-{@code ./libs/*/lib*.so}.</li>
- <li>Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make}
-fails.</li>
- <li>Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and
-{@code __exidx_end} symbols.</li>
- <li>Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and
-MIPS.</li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Important changes:</dt>
-
- <dd>
- <ul>
- <li>Added GCC 4.6 toolchain ({@code binutils} 2.21 with {@code gold} and GDB 7.3.x) to
-co-exist with the original GCC 4.4.3 toolchain ({@code binutils} 2.19 and GDB 6.6).
- <ul>
- <li>GCC 4.6 is now the default toolchain. You may set {@code
-NDK_TOOLCHAIN_VERSION=4.4.3} in {@code Application.mk} to select the original one.</li>
- <li>Support for the {@code gold} linker is only available for ARM and x86
-architectures on Linux and Mac OS hosts. This support is disabled by default. Add {@code
-LOCAL_LDLIBS += -fuse-ld=gold} in {@code Android.mk} to enable it.</li>
- <li>Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging,
-including binaries in Android 4.1 (API Level 16) system images.</li>
- <li>The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from
-version 2.22:
- <ul>
- <li>Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to
-external libraries. (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=13177">more
-info</a>).</li>
- <li>Fixed ARM {@code strip} command to preserve the original {@code p_align} and
-{@code p_flags} in {@code GNU_RELRO} section if they are valid. Without this fix, programs
-built with {@code -fPIE} could not be debugged. (<a
-href="http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553">mor
-e info</a>)</li>
- </ul>
- </li>
- <li>Disabled {@code sincos()} optimization for compatibility with older
- platforms.</li>
- </ul>
- </li>
-
- <li>Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code
-bind_now} protections by default:
- <ul>
- <li>Added {@code --noexecstack} to assembler and {@code -z noexecstack} to linker
-that provides NX protection against buffer overflow attacks by enabling NX bit on stack and
-heap.</li>
- <li>Added {@code -z relro} and {@code -z now} to linker for hardening of internal
-data sections after linking to guard against security vulnerabilities caused by memory corruption.
-(more info: <a href="http://www.akkadia.org/drepper/nonselsec.pdf">1</a>,
-<a href="http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html">2</a>)</li>
-
- <li>These features can be disabled using the following options:
- <ol>
- <li>Disable NX protection by setting the {@code --execstack} option for the
-assembler and {@code -z execstack} for the linker.</li>
- <li>Disable hardening of internal data by setting the {@code -z norelro} and
-{@code -z lazy} options for the linker.</li>
- <li>Disable these protections in the NDK {@code jni/Android.mk} by setting the
-following options:
-<pre>
-LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack"
-DISABLE_RELRO=true # disable "-z relro" and "-z now"
-</pre>
- </li>
- </ol>
- <p>See {@code docs/ANDROID-MK.html} for more details.</p>
- </li>
- </ul>
- </li>
-
- <li>Added branding for Android executables with the {@code .note.ABI-tag} section (in
-{@code crtbegin_static/dynamic.o}) so that debugging tools can act accordingly. The structure
-member and values are defined as follows:
-<pre>
-static const struct {
- int32_t namesz; /* = 4, sizeof ("GNU") */
- int32_t descsz; /* = 6 * sizeof(int32_t) */
- int32_t type; /* = 1 */
- char name[sizeof "GNU"]; /* = "GNU" */
- int32_t os; /* = 0 */
- int32_t major; /* = 2 */
- int32_t minor; /* = 6 */
- int32_t teeny; /* = 15 */
- int32_t os_variant; /* = 1 */
- int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
-}</pre>
- </li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Other bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue.
- (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12637">more info</a>)</li>
- <li>Fixed {@code ld} tool segfaults when using {@code --gc-sections}.
- (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12845">more info</a>)
- </li>
- <li>Fixed MIPS {@code GOT_PAGE} counting issue.
- (<a href="http://sourceware.org/ml/binutils/2011-05/msg00198.html">more info</a>)</li>
- <li>Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.</li>
- <li>Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.</li>
- <li>Moved MIPS {@code .dynamic} to the data segment, so that it is writable.</li>
- <li>Replaced hard-coded values for symbols with correct segment sizes for MIPS.</li>
- <li>Removed the {@code -mno-shared} option from the defaults in the MIPS toolchain.
-The default for Android toolchain is {@code -fPIC} (or {@code -fpic} if supported). If you do not
-explicitly specify {@code -mshared}, {@code -fpic}, {@code -fPIC}, {@code -fpie}, or {@code -fPIE},
-the MIPS compiler adds {@code -mno-shared} that turns off PIC. Fixed compiler not to add
-{@code -mno-shared} in this case.</li>
- <li>Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that
-the {@code tests} project underneath it can compile.</li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Other Changes:</dt>
-
- <dd>
- <ul>
- <li>Changed locations of binaries:
- <ul>
- <li>Moved {@code gdbserver} from
-{@code toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver} to
-{@code prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver}.</li>
- <li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
-{@code i686-linux-android-}.</li>
- <li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
-{@code sources/cxx-stl/gnu-libstdc++/4.6} when compiled with GCC 4.6, or
-{@code sources/cxx-stl/gnu-libstdc++/4.4.3} when compiled with GCC 4.4.3.</li>
- <li>Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code
-lib32/}.</li>
- </ul>
- </li>
-
- <li>Added and improved various scripts in the rebuild and test NDK toolchain:
- <ul>
- <li>Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain
-that generates Win32 and Win64 executables.</li>
- <li>Improved speed of {@code download-toolchain-sources.sh} by using the {@code
-clone} command and only using {@code checkout} for the directories that are needed to build the NDK
-toolchain binaries.</li>
- <li>Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.</li>
- <li>Added {@code tests/check-release.sh} to check the content of a given NDK
-installation directory, or an existing NDK package.</li>
- <li>Rewrote the {@code tests/standalone/run.sh} standalone tests .</li>
- </ul>
- </li>
- <li>Removed {@code if_dl.h} header from all platforms and architectures. The {@code
-AF_LINK} and {@code sockaddr_dl} elements it describes are specific to BSD (i.e., they don't exist
-in Linux).</li>
- </ul>
- </dd>
- </dl>
-
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 8</a> <em>(May 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>
-
- <dl>
- <dt>New features:</dt>
-
- <dd>
- <ul>
- <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
- compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
- toolchains, system headers, libraries and debugging support. For more details regarding
- MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.
-
- <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
- your {@code APP_ABI} definition in your {@code Application.mk} file to build
- for MIPS platforms. For example, the following line instructs {@code ndk-build}
- to build your code for three distinct ABIs:</p>
-
- <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>
-
- <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
- code, you should not need to touch your {@code Android.mk} files to build MIPS
- machine code.</p>
- </li>
-
- <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
- option when calling <code>make-standalone-toolchain.sh</code>. See
- {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
- </li>
- </ul>
-
- <p class="note"><strong>Note:</strong> To ensure that your applications are available
-to users only if their devices are capable of running them, Google Play filters applications based
-on the instruction set information included in your application ? no action is needed on your part
-to enable the filtering. Additionally, the Android system itself also checks your application at
-install time and allows the installation to continue only if the application provides a library that
-is compiled for the device's CPU architecture.</p>
- </dd>
-
- <dt>Important bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed a typo in GAbi++ implementation where the result of {@code
- dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
- incorrectly adjusted in the opposite direction from the base class.
- (<a href="http://b.android.com/28721">Issue 28721</a>)
- </li>
- <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
- {@code libsupc++.*}.</li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
- if the user has redefined the {@code SHELL} environment variable, which may be changed
- when installing a variety of development tools in Windows environments.
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 7c</a> <em>(April 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
-additional fixes and improvements:</p>
-
- <dl>
- <dt>Important bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
- devices. The files provided with NDK r7b were not configured properly,
- resulting in crashes on Tegra2-based devices and others when trying to use
- certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
- </ul>
- </dd>
-
- <dt>Important changes:</dt>
-
- <dd>
- <ul>
- <li>Added support for custom output directories through the {@code NDK_OUT}
- environment variable. When defined, this variable is used to store all
- intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
- also recognized by {@code ndk-gdb}. </li>
- <li>Added support for building modules with hundreds or even thousands of source
- files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
- <p>This change forces the NDK build system to put most linker or archiver options
- into list files, as a work-around for command-line length limitations.
- See {@code docs/ANDROID-MK.html} for details.</p>
- </li>
- </ul>
- </dd>
-
- <dt>Other bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
-helper library. On certain devices, where cores are enabled dynamically by the system, the previous
-implementation would report the total number of <em>active</em> cores the first time the function
-was called, rather than the total number of <em>physically available</em> cores.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 7b</a> <em>(February 2012)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
- improvements:</p>
-
- <dl>
- <dt>Important bug fixes:</dt>
-
- <dd>
- <ul>
- <li>Updated {@code sys/atomics.h} to avoid correctness issues
- on some multi-core ARM-based devices. Rebuild your unmodified sources with this
- version of the NDK and this problem should be completely eliminated.
- For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
- <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
- appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
- <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
- of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
- <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
- affected. The fixes include:
- <ul>
- <li>Removed an infinite loop / stack overflow bug that happened when trying
- to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
- your project path (e.g., in any sub-directory of it).</li>
- <li>Fixed a problem where the auto-generated dependency files were ignored. This
- meant that updating a header didn't trigger recompilation of sources that included
- it.</li>
- <li>Fixed a problem where special characters in files or paths, other than spaces and
- quotes, were not correctly handled.</li>
- </ul>
- </li>
- <li>Fixed the standalone toolchain to generate proper binaries when using
- {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
- should use {@code -lgnustl_shared} if you want to link against the shared library
- version or {@code -lstdc++} for the static version.
-
- <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
- </li>
- <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
- {@code libsupc++.a} even though the file was at the right location.</li>
- <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
- {@code APP_STL}.</li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>Other changes:</dt>
-
- <dd>
- <ul>
- <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
- no longer forcibly enable exceptions and RTTI. This change results in smaller code.
- <p>If you need these features, you must do one of the following:</p>
- <ul>
- <li>Enable exceptions and/or RTTI explicitly in your modules or
- {@code Application.mk}. (recommended)</li>
- <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
- {@code 'rtti'} or both in your {@code Application.mk}. See
- {@code docs/APPLICATION-MK.html} for more details.</li>
- </ul>
- </li>
- <li>{@code ndk-gdb} now works properly when your application has private services
- running in independent processes. It debugs the main application process, instead of the
- first process listed by {@code ps}, which is usually a service process.</li>
- <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
- and always compile certain source files (but not all) to 32-bit instructions.</li>
- <li>{@code STLport}: Refresh the sources to match the Android platform version. This
- update fixes a few minor bugs:
- <ul>
- <li>Fixed instantiation of an incomplete type</li>
- <li>Fixed minor "==" versus "=" typo</li>
- <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
- <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
- etc.</li>
- </ul>
- <p>For complete details, see the commit log.</p>
- </li>
- <li>{@code STLport}: Removed 5 unnecessary static initializers from the library.</li>
- <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
- armeabi instead. This change had no impact on correctness, but using the right
- ABI should provide slightly better performance.</li>
- <li>The {@code cpu-features} helper library was updated to report three optional
- x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
- {@code docs/CPU-FEATURES.html} for more details.</li>
- <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
- of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
- <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
- directory when invoked.</li>
- <li>Cygwin: Added better automatic dependency detection. In the previous version, it
- didn't work properly in the following cases:
- <ul>
- <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
- <li>When using drive-less mounts, for example, when Cygwin would translate
- {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
- </ul>
- </li>
- <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
- {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 7</a> <em>(November 2011)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes new features to support the Android 4.0 platform as well
- as many other additions and improvements:</p>
-
- <dl>
- <dt>New features</dt>
-
- <dd>
- <ul>
- <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
- native features to the platform:
-
- <ul>
- <li>Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1
- standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
- <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
- API level 14 to perform multimedia output directly from native code by using a new
- Android-specific buffer queue interface. For more details, see
- <code>docs/openmaxal/index.html</code> and <a href=
- "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>
-
- <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1?
- standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
- Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
- <a href=
- "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
- </ul>
- </li>
-
- <li>Added CCache support. To speed up large rebuilds, define the
- <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
- your <code>ccache</code> binary). When declared, the NDK build system automatically
- uses CCache when compiling any source file. For example:
- <pre>
-export NDK_CCACHE=ccache
-</pre>
- <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
- so you must have it installed prior to using it. For more information about CCache, see
- <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
- </li>
-
- <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
- you want to build your NDK modules for all the ABIs supported by your given NDK
- release. This means that either one of the following two lines in your
- <code>Application.mk</code> are equivalent with this release:
- <pre>
-APP_ABI := all
-APP_ABI := armeabi armeabi-v7a x86
-</pre>
-
- <p>This also works if you define <code>APP_ABI</code> when calling
- <code>ndk-build</code> from the command-line, which is a quick way to check that your
- project builds for all supported ABIs without changing the project's
- <code>Application.mk file</code>. For example:</p>
- <pre>
-ndk-build APP_ABI=all
-</pre>
- </li>
-
- <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
- allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
- ensures that the final linking works correctly if you have prebuilt modules that depend
- on these features. See <code>docs/ANDROID-MK.html</code> and
- <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>
-
- <li>Shortened paths to source and object files that are used in build commands. When
- invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
- object, and binary files that are passed to the build commands are significantly
- shorter now, because they are passed relative to the current directory. This is useful
- when building projects with a lot of source files, to avoid limits on the maximum
- command line length supported by your host operating system. The behavior is unchanged
- if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
- you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
- </ul>
- </dd>
-
- <dt>Experimental features</dt>
-
- <dd>
- You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
- <code>ndk-build.cmd</code> script from the command line from your project path. The
- script takes exactly the same arguments as the original <code>ndk-build</code> script.
- The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
- tools required by the build. You should not need to install anything else to get a
- working build system.
-
- <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
- Windows, so you still need Cygwin to debug.</p>
-
- <p>This feature is still experimental, so feel free to try it and report issues on the
- <a href="http://b.android.com">public bug database</a> or <a href=
- "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
- shipped with the NDK succesfully compile with this feature.</p>
- </dd>
-
- <dt>Important bug fixes</dt>
-
- <dd>
- <ul>
- <li>Imported shared libraries are now installed by default to the target installation
- location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
- your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
- imports a module <code>bar</code>, then both <code>libfoo.so</code> and
- <code>libbar.so</code> are copied to the install location. Previously, only
- <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
- <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
- behavior is unchanged.</li>
-
- <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
- their MAIN intent filters.</li>
-
- <li>Static library imports are now properly transitive. For example, if a top-level
- module <code>foo</code> imports static library <code>bar</code> that imports static
- library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
- <code>libbar.a</code> and <code>libzoo.a</code>.</li>
- </ul>
- </dd>
-
- <dt>Other changes</dt>
-
- <dd>
- <ul>
- <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
- 9, not 8 for native activities.</li>
-
- <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
- supported stable API, starting from API level 9.</li>
-
- <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
- sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
- which is the new location for the AOSP servers.</li>
-
- <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
- are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>
-
- <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
- to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
- <code>docs/CPLUSPLUS-SUPPORT.html</code></li>
-
- <li>Added support for RTTI in the STLport C++ runtimes (no support for
- exceptions).</li>
-
- <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
- example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
- declare the following:
- <pre>
-LOCAL_CPP_EXTENSION := .cpp .cxx
-</pre>
- </li>
-
- <li>Removed many unwanted exported symbols from the link-time shared system libraries
- provided by the NDK. This ensures that code generated with the standalone toolchain
- doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
- symbol that changes each time the toolchain used to build the platform is changed)</li>
-
- <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
- that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
- because each extension must be probed at runtime by the client application.
-
- <p>The extensions that are available depend on your actual device and GPU drivers,
- not the platform version the device runs on. The header changes simply add new
- constants and types to make it easier to use the extensions when they have been
- probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
- following list describes the newly supported extensions:</p>
-
- <dl>
- <dt>GLES 1.x</dt>
-
- <dd>
- <ul>
- <li><code>GL_OES_vertex_array_object</code></li>
-
- <li><code>GL_OES_EGL_image_external</code></li>
-
- <li><code>GL_APPLE_texture_2D_limited_npot</code></li>
-
- <li><code>GL_EXT_blend_minmax</code></li>
-
- <li><code>GL_EXT_discard_framebuffer</code></li>
-
- <li><code>GL_EXT_multi_draw_arrays</code></li>
-
- <li><code>GL_EXT_read_format_bgra</code></li>
-
- <li><code>GL_EXT_texture_filter_anisotropic</code></li>
-
- <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
- <li><code>GL_EXT_texture_lod_bias</code></li>
-
- <li><code>GL_IMG_read_format</code></li>
-
- <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
- <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>
-
- <li><code>GL_IMG_user_clip_plane</code></li>
-
- <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
- <li><code>GL_NV_fence</code></li>
-
- <li><code>GL_QCOM_driver_control</code></li>
-
- <li><code>GL_QCOM_extended_get</code></li>
-
- <li><code>GL_QCOM_extended_get2</code></li>
-
- <li><code>GL_QCOM_perfmon_global_mode</code></li>
-
- <li><code>GL_QCOM_writeonly_rendering</code></li>
-
- <li><code>GL_QCOM_tiled_rendering</code></li>
- </ul>
- </dd>
-
- <dt>GLES 2.0</dt>
-
- <dd>
- <ul>
- <li><code>GL_OES_element_index_uint</code></li>
-
- <li><code>GL_OES_get_program_binary</code></li>
-
- <li><code>GL_OES_mapbuffer</code></li>
-
- <li><code>GL_OES_packed_depth_stencil</code></li>
-
- <li><code>GL_OES_texture_3D</code></li>
-
- <li><code>GL_OES_texture_float</code></li>
-
- <li><code>GL_OES_texture_float_linear</code></li>
-
- <li><code>GL_OES_texture_half_float_linear</code></li>
-
- <li><code>GL_OES_texture_npot</code></li>
-
- <li><code>GL_OES_vertex_array_object</code></li>
-
- <li><code>GL_OES_EGL_image_external</code></li>
-
- <li><code>GL_AMD_program_binary_Z400</code></li>
-
- <li><code>GL_EXT_blend_minmax</code></li>
-
- <li><code>GL_EXT_discard_framebuffer</code></li>
-
- <li><code>GL_EXT_multi_draw_arrays</code></li>
-
- <li><code>GL_EXT_read_format_bgra</code></li>
-
- <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
- <li><code>GL_EXT_texture_compression_dxt1</code></li>
-
- <li><code>GL_IMG_program_binary</code></li>
-
- <li><code>GL_IMG_read_format</code></li>
-
- <li><code>GL_IMG_shader_binary</code></li>
-
- <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
- <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
- <li><code>GL_NV_coverage_sample</code></li>
-
- <li><code>GL_NV_depth_nonlinear</code></li>
-
- <li><code>GL_QCOM_extended_get</code></li>
-
- <li><code>GL_QCOM_extended_get2</code></li>
-
- <li><code>GL_QCOM_writeonly_rendering</code></li>
-
- <li><code>GL_QCOM_tiled_rendering</code></li>
- </ul>
- </dd>
-
- <dt>EGL</dt>
-
- <dd>
- <ul>
- <li><code>EGL_ANDROID_recordable</code></li>
-
- <li><code>EGL_NV_system_time</code></li>
- </ul>
- </dd>
- </dl>
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 6b</a> <em>(August 2011)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK does not include any new features compared to r6. The r6b release
- addresses the following issues in the r6 release:</p>
- <dl>
- <dt>Important bug fixes</dt>
- <dd>
- <ul>
- <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
- multi-architecture builds.</li>
- <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
- A bug in the packaging script placed them in the wrong location.</li>
- <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
- toolchain.</li>
- <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
- to copy the proper GNU libstdc++ binaries to the right location.</li>
- <li>Fixed the standalone toolchain linker warnings about missing the definition and
- size for the <code>__dso_handle</code> symbol (ARM only).</li>
- <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
- See the <a href="http://b.android.com/18540">bug</a> for
- more information.</li>
- <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
- x86-specific systems when they are used with the x86 standalone toolchain.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 6</a> <em>(July 2011)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes support for the x86 ABI and other minor changes.
- For detailed information describing the changes in this release, read the
- <code>CHANGES.HTML</code> document included in the NDK package.
- </p>
- <dl>
- <dt>General notes:</dt>
- <dd>
- <ul>
- <li>Adds support for the x86 ABI, which allows you to generate machine code
- that runs on compatible x86-based Android devices. Major features for x86
- include x86-specific toolchains, system headers, libraries and
- debugging support. For all of the details regarding x86 support,
- see <code>docs/CPU-X86.html</code> in the NDK package.
-
- <p>By default, code is generated for ARM-based devices, but you can add x86 to your
- <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
- for x86 platforms. For example, the following line instructs <code>ndk-build</code>
- to build your code for three distinct ABIs:</p>
-
- <pre>APP_ABI := armeabi armeabi-v7a x86</pre>
-
- <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
- your <code>Android.mk</code> files to build x86 machine code.</p>
-
- </li>
-
- <li>You can build a standalone x86 toolchain using the
-<code>--toolchain=x86-4.4.3</code>
- option when calling <code>make-standalone-toolchain.sh</code>. See
- <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
- </li>
- <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
- <code>logcat</code> that are generated by native code. The tool translates
- instruction addresses into a readable format that contains things such
- as the function, source file, and line number corresponding to each stack frame.
- For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
- </li>
- </ul>
- </dd>
- <dt>Other changes:</dt>
- <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
- removed from the NDK distribution.</dd>
-
- </dl>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 5c</a> <em>(June 2011)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK does not include any new features compared to r5b. The r5c release
- addresses the following problems in the r5b release:</p>
- <dl>
- <dt>Important bug fixes:</dt>
- <dd>
- <ul>
- <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
- builds of debuggable projects.</li>
-
- <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
- correctly with the new toolchain and added documentation for this in
- <code>docs/ANDROID-MK.html</code>.</li>
-
- <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
- platform releases older than API level 8 (Android 2.2).</li>
-
- <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging
-Android 3.0
- or newer devices.</li>
-
- <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
- 9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
- binary interface to the system is unchanged. The incorrect functions were missing a
- <code>history_index</code> parameter, and the correct definitions are shown below:
-<pre>
-float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
- size_t pointer_index,
- size_t history_index);
-
-float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
- size_t pointer_index,
- size_t history_index);
-</pre>
- </li>
-
- <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
- link time new functions that were added in that API level (for example,
- <code>pthread_rwlock_init</code>).</li>
-
- </ul>
- </dd>
-
- <dt>Minor improvements and fixes:</dt>
- <dd>
- <ul>
- <li>Object files are now always linked in the order they appear in
- <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
- grouped by source extensions instead.</li>
-
- <li>When <code>import-module</code> fails, it now prints the list of directories that
- were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
- used by the build system is correct.</li>
-
- <li>When <code>import-module</code> succeeds, it now prints the directory where the
- module was found to the log (visible with <code>NDK_LOG=1</code>).</li>
-
- <li>Increased the build speed of debuggable applications when there is a very large number
- of include directories in the project.</li>
-
- <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
- error messages.</li>
-
- <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
- <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>
-
- <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
- GNU Make.</li>
-
- <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
- true (typo in <code>build/core/build-binary.mk</code>).</li>
-
- <li>Fixed a bug that prevented the compilation of <code>.s</code> assembly files
- (<code>.S</code> files were okay).</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 5b</a> <em>(January 2011)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK does not include any new features compared to r5. The r5b release
-addresses the
- following problems in the r5 release:
- </p>
- <ul>
- <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
- toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on
-Ubuntu 8.04 or higher. </li>
- <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
- The previous binary generated invalid thumb instruction sequences when
- dealing with signed chars.</li>
- <li>Adds missing documentation for the
- "gnustl_static" value for APP_STL, that allows you to link against
- a static library version of GNU libstdc++. </li> the
- <li>Fixed the following <code>ndk-build</code> issues:
- <ul>
- <li>A bug that created inconsistent dependency files when a
- compilation error occured on Windows. This prevented a proper build after
- the error was fixed in the source code.</li>
- <li>A Cygwin-specific bug where using very short paths for
- the Android NDK installation or the project path led to the
- generation of invalid dependency files. This made incremental builds
- impossible.</li>
- <li>A typo that prevented the cpufeatures library from working correctly
- with the new NDK toolchain.</li>
- <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
- from GNU Make for every source or object file, which caused problems
- with very large source trees. In case this doesn't work properly, define
-<code>NDK_USE_CYGPATH=1</code> in your
- environment to use <code>cygpath -m</code> again.</li>
- <li>The Cygwin installation now notifies the user of invalid installation paths that
-contain spaces. Previously, an invalid path
- would output an error that complained about an incorrect version of GNU Make, even if the
-right one was installed.
- </ul>
- </li>
- <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from
-working properly when
- it contained multiple directories separated with a colon. </li>
- <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
- generated machine code, instead of relying on the host tag, which
- allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts
-now also support
- using a 32-bit host toolchain.</li>
- <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to
-<code>&lt;netinet/in.h&gt;</code>.</li>
- <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and
-<code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
- <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow
-compilation with <code>-std=c99</code>.</li>
- </ul>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 5</a> <em>(December 2010)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>This release of the NDK includes many new APIs, most of which are introduced to
- support the development of games and similar applications that make extensive use
- of native code. Using the APIs, developers have direct native access to events, audio,
- graphics and window management, assets, and storage. Developers can also implement the
- Android application lifecycle in native code with help from the new
- {@link android.app.NativeActivity} class. For detailed information describing the changes
-in this
- release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK
-package.
- </p>
- <dl>
- <dt>General notes:</dt>
- <dd>
- <ul>
- <li>Adds support for native activities, which allows you to implement the
- Android application lifecycle in native code.</li>
-
- <li>Adds native support for the following:
-
- <ul>
-
- <li>Input subsystem (such as the keyboard and touch screen)</li>
-
- <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>
-
- <li>Event loop APIs to wait for things such as input and sensor events.</li>
-
- <li>Window and surface subsystem</li>
-
- <li>Audio APIs based on the OpenSL ES standard that support playback and recording
- as well as control over platform audio effects</li>
-
- <li>Access to assets packaged in an <code>.apk</code> file.</li>
-
- </ul>
- </li>
-
- <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can
-also now
- be used as a standalone cross-compiler, for people who want to build their stuff with
- <code>./configure &amp;&amp; make</code>. See
- docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still
-provided,
- but the 4.2.1 binaries were removed.</li>
-
- <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and
-module
- exports and imports to make sharing and reuse of third-party modules much easier
- (docs/IMPORT-MODULE.html explains why).</li>
-
- <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It
-can be used either
- as a static or shared library (details and usage examples are in
-sources/android/stlport/README). Prebuilt
- binaries for STLport (static or shared) and GNU libstdc++ (static only) are also
-provided if you choose to
- compile against those libraries instead of the default C++ STL implementation.
- C++ Exceptions and RTTI are not supported in the default STL implementation. For more
-information, see
- docs/CPLUSPLUS-SUPPORT.HTML.</li>
-
- <li>Includes improvements to the <code>cpufeatures</code> helper library that improves
-reporting
- of the CPU type (some devices previously reported ARMv7 CPU when the device really was
-an ARMv6). We
- recommend developers that use this library to rebuild their applications then
- upload to Google Play to benefit from the improvements.</li>
-
- <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
- services.</li>
-
- <li>Adds new sample applications, <code>native-plasma</code> and
-<code>native-activity</code>,
- to demonstrate how to write a native activity.</li>
-
- <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a
-more
- detailed list of changes.</li>
- </ul>
- </dd>
- </dl>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 4b</a> <em>(June 2010)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>NDK r4b notes:</dt>
-
- <dd>
- <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
- you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
- information describing the changes in this release, read the CHANGES.TXT document
- included in the downloaded NDK package.</p>
- </dd>
- </dl>
-
- <dl>
- <dt>General notes:</dt>
-
- <dd>
- <ul>
- <li>Provides a simplified build system through the new <code>ndk-build</code> build
- command.</li>
-
- <li>Adds support for easy native debugging of generated machine code on production
- devices through the new <code>ndk-gdb</code> command.</li>
-
- <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
- <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
- include these CPU instruction set extensions:
-
- <ul>
- <li>Thumb-2 instructions</li>
-
- <li>VFP hardware FPU instructions (VFPv3-D16)</li>
-
- <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
- Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
- others.</li>
- </ul>
- </li>
-
- <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
- app detect the host device's CPU features at runtime. Specifically, applications can
- check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
- code paths as needed.</li>
-
- <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
- <code>cpufeatures</code> library to check CPU features and then provide an optimized
- code path using NEON instrinsics, if supported by the CPU.</li>
-
- <li>Lets you generate machine code for either or both of the instruction sets supported
- by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
- same time and have everything stored to your application's final
- <code>.apk</code>.</li>
-
- <li>To ensure that your applications are available to users only if their devices are
- capable of running them, Google Play now filters applications based on the
- instruction set information included in your application &mdash; no action is needed on
- your part to enable the filtering. Additionally, the Android system itself also checks
- your application at install time and allows the installation to continue only if the
- application provides a library that is compiled for the device's CPU architecture.</li>
-
- <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
- buffers of {@link android.graphics.Bitmap} objects from native code.</li>
- </ul>
- </dd>
- </dl>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 3</a> <em>(March 2010)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>General notes:</dt>
-
- <dd>
- <ul>
- <li>Adds OpenGL ES 2.0 native library support.</li>
-
- <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
- OpenGL ES 2.0 vertex and fragment shaders.</li>
-
- <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
- should generate slightly more compact and efficient machine code than the previous one
- (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
- to build your machine code.</li>
- </ul>
- </dd>
- </dl>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 2</a> <em>(September 2009)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>Originally released as "Android 1.6 NDK, Release 1".</p>
-
- <dl>
- <dt>General notes:</dt>
-
- <dd>
- <ul>
- <li>Adds OpenGL ES 1.1 native library support.</li>
-
- <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
- through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
- android.opengl.GLSurfaceView} object.</li>
- </ul>
- </dd>
- </dl>
- </div>
- </div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
- alt="">Android NDK, Revision 1</a> <em>(June 2009)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <p>Originally released as "Android 1.5 NDK, Release 1".</p>
-
- <dl>
- <dt>General notes:</dt>
-
- <dd>
- <ul>
- <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
- instructions.</li>
-
- <li>Includes system headers for stable native APIs, documentation, and sample
- applications.</li>
- </ul>
- </dd>
- </dl>
- </div>
- </div>
-
-
-
-
-
-<!-- ####################### END OF RELEASE NOTES ####################### -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <h2 id="Reqs">System and Software Requirements</h2>
-
- <p>The sections below describe the system and software requirements for using the Android NDK, as
- well as platform compatibility considerations that affect appplications using libraries produced
- with the NDK.</p>
-
- <h4>The Android SDK</h4>
-
- <ul>
- <li>A complete Android SDK installation (including all dependencies) is required.</li>
-
- <li>Android 1.5 SDK or later version is required.</li>
- </ul>
-
- <h4>Supported operating systems</h4>
-
- <ul>
- <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
-
- <li>Mac OS X 10.4.8 or later (x86 only)</li>
-
- <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
-later)</li>
- </ul>
-
- <h4>Required development tools</h4>
-
- <ul>
- <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
- Make might work but have not been tested.</li>
-
- <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>
-
- <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
- will <em>not</em> work with Cygwin 1.5 installations.</li>
- </ul>
-
- <h4 id="platform-compat">Android platform compatibility</h4>
-
- <ul>
- <li>The native libraries created by the Android NDK can only be used on devices running
- specific minimum Android platform versions. The minimum required platform version depends on
- the CPU architecture of the devices you are targeting. The following table details which
- Android platform versions are compatible with native code developed for specific CPU
- architectures.
-
- <table style="margin:1em;">
- <tr>
- <th>Native Code CPU Architecture Used</th>
- <th>Compatible Android Platform(s)</th>
- </tr>
-
- <tr>
- <td>ARM, ARM-NEON</td>
- <td>Android 1.5 (API Level 3) and higher</td>
- </tr>
-
- <tr>
- <td>x86</td>
- <td>Android 2.3 (API Level 9) and higher</td>
- </tr>
-
- <tr>
- <td>MIPS</td>
- <td>Android 2.3 (API Level 9) and higher</td>
- </tr>
- </table>
-
- <p>These requirements mean you can use native libraries produced with the NDK in
- applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
- deploying native libraries to x86 and MIPS-based devices, your application must target Android
- 2.3 or later.</p>
- </li>
-
- <li>To ensure compatibility, an application using a native library produced with the NDK
- <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
- &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
- <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:
-
-<pre style="margin:1em;">
-&lt;manifest&gt;
- &lt;uses-sdk android:minSdkVersion="3" /&gt;
- ...
-&lt;/manifest&gt;
-</pre>
- </li>
-
- <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
- application containing the library can be deployed only to devices running the minimum platform
- versions described in the table below. To ensure compatibility, make sure that your application
- declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
- following table.</li>
-
- <li style="list-style: none; display: inline">
- <table style="margin:1em;">
- <tr>
- <th>OpenGL ES Version Used</th>
-
- <th>Compatible Android Platform(s)</th>
-
- <th>Required uses-sdk Attribute</th>
- </tr>
-
- <tr>
- <td>OpenGL ES 1.1</td>
-
- <td>Android 1.6 (API Level 4) and higher</td>
-
- <td><code>android:minSdkVersion="4"</code></td>
- </tr>
-
- <tr>
- <td>OpenGL ES 2.0</td>
-
- <td>Android 2.0 (API Level 5) and higher</td>
-
- <td><code>android:minSdkVersion="5"</code></td>
- </tr>
- </table>
-
- <p>For more information about API Level and its relationship to Android platform versions,
- see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API
-Levels</a>.</p>
- </li>
-
- <li>Additionally, an application using the OpenGL ES APIs should declare a
- <code>&lt;uses-feature&gt;</code> element in its manifest, with an
- <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
- required by the application. This ensures that Google Play will show your application only
- to users whose devices are capable of supporting your application. For example:
- <pre style="margin:1em;">
-&lt;manifest&gt;
-<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
- to run only on devices that support OpenGL ES 2.0 or higher. -->
- &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
- ...
-&lt;/manifest&gt;
-</pre>
-
- <p>For more information, see the <a href=
-
-"{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
- documentation.</p>
- </li>
-
- <li>If you use this NDK to create a native library that uses the API to access Android {@link
- android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
- containing the library can be deployed only to devices running Android 2.2 (API level 8) or
- higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
- android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
- </ul>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <h2 id="Installing">Installing the NDK</h2>
- <p>Installing the NDK on your development computer is straightforward and involves extracting the
- NDK from its download package.</p>
-
- <p>Before you get started make sure that you have downloaded the latest <a href=
- "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
- needed. The NDK is compatible with older platform versions but not older versions of the SDK
-tools.
- Also, take a moment to review the <a href="#Reqs">System and
-Software Requirements</a>
- for the NDK, if you haven't already.</p>
-
- <p>To install the NDK, first download the appropriate package from the table at the top of this
- page. Then, follow the procedure for your development platform:</p>
- <ul>
- <li>On Linux and Mac OS X (Darwin):
- <ul>
- <ol>
- <li>Download the appropriate package from this page.</li>
- <li>Open a terminal window.</li>
- <li>Go to the directory to which you downloaded the package.</li>
- <li>Run <code>chmod a+x</code> on the downloaded package.</li>
- <li>Execute the package. For example:</li>
- <pre>
-ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
-ndk$ ./android-ndk-r10c-darwin-x86_64.bin
- </pre>
- <p>The folder containing the NDK extracts itself.</p>
- <p>Note that you can also use a program like 7z to extract the package.</p>
- </ol>
- </ul>
- <li>On Windows:</li>
- <ul>
- <ol>
- <li>Download the appropriate package from this page.</li>
- <li>Navigate to the folder to which you downloaded the package.</li>
- <li>Double-click the downloaded file. The folder containing the NDK extracts itself.</li>
- </ol>
- </ul>
- </ul>When uncompressed, the NDK files are contained in a directory called
- <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
- can move it to any location on your computer. This documentation refers to the NDK directory as
- <code>&lt;ndk&gt;</code>.
-
-
- <p>You are now ready to start working with the NDK.</p>
-
-
-<h2 id="GetStarted">Getting Started with the NDK</h2>
-
-<p>Once you've installed the NDK successfully, take a few minutes to read the documentation
-included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
-directory. In particular, please read the OVERVIEW.HTML document completely, so that you
-understand the intent of the NDK and how to use it.</p>
-
-<p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
-the CHANGES.HTML document.</p>
-
-<p>Here's the general outline of how you work with the NDK tools:</p>
-
-<ol>
- <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>
-
- <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
- NDK build system</li>
-
- <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>
-
- <li>Build your native code by running the 'ndk-build' script from your project's directory. It
- is located in the top-level NDK directory:
- <pre class="no-pretty-print">cd &lt;project&gt;
-&lt;ndk&gt;/ndk-build
-</pre>
-
- <p>The build tools copy the stripped, shared libraries needed by your application to the
- proper location in the application's project directory.</p>
- </li>
-
- <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
- will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
-</ol>
-
-<p>For complete information on all of the steps listed above, please see the documentation
-included with the NDK package.</p>
-
-
-<h3 id="Using">Using the NDK</h3>
-
-<p>The Android framework provides two ways to use native code:</p>
-
-<ul>
- <li>Write your application using the Android framework and use JNI to access the APIs provided
- by the Android NDK. This technique allows you to take advantage of the convenience of the
- Android framework, but still allows you to write native code when necessary. If you use this
- approach, your application must target specific, minimum Android platform levels, see <a
- href="#platform-compat">Android platform compatibility</a> for more information.</li>
-
- <li>
- <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
- code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
- convenience class that notifies your
- native code of any activity lifecycle callbacks (<code>onCreate()</code>,
-<code>onPause()</code>,
- <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
- these events when they occur. Applications that use native activities must be run on Android
- 2.3 (API Level 9) or later.</p>
-
- <p>You cannot access features such as Services and Content Providers natively, so if you want
- to use them or any other framework API, you can still write JNI code to do so.</p>
- </li>
-</ul>
-
-
-
-
-
- <h2 id="Contents">Contents of the NDK</h2>
-
- <p>The NDK contains the APIs, documentation, and sample
- applications that help you write your native code. Specifically:</p>
-
- <ul>
- <li>A set of tools and build files used to generate native code libraries from C and C++
- sources</li>
-
- <li>A way to embed the corresponding native libraries into an application package file
- (<code>.apk</code>) that can be deployed on Android devices</li>
-
- <li>A set of native system headers and libraries that will be supported in all future versions
- of the Android platform, starting from Android 1.5. Applications that use native activities
- must be run on Android 2.3 or later.</li>
-
- <li>Documentation, samples, and tutorials</li>
- </ul>
-
- <p>The latest release of the NDK supports the following instruction sets:</p>
-
- <ul>
- <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
-information)</li>
-
- <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
- NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>
-
- <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>
-
- <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
- </ul>
-
- <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
- devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
- difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
- NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
- default, but switching to ARMv7-A is as easy as adding a single line to the application's
- <code>Application.mk</code> file, without needing to change anything else in the file. You can
-also build for
- both architectures at the same time and have everything stored in the final <code>.apk</code>.
- Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>
-
- <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
- (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
- "#Tools">Development tools</a> section.</p>
-
-
- <h3 id="Tools">Development tools</h3>
-
- <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc.) that can generate
- native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>
-
- <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
- in all later releases of the platform:</p>
-
- <ul>
- <li>libc (C library) headers</li>
-
- <li>libm (math library) headers</li>
-
- <li>JNI interface headers</li>
-
- <li>libz (Zlib compression) headers</li>
-
- <li>liblog (Android logging) header</li>
-
- <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>
-
- <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>
-
- <li>A Minimal set of headers for C++ support</li>
-
- <li>OpenSL ES native audio libraries</li>
-
- <li>Android native application APIS</li>
- </ul>
-
- <p>The NDK also provides a build system that lets you work efficiently with your sources, without
- having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
- describe which sources to compile and which Android application will use them &mdash; the build
- system compiles the sources and places the shared libraries directly in your application
- project.</p>
-
- <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
- native system libraries in the Android platform are <em>not</em> stable and may change in future
- platform versions. Your applications should <em>only</em> make use of the stable native system
- libraries provided in this NDK.</p>
-
-
-
- <h3 id="Docs">Documentation</h3>
-
- <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
- how to use it to create shared libraries for your Android applications. In this release, the
- documentation is provided only in the downloadable NDK package. You can find the documentation in
- the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>
-
- <ul>
- <li>
- INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
- system</li>
-
- <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>
-
- <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
- sources you want to compile</li>
-
- <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
- the native sources required by your Android application</li>
- <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>
- <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
- them.</li>
-
- <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
- lets your application code detect the target device's CPU family and the optional features at
- runtime.</li>
-
- <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>
-
- <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for
-it</li>
-
- <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>
-
- <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>
-
- <li>LICENSES.HTML &mdash; information about the various open source licenses that govern the
-Android NDK</li>
-
- <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>
-
- <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>
-
- <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>
-
- <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>
-
- <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
- compiler (still in beta).</li>
-
- <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
- aware of, if you are developing using the NDK.</li>
-
- <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
- NDK.</li>
-
- </ul>
-
- <p>Additionally, the package includes detailed information about the "bionic" C library provided
- with the Android platform that you should be aware of, if you are developing using the NDK. You
- can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
-
- <ul>
- <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
- offers.</li>
- </ul>
-
-
-
-
-
-<h3 id="Samples">Sample apps</h3>
-
-<p>The NDK includes sample applications that illustrate how to use native code in your Android
- applications:</p>
-
- <ul>
- <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
- method implemented in a shared library and then displays it in the application UI.</li>
-
- <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
- and calls a native method provided by the library. In this case, the method is implemented in a
- static library imported by the shared library.</li>
-
- <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
- native OpenGL ES APIs, while managing activity lifecycle with a {@link
- android.opengl.GLSurfaceView} object.</li>
-
- <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
- 2.0 vertex and fragment shaders.</li>
-
- <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
- <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
- if supported by the CPU. Specifically, the application implements two versions of a tiny
- benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
- support it.</li>
-
- <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
- pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
- this to generate an old-school "plasma" effect.</li>
-
- <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
- native-app-glue static library to create a native activity</li>
-
- <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
- activity.</li>
- </ul>
-
- <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
- and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
- and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>
-
- <p>You can build the shared libraries for the sample apps by going into
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
- The generated shared libraries will be located under
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
- <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>
-
- <p>Next, build the sample Android applications that use the shared libraries:</p>
-
- <ul>
- <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
- Android project for each sample, using the "Import from Existing Source" option and importing
- the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
- if necessary, and build/run the application in the emulator.</li>
-
- <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
- for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
- Then set up an AVD, if necessary, build your project in the usual way, and run it in the
- emulator.</li>
-
- </ul>
-
- <p>For more information about developing with the Android SDK tools and what
- you need to do to create, build, and run your applications, see
- the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
- section for developing on Android.</p>
-
-
-
- <h4 id="hello-jni">Exploring the hello-jni Sample</h4>
-
- <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
- The HelloJni activity receives a string from a simple C function and displays it in a
- TextView.</p>
-
- <p>The main components of the sample include:</p>
-
- <ul>
- <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
- file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>
-
- <li>A <code>jni/</code> directory that includes the implemented source file for the native code
- as well as the Android.mk file</li>
-
- <li>A <code>tests/</code> directory that contains unit test code.</li>
- </ul>
-
- <ol>
- <li>Create a new project in Eclipse from the existing sample source or use the
- <code>android</code> tool to update the project so it generates a build.xml file that you can
- use to build the sample.
-
- <ul>
- <li>In Eclipse:
-
- <ol type="a">
- <li>Click <strong>File &gt; New Android Project...</strong></li>
-
- <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
- <li>Select any API level above Android 1.5.</li>
-
- <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
- the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
- <li>Click <strong>Finish</strong>.</li>
- </ol>
- </li>
-
- <li>On the command line:
-
- <ol type="a">
- <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
- <li>Run the following command to generate a build.xml file:
- <pre class="no-pretty-print">android update project -p . -s</pre>
- </li>
- </ol>
- </li>
- </ul>
- </li>
-
- <li>Compile the native code using the <code>ndk-build</code> command.
- <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/samples/hello-jni
-&lt;ndk_root&gt;/ndk-build
-</pre>
- </li>
-
- <li>Build and install the application as you would a normal Android application. If you are
- using Eclipse, run the application to build and install it on a device. If you are using Ant,
- run the following commands from the project directory:
- <pre class="no-pretty-print">
-ant debug
-adb install bin/HelloJni-debug.apk
-</pre>
- </li>
- </ol>
-
- <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
- your device. You can explore the rest of the samples that are located in the
- <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>
-
-
-
- <h4 id="native-activity">Exploring the native-activity Sample Application</h4>
-
- <p>The native-activity sample provided with the Android NDK demonstrates how to use the
- android_native_app_glue static library. This static library makes creating a native activity
- easier by providing you with an implementation that handles your callbacks in another thread, so
- you do not have to worry about them blocking your main UI thread. The main parts of the sample
- are described below:</p>
-
- <ul>
- <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
- file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
- that the application is native and specifies the .so file of the native activity. See {@link
- android.app.NativeActivity} for the source or see the
- <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>
-
- <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
- <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
- describes the native module to the build system also exists here.</li>
- </ul>
-
- <p>To build this sample application:</p>
-
- <ol>
- <li>Create a new project in Eclipse from the existing sample source or use the
- <code>android</code> tool to update the project so it generates a build.xml file that you can
- use to build the sample.
-
- <ul>
- <li>In Eclipse:
-
- <ol type="a">
- <li>Click <strong>File &gt; New Android Project...</strong></li>
-
- <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
- <li>Select any API level above Android 2.3.</li>
-
- <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
- the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
- <li>Click <strong>Finish</strong>.</li>
- </ol>
- </li>
-
- <li>On the command line:
-
- <ol type="a">
- <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
- <li>Run the following command to generate a build.xml file:
- <pre class="no-pretty-print">
-android update project -p . -s
-</pre>
- </li>
- </ol>
- </li>
- </ul>
- </li>
-
- <li>Compile the native code using the <code>ndk-build</code> command.
- <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
-&lt;ndk_root&gt;/ndk-build
-</pre>
- </li>
+ if it is essential to your app&mdash;never because you simply prefer to program in C/C++.
+ When examining whether or not you should develop in native code, think about your requirements and
+ see if the Android framework APIs provide the functionality that you need.</p>
- <li>Build and install the application as you would a normal Android application. If you are
- using Eclipse, run the application to build and install it on a device. If you are using Ant,
- run the following commands in the project directory, then run the application on the device:
- <pre class="no-pretty-print">
-ant debug
-adb install bin/NativeActivity-debug.apk
-</pre>
- </li>
- </ol>
+ <a class="dac-hero-cta" href="{@docRoot}ndk/index.html">
+ <span class="dac-sprite dac-auto-chevron"></span> NDK Documentation and Downloads</a>
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index f90d30e..f46dcaa 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -1,12 +1,10 @@
<ul id="nav">
-
-<!-- Downloads menu-->
-
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot?>sdk/index.html"><span class="en">Download</span></a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot
+?>sdk/index.html"><span class="en">Download</span></a></div>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/installing/index.html">
+ <li><a href="<?cs var:toroot ?>sdk/installing/index.html">
<span class="en">Installing the SDK</span></a></li>
<li><a href="<?cs var:toroot ?>sdk/installing/adding-packages.html">
@@ -18,13 +16,15 @@
<!-- Android Studio menu-->
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot?>tools/studio/index.html"><span class="en">Android Studio</span></a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>sdk/installing/studio-tips.html">Tips and Tricks</a> </li>
- </ul>
-
- </li><!-- End of Android Studio Basics -->
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot?>tools/studio/index.html">Android Studio</a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>sdk/installing/studio-tips.html">
+ Tips and Tricks</a></li>
+ </ul>
+ </li><!-- End of Android Studio menu -->
<!-- Workflow menu-->
@@ -70,6 +70,7 @@
<li><a href="<?cs var:toroot ?>tools/building/building-cmdline.html">
<span class="en">From the Command Line</span></a></li>
</ul>
+ </li>
<li class="nav-section">
@@ -81,8 +82,8 @@
<a href="<?cs var:toroot?>tools/testing/testing_android.html">
<span class="en">Fundamentals</span></a>
</li>
- <li><a href="<?cs var:toroot ?>tools/testing/testing_studio.html">
- <span class="en">From Android Studio</span></a>
+ <li><a href="<?cs var:toroot ?>tools/testing/testing_eclipse.html">
+ <span class="en">From Eclipse</span></a>
</li>
<li><a href="<?cs var:toroot ?>tools/testing/testing_otheride.html">
<span class="en">From Other IDEs</span></a>
@@ -143,14 +144,12 @@
</ul>
</li>
</ul>
- </li><!-- end of debugging -->
-
-
+ </li>
-<!-- Tool Help menu-->
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/help/index.html"><span class="en">Tools Help</span></a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/help/index.html"><span
+class="en">Tools Help</span></a></div>
<ul>
<li><a href="<?cs var:toroot ?>tools/help/adb.html">adb</a></li>
<li><a href="<?cs var:toroot ?>tools/help/android.html">android</a></li>
@@ -175,6 +174,7 @@
<li><a href="<?cs var:toroot ?>tools/help/zipalign.html">zipalign</a></li>
</ul>
</li>
+
</li><!-- end of tools help -->
@@ -294,6 +294,13 @@ class="en">Support Library</span></a></div>
</ul>
</li><!-- end of support library -->
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/data-binding/index.html"><span
+class="en">Data Binding Library</span></a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>tools/data-binding/guide.html">Guide</a></li>
+ </ul>
+ </li><!-- end of support library -->
<!-- Revision menu-->
@@ -305,10 +312,9 @@ class="en">Support Library</span></a></div>
<li><a href="<?cs var:toroot ?>tools/revisions/studio.html">
<span class="en">Android Studio</span>
</a></li>
- <li><a href="<?cs var:toroot ?>tools/revisions/sdk/tools-notes.html">
+ <li><a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">
<span class="en">SDK Tools</span>
</a></li>
- </a></li>
<li><a href="<?cs var:toroot ?>tools/revisions/build-tools.html">
<span class="en">SDK Build Tools</span>
</a></li>
@@ -320,23 +326,15 @@ class="en">Support Library</span></a></div>
<li><a href="<?cs var:toroot ?>tools/sdk/eclipse-adt.html">
<span class="en">ADT Plugin</span></a></li>
</ul>
- </li><!-- end of revision -->
-
-
-
-<!-- NDK menu-->
+ </li>
<li class="nav-section">
<div class="nav-section-header empty">
- <a href="<?cs var:toroot ?>tools/ndk/index.html">NDK</a>
+ <a href="<?cs var:toroot ?>tools/sdk/ndk/index.html">NDK</a>
</div>
- </li><!-- end of NDK -->
-
-
-
-<!-- ADK menu-->
+ </li>
- <li class="nav-section">
+<!-- <li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>tools/adk/index.html">
<span class="en">ADK</span></a>
@@ -345,8 +343,7 @@ class="en">Support Library</span></a></div>
<li><a href="<?cs var:toroot ?>tools/adk/adk2.html">ADK 2012 Guide</a></li>
<li><a href="<?cs var:toroot ?>tools/adk/adk.html">ADK 2011 Guide</a></li>
</ul>
- </li><!-- end of ADK -->
-
+ </li> -->
<!-- Eclipse ADT menu-->
diff --git a/docs/html/training/run-background-service/create-service.jd b/docs/html/training/run-background-service/create-service.jd
index 5f4799c..9b9fcd2 100644
--- a/docs/html/training/run-background-service/create-service.jd
+++ b/docs/html/training/run-background-service/create-service.jd
@@ -55,8 +55,8 @@ trainingnavtop=true
</li>
</ul>
<p>
- However, in most cases an {@link android.app.IntentService} is the preferred way to simple
- background operations.
+ However, in most cases an {@link android.app.IntentService} is the preferred way to perform
+ simple background operations.
</p>
<p>
This lesson shows you how to create your own subclass of {@link android.app.IntentService}.
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 991e600..e63be92 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -11049,9 +11049,15 @@ public final class ActivityManagerService extends ActivityManagerNative
public void killUid(int uid, String reason) {
enforceCallingPermission(Manifest.permission.KILL_UID, "killUid");
synchronized (this) {
- killPackageProcessesLocked(null, UserHandle.getAppId(uid), UserHandle.getUserId(uid),
- ProcessList.FOREGROUND_APP_ADJ-1, false, true, true, false,
- reason != null ? reason : "kill uid");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ killPackageProcessesLocked(null, UserHandle.getAppId(uid),
+ UserHandle.getUserId(uid),
+ ProcessList.PERSISTENT_PROC_ADJ, false, true, true, true,
+ reason != null ? reason : "kill uid");
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index fc09db3..d807b0b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -5381,20 +5381,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
ServiceManager.getService(Context.AUDIO_SERVICE));
}
- if (enabled && !alreadyRestricted) {
- try {
- if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
- iAudioService.setMicrophoneMute(true, who.getPackageName());
- } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
- iAudioService.setMasterMute(true, 0, who.getPackageName());
- }
- } catch (RemoteException re) {
- Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
- }
- }
long id = Binder.clearCallingIdentity();
try {
if (enabled && !alreadyRestricted) {
+ if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
+ iAudioService.setMicrophoneMute(true, mContext.getPackageName());
+ } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
+ iAudioService.setMasterMute(true, 0, mContext.getPackageName());
+ }
if (UserManager.DISALLOW_CONFIG_WIFI.equals(key)) {
Settings.Secure.putIntForUser(mContext.getContentResolver(),
Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0,
@@ -5443,19 +5437,17 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
mContext.getContentResolver().notifyChange(url, null, true, userHandle);
}
}
- } finally {
- restoreCallingIdentity(id);
- }
- if (!enabled && alreadyRestricted) {
- try {
+ if (!enabled && alreadyRestricted) {
if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
- iAudioService.setMicrophoneMute(false, who.getPackageName());
+ iAudioService.setMicrophoneMute(false, mContext.getPackageName());
} else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
- iAudioService.setMasterMute(false, 0, who.getPackageName());
+ iAudioService.setMasterMute(false, 0, mContext.getPackageName());
}
- } catch (RemoteException re) {
- Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
}
+ } catch (RemoteException re) {
+ Slog.e(LOG_TAG, "Failed to talk to AudioService.", re);
+ } finally {
+ restoreCallingIdentity(id);
}
sendChangedNotification(userHandle);
}
diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
index f703903..eaff6c7 100644
--- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
+++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
@@ -17,6 +17,7 @@
package com.android.compatibilitytest;
import android.app.ActivityManager;
+import android.app.UiModeManager;
import android.app.ActivityManager.ProcessErrorStateInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
@@ -24,6 +25,7 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
import android.os.Bundle;
import android.test.InstrumentationTestCase;
import android.util.Log;
@@ -97,7 +99,12 @@ public class AppCompatibility extends InstrumentationTestCase {
String packageName = mArgs.getString(PACKAGE_TO_LAUNCH);
if (packageName != null) {
Log.d(TAG, "Launching app " + packageName);
- ProcessErrorStateInfo err = launchActivity(packageName);
+ Intent intent = getLaunchIntentForPackage(packageName);
+ if (intent == null) {
+ Log.w(TAG, String.format("Skipping %s; no launch intent", packageName));
+ return;
+ }
+ ProcessErrorStateInfo err = launchActivity(packageName, intent);
// Make sure there are no errors when launching the application,
// otherwise raise an
// exception with the first error encountered.
@@ -155,6 +162,19 @@ public class AppCompatibility extends InstrumentationTestCase {
}
}
+ private Intent getLaunchIntentForPackage(String packageName) {
+ UiModeManager umm = (UiModeManager)
+ getInstrumentation().getContext().getSystemService(Context.UI_MODE_SERVICE);
+ boolean isLeanback = umm.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
+ Intent intent = null;
+ if (isLeanback) {
+ intent = mPackageManager.getLeanbackLaunchIntentForPackage(packageName);
+ } else {
+ intent = mPackageManager.getLaunchIntentForPackage(packageName);
+ }
+ return intent;
+ }
+
/**
* Launches and activity and queries for errors.
*
@@ -163,18 +183,9 @@ public class AppCompatibility extends InstrumentationTestCase {
* @return {@link Collection} of {@link ProcessErrorStateInfo} detected
* during the app launch.
*/
- private ProcessErrorStateInfo launchActivity(String packageName) {
- // the recommended way to see if this is a tv or not.
- boolean isleanback = !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
- && !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
- Intent intent;
- if (isleanback) {
- Log.d(TAG, "Leanback and relax! " + packageName);
- intent = mPackageManager.getLeanbackLaunchIntentForPackage(packageName);
- } else {
- intent = mPackageManager.getLaunchIntentForPackage(packageName);
- }
- assertNotNull("Skipping " + packageName + "; missing launch intent", intent);
+ private ProcessErrorStateInfo launchActivity(String packageName, Intent intent) {
+ Log.d(TAG, String.format("launching package \"%s\" with intent: %s",
+ packageName, intent.toString()));
String processName = getProcessName(packageName);