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