diff --git a/build.gradle b/build.gradle
index ee5b7e6cde52a2f39e7ccf8106a90eb3bbb42898..411f8e6479580ccae89e31a47789709b44aedee9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,8 +24,8 @@ android {
     useLibrary 'android.test.mock'
 
     defaultConfig {
-        minSdkVersion 18
-        targetSdkVersion 23
+        minSdkVersion 21
+        targetSdkVersion 28
         versionName "1.0"
 
         applicationId 'com.android.inputmethod.latin'
diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index 2d0dc4afb5a7d0be25a2b45c8495eb8e9aa95ad9..79d337310a72c18835b255cbce2f93387f39fe97 100644
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -19,7 +19,7 @@
         package="com.android.inputmethod.latin"
         android:versionCode="28">
 
-    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
+    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index aa75ffbd604e4456e9554dc732a83bc50bd3643a..125aa10527a859af918abf2e004253922e29d77e 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.inputmethod.latin.tests"
     android:versionCode="28">
 
-    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
+    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
 
     <uses-permission android:name="android.permission.READ_CONTACTS" />