diff --git a/cerbero/bootstrap/android.py b/cerbero/bootstrap/android.py
index bb49f6f..4614848 100644
--- a/cerbero/bootstrap/android.py
+++ b/cerbero/bootstrap/android.py
@@ -31,14 +31,16 @@ class AndroidBootstrapper (BootstrapperBase):
 
     def start(self):
         dest = self.config.toolchain_prefix
-        ndk_tar = self.NDK_TAR % (self.config.platform, self.config.arch)
-        tar = os.path.join(dest, ndk_tar)
-        try:
-            os.makedirs(dest)
-        except:
-            pass
-        shell.download("%s/%s" % (self.NDK_BASE_URL, ndk_tar), tar)
+
+        # Install the NDK only in the case it is not already installed
         if not os.path.exists(os.path.join(dest, "README.TXT")):
+            ndk_tar = self.NDK_TAR % (self.config.platform, self.config.arch)
+            tar = os.path.join(dest, ndk_tar)
+            try:
+                os.makedirs(dest)
+            except:
+                pass
+            shell.download("%s/%s" % (self.NDK_BASE_URL, ndk_tar), tar)
             try:
                 shell.call('chmod +x ./%s' % ndk_tar, dest)
                 shell.call('./%s' % ndk_tar, dest)
diff --git a/cerbero/config.py b/cerbero/config.py
index a3cb55f..1e0b8a2 100644
--- a/cerbero/config.py
+++ b/cerbero/config.py
@@ -92,7 +92,7 @@ class Config (object):
                    'ios_platform', 'extra_build_tools',
                    'distro_packages_install', 'interactive',
                    'target_arch_flags', 'sysroot', 'isysroot',
-                   'extra_lib_path']
+                   'extra_lib_path', 'target_android_distro_version']
 
     def __init__(self):
         self._check_uninstalled()
diff --git a/cerbero/enums.py b/cerbero/enums.py
index 8f5abee..ef237a9 100644
--- a/cerbero/enums.py
+++ b/cerbero/enums.py
@@ -100,11 +100,25 @@ class DistroVersion:
     IOS_8_1 = 'ios_8_1'
     IOS_8_2 = 'ios_8_2'
     IOS_8_3 = 'ios_8_3'
-    ANDROID_GINGERBREAD = 'android_gingerbread'  # API Level 9
-    ANDROID_ICE_CREAM_SANDWICH = 'android_ice_cream_sandwich'  # API Level 14
-    ANDROID_JELLY_BEAN = 'android_jelly_bean'  # API Level 16
+    ANDROID_CUPCAKE = 'android_cupcake'  # API Level 3
+    ANDROID_DONUT = 'android_donut'  # API Level 4
+    ANDROID_ECLAIR_2_0 = 'android_eclair_2_0'  # API Level 5
+    ANDROID_ECLAIR_2_0_1 = 'android_eclair_2_0_1'  # API Level 6
+    ANDROID_ECLAIR_2_1 = 'android_eclair_2_1'  # API Level 7
+    ANDROID_FROYO = 'android_froyo'  # API Level 8
+    ANDROID_GINGERBREAD_2_3_2 = 'android_gingerbread_2_3_2'  # API Level 9
+    ANDROID_GINGERBREAD_2_3_7 = 'android_gingerbread_2_3_7'  # API Level 10
+    ANDROID_HONEYCOMB_3_0 = 'android_honeycomb_3_0'  # API Level 11
+    ANDROID_HONEYCOMB_3_1 = 'android_honeycomb_3_1'  # API Level 12
+    ANDROID_HONEYCOMB_3_2 = 'android_honeycomb_3_2'  # API Level 13
+    ANDROID_ICE_CREAM_SANDWICH_4_0_2 = 'android_ice_cream_sandwich_4_0_2'  # API Level 14
+    ANDROID_ICE_CREAM_SANDWICH_4_0_4 = 'android_ice_cream_sandwich_4_0_4'  # API Level 15
+    ANDROID_JELLY_BEAN_4_1 = 'android_jelly_bean_4_1'  # API Level 16
+    ANDROID_JELLY_BEAN_4_2 = 'android_jelly_bean_4_2'  # API Level 17
+    ANDROID_JELLY_BEAN_4_3 = 'android_jelly_bean_4_3'  # API Level 18
     ANDROID_KITKAT = 'android_kitkat'  # API Level 19
-    ANDROID_LOLLIPOP = 'android_lollipop' # API Level 21
+    ANDROID_LOLLIPOP_5_0 = 'android_lollipop_5_0'  # API Level 20
+    ANDROID_LOLLIPOP_5_1 = 'android_lollipop_5_1'  # API Level 21
     NONE_UCLIBC = 'none_uclibc'
     NONE_GLIBC = 'none_glibc'
 
diff --git a/config/android.config b/config/android.config
index 21ae2c8..18c5a19 100644
--- a/config/android.config
+++ b/config/android.config
@@ -83,15 +83,43 @@ else:
 if not toolchain_path:
   m.warning ("Android NDK not found")
 
-if target_distro_version == DistroVersion.ANDROID_GINGERBREAD:
+if target_distro_version == DistroVersion.ANDROID_CUPCAKE:
+    v = '3'
+elif target_distro_version == DistroVersion.ANDROID_DONUT:
+    v = '4'
+elif target_distro_version == DistroVersion.ANDROID_ECLAIR_2_0:
+    v = '5'
+elif target_distro_version == DistroVersion.ANDROID_ECLAIR_2_0_1:
+    v = '6'
+elif target_distro_version == DistroVersion.ANDROID_ECLAIR_2_1:
+    v = '7'
+elif target_distro_version == DistroVersion.ANDROID_FROYO:
+    v = '8'
+elif target_distro_version == DistroVersion.ANDROID_GINGERBREAD_2_3_2:
     v = '9'
-elif target_distro_version == DistroVersion.ANDROID_ICE_CREAM_SANDWICH:
+elif target_distro_version == DistroVersion.ANDROID_GINGERBREAD_2_3_7:
+    v = '10'
+elif target_distro_version == DistroVersion.ANDROID_HONEYCOMB_3_0:
+    v = '11'
+elif target_distro_version == DistroVersion.ANDROID_HONEYCOMB_3_1:
+    v = '12'
+elif target_distro_version == DistroVersion.ANDROID_HONEYCOMB_3_2:
+    v = '13'
+elif target_distro_version == DistroVersion.ANDROID_ICE_CREAM_SANDWICH_4_0_2:
     v = '14'
-elif target_distro_version == DistroVersion.ANDROID_JELLY_BEAN:
+elif target_distro_version == DistroVersion.ANDROID_ICE_CREAM_SANDWICH_4_0_4:
+    v = '15'
+elif target_distro_version == DistroVersion.ANDROID_JELLY_BEAN_4_1:
     v = '16'
+elif target_distro_version == DistroVersion.ANDROID_JELLY_BEAN_4_2:
+    v = '17'
+elif target_distro_version == DistroVersion.ANDROID_JELLY_BEAN_4_3:
+    v = '18'
 elif target_distro_version == DistroVersion.ANDROID_KITKAT:
     v = '19'
-elif target_distro_version == DistroVersion.ANDROID_LOLLIPOP:
+elif target_distro_version == DistroVersion.ANDROID_LOLLIPOP_5_0:
+    v = '20'
+elif target_distro_version == DistroVersion.ANDROID_LOLLIPOP_5_1:
     v = '21'
 else:
   raise FatalError("DistroVersion not supported")
diff --git a/config/cross-android-arm64.cbc b/config/cross-android-arm64.cbc
index ab90259..e7d210d 100644
--- a/config/cross-android-arm64.cbc
+++ b/config/cross-android-arm64.cbc
@@ -1,9 +1,16 @@
 import os
 from cerbero.config import Platform, Architecture, Distro, DistroVersion
+from cerbero.utils import _
+from cerbero.utils import messages as m
 
 target_platform = Platform.ANDROID
 target_distro = Distro.ANDROID
-target_distro_version = DistroVersion.ANDROID_LOLLIPOP
+target_distro_version = DistroVersion.ANDROID_LOLLIPOP_5_1
 target_arch = Architecture.ARM64
 
+# Give the ability to change from an external process the minimum Android system targeted
+if target_android_distro_version:
+    m.message(_("Minimum Android platform support specified to be %s" % target_android_distro_version))
+    target_distro_version = target_android_distro_version
+
 #variants = ['nodebug']
diff --git a/config/cross-android-armv7.cbc b/config/cross-android-armv7.cbc
index 5820edc..2fcb2c1 100644
--- a/config/cross-android-armv7.cbc
+++ b/config/cross-android-armv7.cbc
@@ -1,9 +1,16 @@
 import os
 from cerbero.config import Platform, Architecture, Distro, DistroVersion
+from cerbero.utils import _
+from cerbero.utils import messages as m
 
 target_platform = Platform.ANDROID
 target_distro = Distro.ANDROID
-target_distro_version = DistroVersion.ANDROID_GINGERBREAD
+target_distro_version = DistroVersion.ANDROID_GINGERBREAD_2_3_2
 target_arch = Architecture.ARMv7
 
+# Give the ability to change from an external process the minimum Android system targeted
+if target_android_distro_version:
+    m.message(_("Minimum Android platform support specified to be %s" % target_android_distro_version))
+    target_distro_version = target_android_distro_version
+
 #variants = ['nodebug']
diff --git a/config/cross-android-x86-64.cbc b/config/cross-android-x86-64.cbc
index 43f77af..8eb2d56 100644
--- a/config/cross-android-x86-64.cbc
+++ b/config/cross-android-x86-64.cbc
@@ -1,9 +1,16 @@
 import os
 from cerbero.config import Platform, Architecture, Distro, DistroVersion
+from cerbero.utils import _
+from cerbero.utils import messages as m
 
 target_platform = Platform.ANDROID
 target_distro = Distro.ANDROID
-target_distro_version = DistroVersion.ANDROID_LOLLIPOP
+target_distro_version = DistroVersion.ANDROID_LOLLIPOP_5_1
 target_arch = Architecture.X86_64
 
+# Give the ability to change from an external process the minimum Android system targeted
+if target_android_distro_version:
+    m.message(_("Minimum Android platform support specified to be %s" % target_android_distro_version))
+    target_distro_version = target_android_distro_version
+
 #variants = ['nodebug']
diff --git a/config/cross-android-x86.cbc b/config/cross-android-x86.cbc
index f84bac4..2580900 100644
--- a/config/cross-android-x86.cbc
+++ b/config/cross-android-x86.cbc
@@ -1,9 +1,16 @@
 import os
 from cerbero.config import Platform, Architecture, Distro, DistroVersion
+from cerbero.utils import _
+from cerbero.utils import messages as m
 
 target_platform = Platform.ANDROID
 target_distro = Distro.ANDROID
-target_distro_version = DistroVersion.ANDROID_GINGERBREAD
+target_distro_version = DistroVersion.ANDROID_GINGERBREAD_2_3_2
 target_arch = Architecture.X86
 
+# Give the ability to change from an external process the minimum Android system targeted
+if target_android_distro_version:
+    m.message(_("Minimum Android platform support specified to be %s" % target_android_distro_version))
+    target_distro_version = target_android_distro_version
+
 #variants = ['nodebug']
diff --git a/config/cross-android.cbc b/config/cross-android.cbc
index 4d72bbf..4f3e238 100644
--- a/config/cross-android.cbc
+++ b/config/cross-android.cbc
@@ -1,9 +1,16 @@
 import os
 from cerbero.config import Platform, Architecture, Distro, DistroVersion
+from cerbero.utils import _
+from cerbero.utils import messages as m
 
 target_platform = Platform.ANDROID
 target_distro = Distro.ANDROID
-target_distro_version = DistroVersion.ANDROID_GINGERBREAD
+target_distro_version = DistroVersion.ANDROID_GINGERBREAD_2_3_2
 target_arch = Architecture.ARM
 
+# Give the ability to change from an external process the minimum Android system targeted
+if target_android_distro_version:
+    m.message(_("Minimum Android platform support specified to be %s" % target_android_distro_version))
+    target_distro_version = target_android_distro_version
+
 #variants = ['nodebug']
diff --git a/recipes/openh264.recipe b/recipes/openh264.recipe
index 9bf22ea..9b34ab4 100644
--- a/recipes/openh264.recipe
+++ b/recipes/openh264.recipe
@@ -40,7 +40,7 @@ class Recipe(recipe.Recipe):
             elif self.config.target_arch == Architecture.X86_64:
                 make += ' ARCH=x86_64'
         elif self.config.target_platform == Platform.ANDROID:
-            if self.config.target_distro_version == DistroVersion.ANDROID_LOLLIPOP:
+            if self.config.target_distro_version == DistroVersion.ANDROID_LOLLIPOP_5_1:
                 make += ' OS=android TARGET=android-21 NDKLEVEL=21'
             else:
                 make += ' OS=android TARGET=android-9'
