为什么 API 29 中引入的代码可以在模拟器 运行 API 26 上运行?

Why is code introduced in API 29 working on an emulator running API 26?

我在一个minSdkVersion为26的项目中使用BiometricManager(在Api 29中介绍)。

令我惊讶的是,该项目正在编译 运行,我原以为这会在构建时引发错误。我错过了什么吗?这会导致发布问题吗?

Gradle:

    defaultConfig {
 
    minSdkVersion 26
    targetSdkVersion 31
    versionCode 1
    versionName "1.0"

Class:

       import androidx.biometric.BiometricManager;
       import androidx.biometric.BiometricPrompt;

      
public BiometricPromptClass(Activity activity) {
    this.context = activity.getBaseContext();
    this.activity = activity;
}

public int getDeviceBiometricStatus(){
    return getBiometricManager().canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK);
}

public boolean CheckIfCanAuthenticate() {
    if (getDeviceBiometricStatus() == BiometricManager.BIOMETRIC_SUCCESS) {
        return true;
    } else {
        failureCode = getDeviceBiometricStatus();
        return false;
    }
}

I am using BiometricManager

不,你不是……至少,不是你所链接的人。您链接到 android.hardware.biometrics.BiometricsManager。您的代码使用 androidx.biometrics.BiometricsManager。这些不一样class。 Jetpack (androidx) 版本将包含尝试优雅地支持旧设备的代码。