title: INSTALL_FAILED_OLDER_SDK when installing apk
body: <p>i'm trying to test a project in my phone android 2.3.6 and i get the error message: INSTALL_FAILED_OLDER_SDK </p>
  
  <p>the app is about drawing the route between two points;</p>
  
  <p>there is my code:
  the xml file:</p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  tools:context=".MainActivity" &gt;
  
  &lt;fragment
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      class="com.google.android.gms.maps.SupportMapFragment" /&gt;
  </code></pre>
  
  <p> </p>
  
  <p>the java files:</p>
  
  <pre><code>            package com.example.getroutexy2;
  
          import java.util.ArrayList;
          import java.util.List;
  
          import org.w3c.dom.Document;
  
          import com.google.android.gms.maps.CameraUpdateFactory;
          import com.google.android.gms.maps.GoogleMap;
          import com.google.android.gms.maps.SupportMapFragment;
          import com.google.android.gms.maps.model.LatLng;
          import com.google.android.gms.maps.model.MarkerOptions;
          import com.google.android.gms.maps.model.PolylineOptions;
          import com.google.android.maps.GeoPoint;
          import com.google.android.maps.Overlay;
  
          import android.app.ProgressDialog;
          import android.graphics.Color;
          import android.graphics.drawable.Drawable;
          import android.location.Location;
          import android.location.LocationManager;
          import android.os.AsyncTask;
          import android.os.Bundle;
          import android.support.v4.app.FragmentActivity;
          import android.view.Menu;
  
          public class MainActivity extends FragmentActivity {
  
              List&lt;Overlay&gt; mapOverlays;
              GeoPoint point1, point2;
              LocationManager locManager;
              Drawable drawable;
              Document document;
              GMapV2GetRouteDirection v2GetRouteDirection;
              LatLng fromPosition;
              LatLng toPosition;
              GoogleMap mGoogleMap;
              MarkerOptions markerOptions;
              Location location ;
  
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
  
                  v2GetRouteDirection = new GMapV2GetRouteDirection();
                  SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
                    mGoogleMap = supportMapFragment.getMap();
  
                    // Enabling MyLocation in Google Map
                    mGoogleMap.setMyLocationEnabled(true);
                    mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
                    mGoogleMap.getUiSettings().setCompassEnabled(true);
                    mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
                    mGoogleMap.getUiSettings().setAllGesturesEnabled(true);
                    mGoogleMap.setTrafficEnabled(true);
                    mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12));
                    markerOptions = new MarkerOptions();
                    fromPosition = new LatLng(11.663837, 78.147297);
                    toPosition = new LatLng(11.723512, 78.466287);
                    GetRouteTask getRoute = new GetRouteTask();
                    getRoute.execute();
              }
  
              private class GetRouteTask extends AsyncTask&lt;String, Void, String&gt; {
  
                  private ProgressDialog Dialog;
                  String response = "";
                  @Override
                  protected void onPreExecute() {
                        Dialog = new ProgressDialog(MainActivity.this);
                        Dialog.setMessage("Loading route...");
                        Dialog.show();
                  }
  
                  @Override
                  protected String doInBackground(String... urls) {
                        //Get All Route values
                              document = v2GetRouteDirection.getDocument(fromPosition, toPosition, GMapV2GetRouteDirection.MODE_DRIVING);
                              response = "Success";
                        return response;
  
                  }
  
                  @Override
                  protected void onPostExecute(String result) {
                        mGoogleMap.clear();
                        if(response.equalsIgnoreCase("Success")){
                        ArrayList&lt;LatLng&gt; directionPoint = v2GetRouteDirection.getDirection(document);
                        PolylineOptions rectLine = new PolylineOptions().width(10).color(
                                    Color.RED);
  
                        for (int i = 0; i &lt; directionPoint.size(); i++) {
                              rectLine.add(directionPoint.get(i));
                        }
                        // Adding route on the map
                        mGoogleMap.addPolyline(rectLine);
                        markerOptions.position(toPosition);
                        markerOptions.draggable(true);
                        mGoogleMap.addMarker(markerOptions);
  
                        }
  
                        Dialog.dismiss();
                  }
            }
            @Override
            protected void onStop() {
                  super.onStop();
                  finish();
            }
  
          }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>            package com.example.getroutexy2;
  
          import java.io.InputStream;
          import java.util.ArrayList;
  
          import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
  
          import org.apache.http.HttpResponse;
          import org.apache.http.client.HttpClient;
          import org.apache.http.client.methods.HttpPost;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.apache.http.protocol.BasicHttpContext;
          import org.apache.http.protocol.HttpContext;
          import org.w3c.dom.Document;
          import org.w3c.dom.Node;
          import org.w3c.dom.NodeList;
  
          import android.util.Log;
  
          import com.google.android.gms.maps.model.LatLng;
  
          public class GMapV2GetRouteDirection {
  
              public final static String MODE_DRIVING = "driving";
              public final static String MODE_WALKING = "walking";
  
              public GMapV2GetRouteDirection() { }
  
              public Document getDocument(LatLng start, LatLng end, String mode) {
                  String url = "http://maps.googleapis.com/maps/api/directions/xml?"
                          + "origin=" + start.latitude + "," + start.longitude 
                          + "&amp;destination=" + end.latitude + "," + end.longitude
                          + "&amp;sensor=false&amp;units=metric&amp;mode=driving";
  
                  try {
                      HttpClient httpClient = new DefaultHttpClient();
                      HttpContext localContext = new BasicHttpContext();
                      HttpPost httpPost = new HttpPost(url);
                      HttpResponse response = httpClient.execute(httpPost, localContext);
                      InputStream in = response.getEntity().getContent();
                      DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                      Document doc = builder.parse(in);
                      return doc;
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  return null;
              }
  
              public String getDurationText (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("duration");
                  Node node1 = nl1.item(0);
                  NodeList nl2 = node1.getChildNodes();
                  Node node2 = nl2.item(getNodeIndex(nl2, "text"));
                  Log.i("DurationText", node2.getTextContent());
                  return node2.getTextContent();
              }
  
              public int getDurationValue (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("duration");
                  Node node1 = nl1.item(0);
                  NodeList nl2 = node1.getChildNodes();
                  Node node2 = nl2.item(getNodeIndex(nl2, "value"));
                  Log.i("DurationValue", node2.getTextContent());
                  return Integer.parseInt(node2.getTextContent());
              }
  
              public String getDistanceText (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("distance");
                  Node node1 = nl1.item(0);
                  NodeList nl2 = node1.getChildNodes();
                  Node node2 = nl2.item(getNodeIndex(nl2, "text"));
                  Log.i("DistanceText", node2.getTextContent());
                  return node2.getTextContent();
              }
  
              public int getDistanceValue (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("distance");
                  Node node1 = nl1.item(0);
                  NodeList nl2 = node1.getChildNodes();
                  Node node2 = nl2.item(getNodeIndex(nl2, "value"));
                  Log.i("DistanceValue", node2.getTextContent());
                  return Integer.parseInt(node2.getTextContent());
              }
  
              public String getStartAddress (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("start_address");
                  Node node1 = nl1.item(0);
                  Log.i("StartAddress", node1.getTextContent());
                  return node1.getTextContent();
              }
  
              public String getEndAddress (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("end_address");
                  Node node1 = nl1.item(0);
                  Log.i("StartAddress", node1.getTextContent());
                  return node1.getTextContent();
              }
  
              public String getCopyRights (Document doc) {
                  NodeList nl1 = doc.getElementsByTagName("copyrights");
                  Node node1 = nl1.item(0);
                  Log.i("CopyRights", node1.getTextContent());
                  return node1.getTextContent();
              }
  
              public ArrayList&lt;LatLng&gt; getDirection (Document doc) {
                  NodeList nl1, nl2, nl3;
                  ArrayList&lt;LatLng&gt; listGeopoints = new ArrayList&lt;LatLng&gt;();
                  nl1 = doc.getElementsByTagName("step");
                  if (nl1.getLength() &gt; 0) {
                      for (int i = 0; i &lt; nl1.getLength(); i++) {
                          Node node1 = nl1.item(i);
                          nl2 = node1.getChildNodes();
  
                          Node locationNode = nl2.item(getNodeIndex(nl2, "start_location"));
                          nl3 = locationNode.getChildNodes();
                          Node latNode = nl3.item(getNodeIndex(nl3, "lat"));
                          double lat = Double.parseDouble(latNode.getTextContent());
                          Node lngNode = nl3.item(getNodeIndex(nl3, "lng"));
                          double lng = Double.parseDouble(lngNode.getTextContent());
                          listGeopoints.add(new LatLng(lat, lng));
  
                          locationNode = nl2.item(getNodeIndex(nl2, "polyline"));
                          nl3 = locationNode.getChildNodes();
                          latNode = nl3.item(getNodeIndex(nl3, "points"));
                          ArrayList&lt;LatLng&gt; arr = decodePoly(latNode.getTextContent());
                          for(int j = 0 ; j &lt; arr.size() ; j++) {
                              listGeopoints.add(new LatLng(arr.get(j).latitude, arr.get(j).longitude));
                          }
  
                          locationNode = nl2.item(getNodeIndex(nl2, "end_location"));
                          nl3 = locationNode.getChildNodes();
                          latNode = nl3.item(getNodeIndex(nl3, "lat"));
                          lat = Double.parseDouble(latNode.getTextContent());
                          lngNode = nl3.item(getNodeIndex(nl3, "lng"));
                          lng = Double.parseDouble(lngNode.getTextContent());
                          listGeopoints.add(new LatLng(lat, lng));
                      }
                  }
  
                  return listGeopoints;
              }
  
              private int getNodeIndex(NodeList nl, String nodename) {
                  for(int i = 0 ; i &lt; nl.getLength() ; i++) {
                      if(nl.item(i).getNodeName().equals(nodename))
                          return i;
                  }
                  return -1;
              }
  
              private ArrayList&lt;LatLng&gt; decodePoly(String encoded) {
                  ArrayList&lt;LatLng&gt; poly = new ArrayList&lt;LatLng&gt;();
                  int index = 0, len = encoded.length();
                  int lat = 0, lng = 0;
                  while (index &lt; len) {
                      int b, shift = 0, result = 0;
                      do {
                          b = encoded.charAt(index++) - 63;
                          result |= (b &amp; 0x1f) &lt;&lt; shift;
                          shift += 5;
                      } while (b &gt;= 0x20);
                      int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
                      lat += dlat;
                      shift = 0;
                      result = 0;
                      do {
                          b = encoded.charAt(index++) - 63;
                          result |= (b &amp; 0x1f) &lt;&lt; shift;
                          shift += 5;
                      } while (b &gt;= 0x20);
                      int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
                      lng += dlng;
  
                      LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5);
                      poly.add(position);
                  }
                  return poly;
              }
  
          }
  </code></pre>
  
  <p>finally the manifest file: </p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.getroutexy2"
       android:versionCode="1"
       android:versionName="1.0" &gt;
  
      &lt;uses-sdk
      android:minSdkVersion="7"
      android:targetSdkVersion="17" /&gt;
  
  &lt;permission
      android:name="com.example.getroutexy2.permission.MAPS_RECEIVE"
      android:protectionLevel="signature" /&gt;
  
  &lt;uses-feature
      android:glEsVersion="0x00020000"
      android:required="true" /&gt;
  
  &lt;uses-permission android:name="com.example.getroutexy2.permission.MAPS_RECEIVE" /&gt;
  &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  &lt;uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
  
  &lt;application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" &gt;
      &lt;activity
          android:name="com.example.getroutexy2.MainActivity"
          android:label="@string/app_name" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  
      &lt;meta-data
          android:name="com.google.android.maps.v2.API_KEY"
          android:value="AIzaSyCkdoZ..............." /&gt;
  
  &lt;/application&gt;
  </code></pre>
  
  <p></p>
  
  <p>thanks, for the key i'm sure it's a good one</p>