am ddde20b6: Merge "fix android build number in footer of gms and gcm reference" into jb-mr1-dev
* commit 'ddde20b67c521fbd7ad090f7a1e4ab3f69865b4f':
fix android build number in footer of gms and gcm reference
diff --git a/CleanSpec.mk b/CleanSpec.mk
index f4d45ff..59b7d68 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -150,6 +150,8 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/core/build_id.mk b/core/build_id.mk
index cfff307..09f1779 100644
--- a/core/build_id.mk
+++ b/core/build_id.mk
@@ -23,7 +23,7 @@
# (like "TC1-RC5"). It must be a single word, and is
# capitalized by convention.
#
-BUILD_ID := JB_MR1
+BUILD_ID := JB_MR1.1
# DISPLAY_BUILD_NUMBER should only be set for development branches,
# If set, the BUILD_NUMBER (cl) is appended to the BUILD_ID for
diff --git a/core/definitions.mk b/core/definitions.mk
index 06db960..4f4e583 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2064,6 +2064,29 @@
endef
###########################################################
+## API Check
+###########################################################
+
+# eval this to define a rule that runs apicheck.
+#
+# Args:
+# $(1) target
+# $(2) stable api file
+# $(3) api file to be tested
+# $(4) arguments for apicheck
+# $(5) command to run if apicheck failed
+# $(6) target dependent on this api check
+# $(7) additional dependencies
+define check-api
+$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK) $(7)
+ @echo "Checking API:" $(1)
+ $(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
+ $(hide) mkdir -p $$(dir $$@)
+ $(hide) touch $$@
+$(6): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
+endef
+
+###########################################################
## Other includes
###########################################################
diff --git a/core/tasks/apicheck.mk b/core/tasks/apicheck.mk
index 8d9928e..2c1300b 100644
--- a/core/tasks/apicheck.mk
+++ b/core/tasks/apicheck.mk
@@ -22,58 +22,48 @@
.PHONY: checkapi
-# eval this to define a rule that runs apicheck.
-#
-# Args:
-# $(1) target
-# $(2) stable api file
-# $(3) api file to be tested
-# $(4) arguments for apicheck
-# $(5) command to run if apicheck failed
-define check-api
-$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK)
- @echo "Checking API:" $(1)
- $(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
- $(hide) mkdir -p $$(dir $$@)
- $(hide) touch $$@
-checkapi: $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
-endef
-
# Run the checkapi rules by default.
droidcore: checkapi
last_released_sdk_version := $(lastword $(call numerically_sort, \
- $(filter-out $(SRC_API_DIR)/current, \
+ $(filter-out current, \
$(patsubst $(SRC_API_DIR)/%.txt,%, $(wildcard $(SRC_API_DIR)/*.txt)) \
)\
))
# INTERNAL_PLATFORM_API_FILE is the one build by droiddoc.
+# Note that since INTERNAL_PLATFORM_API_FILE is the byproduct of api-stubs module,
+# (See frameworks/base/Android.mk)
+# we need to add api-stubs as additional dependency of the api check.
# Check that the API we're building hasn't broken the last-released
# SDK version.
$(eval $(call check-api, \
- checkapi-last, \
- $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
- $(INTERNAL_PLATFORM_API_FILE), \
- -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
- -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
- -error 16 -error 17 -error 18 , \
- cat $(BUILD_SYSTEM)/apicheck_msg_last.txt \
- ))
+ checkapi-last, \
+ $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
+ $(INTERNAL_PLATFORM_API_FILE), \
+ -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
+ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+ -error 16 -error 17 -error 18 , \
+ cat $(BUILD_SYSTEM)/apicheck_msg_last.txt, \
+ checkapi, \
+ $(call doc-timestamp-for,api-stubs) \
+ ))
# Check that the API we're building hasn't changed from the not-yet-released
# SDK version.
$(eval $(call check-api, \
- checkapi-current, \
- $(SRC_API_DIR)/current.txt, \
- $(INTERNAL_PLATFORM_API_FILE), \
- -error 2 -error 3 -error 4 -error 5 -error 6 \
- -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
- -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
- -error 25 , \
- cat $(BUILD_SYSTEM)/apicheck_msg_current.txt \
- ))
+ checkapi-current, \
+ $(SRC_API_DIR)/current.txt, \
+ $(INTERNAL_PLATFORM_API_FILE), \
+ -error 2 -error 3 -error 4 -error 5 -error 6 \
+ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+ -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+ -error 25 , \
+ cat $(BUILD_SYSTEM)/apicheck_msg_current.txt, \
+ checkapi, \
+ $(call doc-timestamp-for,api-stubs) \
+ ))
.PHONY: update-api
update-api: $(INTERNAL_PLATFORM_API_FILE) | $(ACP)
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index fb1f361..e3ba14f 100644
--- a/core/version_defaults.mk
+++ b/core/version_defaults.mk
@@ -41,7 +41,7 @@
# which is the version that we reveal to the end user.
# Update this value when the platform version changes (rather
# than overriding it somewhere else). Can be an arbitrary string.
- PLATFORM_VERSION := 4.2.1
+ PLATFORM_VERSION := 4.2.2
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
diff --git a/target/product/core.mk b/target/product/core.mk
index 831298a..1d62eb8 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -37,7 +37,6 @@
KeyChain \
MediaProvider \
PackageInstaller \
- PhotoTable \
PicoTts \
SettingsProvider \
SharedStorageBackup \
diff --git a/target/product/full_base.mk b/target/product/full_base.mk
index 2c24b1a..b2e3189 100644
--- a/target/product/full_base.mk
+++ b/target/product/full_base.mk
@@ -37,7 +37,8 @@
MagicSmokeWallpapers \
NoiseField \
PhaseBeam \
- VisualizationWallpapers
+ VisualizationWallpapers \
+ PhotoTable
# Additional settings used in all AOSP builds
PRODUCT_PROPERTY_OVERRIDES := \
diff --git a/target/product/generic_no_telephony.mk b/target/product/generic_no_telephony.mk
index f139cbd..5bdc596 100644
--- a/target/product/generic_no_telephony.mk
+++ b/target/product/generic_no_telephony.mk
@@ -26,7 +26,7 @@
Calendar \
CertInstaller \
DrmProvider \
- Email2 \
+ Email \
Exchange2 \
FusedLocation \
Gallery2 \
diff --git a/target/product/large_emu_hw.mk b/target/product/large_emu_hw.mk
index 27ebc96..8a070b1 100644
--- a/target/product/large_emu_hw.mk
+++ b/target/product/large_emu_hw.mk
@@ -27,7 +27,7 @@
Calendar \
CertInstaller \
DrmProvider \
- Email2 \
+ Email \
Exchange2 \
Gallery2 \
LatinIME \
diff --git a/target/product/mini.mk b/target/product/mini.mk
index 76d4511..b69c917 100644
--- a/target/product/mini.mk
+++ b/target/product/mini.mk
@@ -218,7 +218,7 @@
PRODUCT_PACKAGES += \
TestingCamera \
Home \
- DummySystemUI \
- DummySettings \
+ SystemUI \
+ Settings \
libsurfaceflinger_ddmconnection
diff --git a/target/product/sdk.mk b/target/product/sdk.mk
index 88fc2f3..6f56bb5 100644
--- a/target/product/sdk.mk
+++ b/target/product/sdk.mk
@@ -20,7 +20,7 @@
PRODUCT_PACKAGES := \
Calculator \
DeskClock \
- Email2 \
+ Email \
Exchange2 \
FusedLocation \
Gallery \
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index de47705..6753c69 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -1094,7 +1094,7 @@
dd ul,
dd ol,
dd dl {
- margin:10px 0 0;
+ margin-top:10px;
}
li p,
li pre,
@@ -3969,7 +3969,7 @@
.jspPane {
position: absolute;
overflow: hidden;
- width:auto !important; /* to avoid cut-off api names in reference in horiz scroll */
+ width:100% !important; /* to avoid cut-off api names in reference in horiz scroll */
}
.jspVerticalBar {
diff --git a/tools/droiddoc/templates-sdk/assets/js/docs.js b/tools/droiddoc/templates-sdk/assets/js/docs.js
index eec97b2..1b878b3 100644
--- a/tools/droiddoc/templates-sdk/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk/assets/js/docs.js
@@ -6,11 +6,16 @@
var NAV_PREF_PANELS = "panels";
var nav_pref;
var isMobile = false; // true if mobile, so we can adjust some layout
+var mPagePath; // initialized in ready() function
var basePath = getBaseUri(location.pathname);
var SITE_ROOT = toRoot + basePath.substring(1,basePath.indexOf("/",1));
var GOOGLE_DATA; // combined data for google service apis, used for search suggest
+// Ensure that all ajax getScript() requests allow caching
+$.ajaxSetup({
+ cache: true
+});
/****** ON LOAD SET UP STUFF *********/
@@ -142,6 +147,9 @@
}
}
+ // Need a copy of the pagePath before it gets changed in the next block;
+ // it's needed to perform proper tab highlighting in offline docs (see rootDir below)
+ var pagePathOriginal = pagePath;
if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
// If running locally, SITE_ROOT will be a relative path, so account for that by
// finding the relative URL to this page. This will allow us to find links on the page
@@ -169,9 +177,8 @@
// highlight Develop tab
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
$("#header li.develop a").addClass("selected");
-
// In Develop docs, also highlight appropriate sub-tab
- var rootDir = pagePath.substring(1,pagePath.indexOf('/', 1));
+ var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
if (rootDir == "training") {
$("#nav-x li.training a").addClass("selected");
} else if (rootDir == "guide") {
@@ -194,21 +201,16 @@
$("#header li.distribute a").addClass("selected");
}
+ // set global variable so we can highlight the sidenav a bit later (such as for google reference)
+ // and highlight the sidenav
+ mPagePath = pagePath;
+ highlightSidenav();
- // select current page in sidenav and header, and set up prev/next links if they exist
+ // set up prev/next links if they exist
var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]');
var $selListItem;
if ($selNavLink.length) {
-
- // Find this page's <li> in sidenav and set selected
$selListItem = $selNavLink.closest('li');
- $selListItem.addClass('selected');
-
- // Traverse up the tree and expand all parent nav-sections
- $selNavLink.parents('li.nav-section').each(function() {
- $(this).addClass('expanded');
- $(this).children('ul').show();
- });
// set up prev links
var $prevLink = [];
@@ -586,6 +588,24 @@
// END of the onload event
+function highlightSidenav() {
+ // select current page in sidenav and header, and set up prev/next links if they exist
+ var $selNavLink = $('#nav').find('a[href="' + mPagePath + '"]');
+ var $selListItem;
+ if ($selNavLink.length) {
+
+ // Find this page's <li> in sidenav and set selected
+ $selListItem = $selNavLink.closest('li');
+ $selListItem.addClass('selected');
+
+ // Traverse up the tree and expand all parent nav-sections
+ $selNavLink.parents('li.nav-section').each(function() {
+ $(this).addClass('expanded');
+ $(this).children('ul').show();
+ });
+ }
+}
+
function toggleFullscreen(enable) {
var delay = 20;
@@ -1509,6 +1529,12 @@
var ROW_COUNT_GOOGLE = 15; // max number of results in list
var gGoogleListLength = 0;
+function onSuggestionClick(link) {
+ // When user clicks a suggested document, track it
+ _gaq.push(['_trackEvent', 'Suggestion Click', 'clicked: ' + $(link).text(),
+ 'from: ' + $("#search_autocomplete").val()]);
+}
+
function set_item_selected($li, selected)
{
if (selected) {
@@ -1538,7 +1564,7 @@
$(this).addClass('jd-selected');
gSelectedIndex = $('#search_filtered li').index(this);
});
- $li.append('<a></a>');
+ $li.append("<a onclick='onSuggestionClick(this)'></a>");
$li.attr('class','show-item');
return $li;
}
@@ -1892,6 +1918,11 @@
location.hash = 'q=' + query;
});
+ // once search results load, set up click listeners
+ searchControl.setSearchCompleteCallback(this, function(control, searcher, query) {
+ addResultClickListeners();
+ });
+
// draw the search results box
searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
@@ -1970,6 +2001,17 @@
setTimeout(function(){$(tabHeaders[0]).click()},200);
}
+// add analytics tracking events to each result link
+function addResultClickListeners() {
+ $("#searchResults a.gs-title").each(function(index, link) {
+ // When user clicks enter for Google search results, track it
+ $(link).click(function() {
+ _gaq.push(['_trackEvent', 'Google Click', 'clicked: ' + $(this).text(),
+ 'from: ' + $("#search_autocomplete").val()]);
+ });
+ });
+}
+
function getQuery(hash) {
var queryParts = hash.split('=');
@@ -2295,7 +2337,13 @@
}
function init_default_navtree(toroot) {
- init_navtree("tree-list", toroot, NAVTREE_DATA);
+ // load json file for navtree data
+ $.getScript(toRoot + 'navtree_data.js', function(data, textStatus, jqxhr) {
+ // when the file is loaded, initialize the tree
+ if(jqxhr.status === 200) {
+ init_navtree("tree-list", toroot, NAVTREE_DATA);
+ }
+ });
// perform api level toggling because because the whole tree is new to the DOM
var selectedLevel = $("#apiLevelSelector option:selected").val();
@@ -2352,7 +2400,6 @@
me.node.depth = 0;
get_google_node(me, me.node);
-
}
function new_google_node(me, mom, text, link, children_data, api_level)
@@ -2424,15 +2471,30 @@
function showGoogleRefTree() {
init_default_google_navtree(toRoot);
init_default_gcm_navtree(toRoot);
- resizeNav();
}
function init_default_google_navtree(toroot) {
- init_google_navtree("gms-tree-list", toroot, GMS_NAVTREE_DATA);
+ // load json file for navtree data
+ $.getScript(toRoot + 'gms_navtree_data.js', function(data, textStatus, jqxhr) {
+ // when the file is loaded, initialize the tree
+ if(jqxhr.status === 200) {
+ init_google_navtree("gms-tree-list", toroot, GMS_NAVTREE_DATA);
+ highlightSidenav();
+ resizeNav();
+ }
+ });
}
function init_default_gcm_navtree(toroot) {
- init_google_navtree("gcm-tree-list", toroot, GCM_NAVTREE_DATA);
+ // load json file for navtree data
+ $.getScript(toRoot + 'gcm_navtree_data.js', function(data, textStatus, jqxhr) {
+ // when the file is loaded, initialize the tree
+ if(jqxhr.status === 200) {
+ init_google_navtree("gcm-tree-list", toroot, GCM_NAVTREE_DATA);
+ highlightSidenav();
+ resizeNav();
+ }
+ });
}
/* TOGGLE INHERITED MEMBERS */
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index 9f19906..ba1d382 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -1,4 +1,6 @@
<?cs def:custom_masthead() ?>
+<a name="top"></a>
+<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
<!-- Header -->
<div id="header">
<div class="wrap" id="header-wrap">
@@ -60,11 +62,8 @@
<li><a href="http://source.android.com">Android Open Source Project</a></li>
</ul>
-<?cs ############ TODO: Remove when we're happy with Devsite ############# ?>
- <?cs # Use differenc lang switcher for devsite and gae server ?>
- <?cs if:devsite ?>
- <div class="header">Language</div>
- <?cs elif:android.whichdoc == "online" ?>
+ <?cs # Include language switcher only in online docs ?>
+ <?cs if:android.whichdoc == "online" ?>
<div class="header">Language</div>
<div id="language" class="locales">
<select name="language" onChange="changeLangPref(this.value, true)">
@@ -83,7 +82,7 @@
//-->
</script>
<?cs /if ?>
- <?cs # End of devsite vs. gae version of lang switcher ?>
+ <?cs # End of lang switcher ?>
<br class="clearfix" />
@@ -194,8 +193,7 @@
</div>
-
-<?cs if:training || guide || reference || tools || develop || google ?>
+ <?cs if:training || guide || reference || tools || develop || google ?>
<!-- Secondary x-nav -->
<div id="nav-x">
<div class="wrap">
@@ -240,6 +238,10 @@
</div>
<!-- /Sendondary x-nav -->
+ <?cs /if ?>
+
<?cs /if ?>
+<?cs # end if/else !devsite ?>
+
<?cs
/def ?>
diff --git a/tools/droiddoc/templates-sdk/docpage.cs b/tools/droiddoc/templates-sdk/docpage.cs
index 3e5c24f..b6d808d 100644
--- a/tools/droiddoc/templates-sdk/docpage.cs
+++ b/tools/droiddoc/templates-sdk/docpage.cs
@@ -9,7 +9,6 @@
elif:distribute ?>distribute<?cs
/if ?><?cs
if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
-<a name="top"></a>
<?cs include:"header.cs" ?>
<div <?cs if:fullpage
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index d84a3be..9778389 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -1,4 +1,18 @@
<head>
+<?cs ####### If building devsite, add some meta data needed for when generating the top nav ######### ?>
+<?cs
+ if:devsite ?><?cs
+ if:guide||develop||training||reference||tools||sdk||google
+ ?><meta name="top_category" value="develop" /><?cs
+ elif:google
+ ?><meta name="top_category" value="google" /><?cs
+ elif:reference && !(reference.gms || reference.gcm)
+ ?><meta name="top_category" value="css-fullscreen" /><?cs
+ /if ?>
+ <?cs
+ /if
+?><?cs # END if/else devsite ?>
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?cs if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>">
@@ -30,19 +44,9 @@
/if ?>
<script type="text/javascript">
var toRoot = "<?cs var:toroot ?>";
- <?cs if:devsite ?>
- var devsite = true;
- <?cs else ?>
- var devsite = false;
- <?cs /if ?>
+ var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
</script>
<script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
-<?cs if:reference.gms || reference.gcm || google?>
-<script src="<?cs var:toroot ?>gms_navtree_data.js" async type="text/javascript"></script>
-<script src="<?cs var:toroot ?>gcm_navtree_data.js" async type="text/javascript"></script>
-<?cs elif:reference ?>
-<script src="<?cs var:toroot ?>navtree_data.js" async type="text/javascript"></script>
-<?cs /if ?>
<script type="text/javascript">
var _gaq = _gaq || [];
diff --git a/tools/droiddoc/templates-sdk/sdkpage.cs b/tools/droiddoc/templates-sdk/sdkpage.cs
index decfd26..3ebf697 100644
--- a/tools/droiddoc/templates-sdk/sdkpage.cs
+++ b/tools/droiddoc/templates-sdk/sdkpage.cs
@@ -83,31 +83,58 @@
<th>MD5 Checksum</th>
</tr>
<tr>
- <td>Windows</td>
+ <td>Windows 32-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.win_download ?>"><?cs var:ndk.win_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.win32_download ?>"><?cs var:ndk.win32_download ?></a>
</td>
- <td><?cs var:ndk.win_bytes ?> bytes</td>
- <td><?cs var:ndk.win_checksum ?></td>
+ <td><?cs var:ndk.win32_bytes ?> bytes</td>
+ <td><?cs var:ndk.win32_checksum ?></td>
</tr>
<tr>
- <td>Mac OS X (intel)</td>
+ <td>Windows 64-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.mac_download ?>"><?cs var:ndk.mac_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.win64_download ?>"><?cs var:ndk.win64_download ?></a>
</td>
- <td><?cs var:ndk.mac_bytes ?> bytes</td>
- <td><?cs var:ndk.mac_checksum ?></td>
+ <td><?cs var:ndk.win64_bytes ?> bytes</td>
+ <td><?cs var:ndk.win64_checksum ?></td>
</tr>
<tr>
- <td>Linux 32/64-bit (x86)</td>
+ <td>Mac OS X 32-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.linux_download ?>"><?cs var:ndk.linux_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.mac32_download ?>"><?cs var:ndk.mac32_download ?></a>
</td>
- <td><?cs var:ndk.linux_bytes ?> bytes</td>
- <td><?cs var:ndk.linux_checksum ?></td>
+ <td><?cs var:ndk.mac32_bytes ?> bytes</td>
+ <td><?cs var:ndk.mac32_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Mac OS X 64-bit</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.mac64_download ?>"><?cs var:ndk.mac64_download ?></a>
+ </td>
+ <td><?cs var:ndk.mac64_bytes ?> bytes</td>
+ <td><?cs var:ndk.mac64_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 32-bit (x86)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.linux32_download ?>"><?cs var:ndk.linux32_download ?></a>
+ </td>
+ <td><?cs var:ndk.linux32_bytes ?> bytes</td>
+ <td><?cs var:ndk.linux32_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 64-bit (x86)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.linux64_download ?>"><?cs var:ndk.linux64_download ?></a>
+ </td>
+ <td><?cs var:ndk.linux64_bytes ?> bytes</td>
+ <td><?cs var:ndk.linux64_checksum ?></td>
</tr>
</table>
@@ -262,7 +289,7 @@
<th>MD5 Checksum</th>
</tr>
<tr>
- <td rowspan="2">Windows</td>
+ <td rowspan="2">Windows<br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
?>"><?cs var:sdk.win_download ?></a>
@@ -281,7 +308,7 @@
<td><?cs var:sdk.win_installer_checksum ?></td>
</tr>
<tr>
- <td>Mac OS X</td>
+ <td><nobr>Mac OS X</nobr><br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" id="mac-tools" href="http://dl.google.com/android/<?cs
var:sdk.mac_download
@@ -291,7 +318,7 @@
<td><?cs var:sdk.mac_checksum ?></td>
</tr>
<tr>
- <td>Linux</td>
+ <td>Linux<br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" id="linux-tools" href="http://dl.google.com/android/<?cs
var:sdk.linux_download