INSTALL_FAILED_OLDER_SDK when installing apk
<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>
