1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
|
page.title=Dashboards
page.metaDescription=page.metaDescription=Charts that give you an overview of device characteristics and platform versions that are active in the Android ecosystem.
page.tags="android, dashboard, platforms, versions"
meta.tags="ecosystem, versions, whatsnew"
@jd:body
<style>
div.chart,
div.screens-chart {
display:none;
}
tr .total {
background-color:transparent;
border:0;
color:#666;
}
tr th.total {
font-weight:bold;
}
</style>
<div class="sidebox">
<h2>Google Play Install Stats</h2>
<p>The Google Play Developer Console also provides <a
href="{@docRoot}distribute/googleplay/developer-console.html#app-stats">detailed statistics</a>
about your users' devices. Those stats may help you prioritize the device profiles for which
you optimize your app.</p>
</div>
<p>This page provides information about the relative number of devices that share a certain
characteristic, such as Android version or screen size. This information may
help you prioritize efforts for <a
href="{@docRoot}training/basics/supporting-devices/index.html">supporting different devices</a>
by revealing which devices are active in the Android and Google Play ecosystem.</p>
<p>This data reflects devices running the latest Google Play Store app, which is compatible
with Android 2.2 and higher. Each snapshot of data represents all the devices that visited the
Google Play Store in the prior 7 days.</p>
<h2 id="Platform">Platform Versions</h2>
<p>This section provides data about the relative number of devices running a given version of
the Android platform.</p>
<p>For information about how to target your application to devices based on
platform version, read <a
href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
Platform Versions</a>.</p>
<div id="version-chart">
</div>
<p style="clear:both"><em>Data collected during a 7-day period ending on February 2, 2015.
<br/>Any versions with less than 0.1% distribution are not shown.</em>
</p>
<p class="note"><strong>Note:</strong> Because this data is gathered from the new Google Play
Store app, which supports Android 2.2 and above, devices running older versions are not included.
However, in August, 2013, versions older than Android 2.2 accounted for about 1% of devices that
<em>checked in</em> to Google servers (not those that actually visited Google Play Store).
</p>
<h2 id="Screens">Screen Sizes and Densities</h2>
<p>This section provides data about the relative number of devices that have a particular
screen configuration, defined by a combination of screen size and density. To simplify the way that
you design your user interfaces for different screen configurations, Android divides the range of
actual screen sizes and densities into several buckets as expressed by the table below.</p>
<p>For information about how you can support multiple screen configurations in your
application, read <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a>.</p>
<div id="screens-chart">
</div>
<p style="clear:both"><em>Data collected during a 7-day period ending on February 2, 2015.
<br/>Any screen configurations with less than 0.1% distribution are not shown.</em></p>
<h2 id="OpenGL">Open GL Version</h2>
<p>This section provides data about the relative number of devices that support a particular
version of OpenGL ES. Note that support for one particular version of OpenGL ES also implies
support for any lower version (for example, support for version 2.0 also implies support for
1.1).</p>
<img alt="" style="float:right"
src="//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0&chf=bg%2Cs%2C00000000&chd=t%3A68.9%2C31.1&chco=c4df9b%2C6fad0c&cht=p&chs=400x250" />
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
android:glEsVersion} attribute of the <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element. You can also use the <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
<supports-gl-texture>}</a> element to declare the GL compression formats that your application
uses.</p>
<table style="width:350px">
<tr>
<th scope="col">OpenGL ES Version</th>
<th scope="col">Distribution</th>
</tr>
<tr>
<td>2.0</td>
<td>68.9%</td>
</tr>
<tr>
<td>3.0</td>
<td>31.1%</td>
</tr>
</table>
<p style="clear:both"><em>Data collected during a 7-day period ending on February 2, 2015</em></p>
<script>
var VERSION_DATA =
[
{
"chart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A0.4%2C7.4%2C6.4%2C44.5%2C39.7%2C1.6&chco=c4df9b%2C6fad0c&chl=Froyo%7CGingerbread%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat%7CLollipop&chs=500x250&cht=p",
"data": [
{
"api": 8,
"name": "Froyo",
"perc": "0.4"
},
{
"api": 10,
"name": "Gingerbread",
"perc": "7.4"
},
{
"api": 15,
"name": "Ice Cream Sandwich",
"perc": "6.4"
},
{
"api": 16,
"name": "Jelly Bean",
"perc": "18.4"
},
{
"api": 17,
"name": "Jelly Bean",
"perc": "19.8"
},
{
"api": 18,
"name": "Jelly Bean",
"perc": "6.3"
},
{
"api": 19,
"name": "KitKat",
"perc": "39.7"
},
{
"api": 21,
"name": "Lollipop",
"perc": "1.6"
}
]
}
];
var SCREEN_DATA =
[
{
"data": {
"Large": {
"hdpi": "0.6",
"ldpi": "0.5",
"mdpi": "5.1",
"tvdpi": "2.2",
"xhdpi": "0.6"
},
"Normal": {
"hdpi": "38.3",
"mdpi": "8.7",
"tvdpi": "0.1",
"xhdpi": "18.8",
"xxhdpi": "15.9"
},
"Small": {
"ldpi": "4.8"
},
"Xlarge": {
"hdpi": "0.3",
"mdpi": "3.5",
"xhdpi": "0.6"
}
},
"densitychart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A5.3%2C17.3%2C2.3%2C39.2%2C20.0%2C15.9&chco=c4df9b%2C6fad0c&chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chs=400x250&cht=p",
"layoutchart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A4.4%2C9.0%2C81.8%2C4.8&chco=c4df9b%2C6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chs=400x250&cht=p"
}
];
var VERSION_NAMES =
[
{"api":0},{"api":1},{"api":2},{"api":3},
{
"api":4,
"link":"<a href='/about/versions/android-1.6.html'>1.6</a>",
"codename":"Donut",
},
{ "api":5},
{ "api":6},
{
"api":7,
"link":"<a href='/about/versions/android-2.1.html'>2.1</a>",
"codename":"Eclair",
},
{
"api":8,
"link":"<a href='/about/versions/android-2.2.html'>2.2</a>",
"codename":"Froyo"
},
{
"api":9,
"link":"<a href='/about/versions/android-2.3.html'>2.3 -<br>2.3.2</a>",
"codename":"Gingerbread"
},
{
"api":10,
"link":"<a href='/about/versions/android-2.3.3.html'>2.3.3 -<br>2.3.7</a>",
"codename":"Gingerbread"
},
{ "api":11},
{
"api":12,
"link":"<a href='/about/versions/android-3.1.html'>3.1</a>",
"codename":"Honeycomb"
},
{
"api":13,
"link":"<a href='/about/versions/android-3.2.html'>3.2</a>",
"codename":"Honeycomb"
},
{ "api":14},
{
"api":15,
"link":"<a href='/about/versions/android-4.0.html'>4.0.3 -<br>4.0.4</a>",
"codename":"Ice Cream Sandwich"
},
{
"api":16,
"link":"<a href='/about/versions/android-4.1.html'>4.1.x</a>",
"codename":"Jelly Bean"
},
{
"api":17,
"link":"<a href='/about/versions/android-4.2.html'>4.2.x</a>",
"codename":"Jelly Bean"
},
{
"api":18,
"link":"<a href='/about/versions/android-4.3.html'>4.3</a>",
"codename":"Jelly Bean"
},
{
"api":19,
"link":"<a href='/about/versions/android-4.4.html'>4.4</a>",
"codename":"KitKat"
},
{
"api":20,
"link":"<a href='/about/versions/android-4.4.html'>4.4W</a>",
"codename":"KitKat for Wear"
},
{
"api":21,
"link":"<a href='/about/versions/android-5.0.html'>5.0</a>",
"codename":"Lollipop"
}
];
$(document).ready(function(){
// for each set of data (each month)
$.each(VERSION_DATA, function(i, set) {
// set up wrapper divs
var $div = $('<div class="chart"'
+ ((i == 0) ? ' style="display:block"' : '')
+ ' >');
var $divtable = $('<div class="col-5" style="margin-left:0">');
var $divchart = $('<div class="col-8" style="margin-right:0">');
// set up a new table
var $table = $("<table>");
var $trh = $("<tr><th>Version</th>"
+ "<th>Codename</th>"
+ "<th>API</th>"
+ "<th>Distribution</th></tr>");
$table.append($trh);
// loop each data set (each api level represented in stats)
$.each(set.data, function(i, data) {
// check if we need to rowspan the codename
var rowspan = 1;
// must not be first row
if (i > 0) {
// if this row's codename is the same as previous row codename
if (data.name == set.data[i-1].name) {
rowspan = 0;
// otherwise, as long as this is not the last row
} else if (i < (set.data.length - 1)) {
// increment rowspan for each subsequent row w/ same codename
while (data.name == set.data[i+rowspan].name) {
rowspan++;
// unless we've reached the last row
if ((i + rowspan) >= set.data.length) break;
}
}
}
// create table row and get corresponding version info from VERSION_NAMES
var $tr = $("<tr>");
$tr.append("<td>" + VERSION_NAMES[data.api].link + "</td>");
if (rowspan > 0) {
$tr.append("<td rowspan='" + rowspan + "'>" + VERSION_NAMES[data.api].codename + "</td>");
}
$tr.append("<td>" + data.api + "</td>");
$tr.append("<td>" + data.perc + "%</td>");
$table.append($tr);
});
// create chart image
var $chart = $('<img style="margin-left:30px" alt="" src="' + set.chart + '" />');
// stack up and insert the elements
$divtable.append($table);
$divchart.append($chart);
$div.append($divtable).append($divchart);
$("#version-chart").append($div);
});
var SCREEN_SIZES = ["Small","Normal","Large","Xlarge"];
var SCREEN_DENSITIES = ["ldpi","mdpi","tvdpi","hdpi","xhdpi","xxhdpi"];
// for each set of screens data (each month)
$.each(SCREEN_DATA, function(i, set) {
// set up wrapper divs
var $div = $('<div class="screens-chart"'
+ ((i == 0) ? ' style="display:block"' : '')
+ ' >');
// set up a new table
var $table = $("<table>");
var $trh = $("<tr><th></th></tr>");
$.each(SCREEN_DENSITIES, function(i, density) {
$trh.append("<th scope='col'>" + density + "</th>");
});
$trh.append("<th scope='col' class='total'>Total</th>");
$table.append($trh);
// array to hold totals for each density
var densityTotals = new Array(SCREEN_DENSITIES.length);
$.each(densityTotals, function(i, total) {
densityTotals[i] = 0; // make them all zero to start
});
// loop through each screen size
$.each(SCREEN_SIZES, function(i, size) {
// if there are any devices of this size
if (typeof set.data[size] != "undefined") {
// create table row and insert data
var $tr = $("<tr>");
$tr.append("<th scope='row'>" + size + "</th>");
// variable to sum all densities for this size
var total = 0;
// loop through each density
$.each(SCREEN_DENSITIES, function(i, density) {
var num = typeof set.data[size][density] != "undefined" ? set.data[size][density] : 0;
$tr.append("<td>" + (num != 0 ? num + "%" : "") + "</td>");
total += parseFloat(num);
densityTotals[i] += parseFloat(num);
})
$tr.append("<td class='total'>" + total.toFixed(1) + "%</td>");
$table.append($tr);
}
});
// create row of totals for each density
var $tr = $("<tr><th class='total'>Total</th></tr>");
$.each(densityTotals, function(i, total) {
$tr.append("<td class='total'>" + total.toFixed(1) + "%</td>");
});
$table.append($tr);
// create charts
var $sizechart = $('<img style="float:left;width:380px" alt="" src="'
+ set.layoutchart + '" />');
var $densitychart = $('<img style="float:left;width:380px" alt="" src="'
+ set.densitychart + '" />');
// stack up and insert the elements
$div.append($table).append($sizechart).append($densitychart);
$("#screens-chart").append($div);
});
});
function changeVersionDate() {
var date = $('#date-versions option:selected').val();
$(".chart").hide();
$(".chart."+date+"").show();
}
function changeScreensVersionDate() {
var date = $('#date-screens option:selected').val();
$(".screens-chart").hide();
$(".screens-chart."+date+"").show();
}
</script>
|