Вы должны иметь оператор return, который выполняется, если ваш оператор if не соответствует требованиям.Прямо сейчас вы возвращаете что-то только в том случае, если SDK больше, чем Build.VERSION_CODES.M.
Вы можете поместить оператор return после всей попытки и перехвата, потому что если вы вернетесь в попытке, он выйдет изметод.Это означает, что другой возврат выполняется только в том случае, если сборочный SDK не соответствует требованиям.
private SecretKey createKey() {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
keyGenerator.init(new KeyGenParameterSpec.Builder("Key", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setUserAuthenticationRequired(true) //burayı kaldırırsan screen locka gerek kalmaz
.setUserAuthenticationValidityDurationSeconds(5)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build());
return keyGenerator.generateKey();
}
} catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
throw new RuntimeException("Failed to create a symmetric key", e);
}
// Return here...
}