/** * Returns the patching policy following the {@link AndroidProject#PROPERTY_BUILD_API} value * passed by Android Studio. * * @param androidVersion the android version of the target device * @param useAapt2OrAbove use aapt2 or above to process resources. * @return a {@link WormholePatchingPolicy} instance. */ @NonNull public static WormholePatchingPolicy getPatchingPolicy( AndroidVersion androidVersion, boolean useAapt2OrAbove, boolean createSeparateApkForResources) { if (androidVersion.getFeatureLevel() < AndroidVersion.ART_RUNTIME.getFeatureLevel()) { return PRE_LOLLIPOP; } else { return androidVersion.getFeatureLevel() >= AndroidVersion.VersionCodes.O && useAapt2OrAbove && createSeparateApkForResources ? MULTI_APK_SEPARATE_RESOURCES : MULTI_APK; } }
protected int getMinSdk(Context context) { if (mMinApi == -1) { AndroidVersion minSdkVersion = context.getMainProject().getMinSdkVersion(); mMinApi = minSdkVersion.getFeatureLevel(); } return mMinApi; }
private static boolean deviceApiLevelInRange(@Nonnull IDevice device, @Nonnull Permission permission) { int featureLevel = device.getVersion().getFeatureLevel(); return permission.getMaxSdkVersion() >= featureLevel && permission.getMinSdkVersion() <= featureLevel; }
/** * Returns the feature level for the target device. * * For preview versions that is the last stable version + 1. * * @param project the project being built * @return a the feature level for the targeted device, following the * {@link AndroidProject#PROPERTY_BUILD_API} value passed by Android Studio. */ public static int getTargetFeatureLevel(@NonNull Project project) { String featureLevelString = getString(project, AndroidProject.PROPERTY_BUILD_API); if (featureLevelString == null) { return AndroidVersion.DEFAULT.getFeatureLevel(); } try { return Integer.parseInt(featureLevelString); } catch (NumberFormatException ignore) { project.getLogger().warn("Wrong build target version passed ", ignore); return AndroidVersion.DEFAULT.getFeatureLevel(); } }
/** * Returns a user-friendly description of this version, like "Android 5.1 (Lollipop)", * or "Android 6.X (N) Preview". */ public static String getVersionWithCodename(AndroidVersion version) { StringBuilder result = new StringBuilder(); result.append("Android "); if (version.isPreview()) { result.append(version.getCodename()); result.append(" Preview"); } else { String versionString = getVersionString(version.getFeatureLevel()); result.append(versionString == null ? "API " + version.getApiString() : versionString); String codeName = version.getCodename(); if (codeName == null) { codeName = getCodeName(version.getFeatureLevel()); } if (codeName != null) { result.append(" ("); result.append(codeName); result.append(")"); } } return result.toString(); } }
/** * Returns false if this permission does not apply given the specified minimum and target * sdk versions * * @param available the permission holder which also knows the min and target versions * @return true if this permission requirement applies for the given versions */ protected boolean appliesTo(@NonNull PermissionHolder available) { initializeRange(); if (firstApi != -1) { AndroidVersion minSdkVersion = available.getMinSdkVersion(); if (minSdkVersion.getFeatureLevel() > lastApi) { return false; } AndroidVersion targetSdkVersion = available.getTargetSdkVersion(); if (targetSdkVersion.getFeatureLevel() < firstApi) { return false; } } return true; }
@Override public int getBuildSdk() { String compileTarget = mProject.getCompileTarget(); AndroidVersion version = AndroidTargetHash.getPlatformVersion(compileTarget); if (version != null) { return version.getFeatureLevel(); } return super.getBuildSdk(); }
@Nullable String coldswapMode) { if (featureLevel < AndroidVersion.ART_RUNTIME.getFeatureLevel()) { return PRE_LOLLIPOP; } else {
&& element.getParentNode().getParentNode() != null && TAG_RECEIVER.equals(element.getParentNode().getParentNode().getNodeName()) && context.getMainProject().getTargetSdkVersion().getFeatureLevel() >= 24) { String message = "Declaring a broadcastreceiver for " + "`android.net.conn.CONNECTIVITY_CHANGE` is deprecated for apps targeting " && context.getMainProject().getTargetSdkVersion().getFeatureLevel() >= 23) { String message = getBatteryOptimizationsErrorMessage(); context.report(ISSUE, element, context.getValueLocation(attr), message);
protected int getMinSdk(Context context) { if (mMinApi == -1) { AndroidVersion minSdkVersion = context.getMainProject().getMinSdkVersion(); mMinApi = minSdkVersion.getFeatureLevel(); if (mMinApi == 1 && !context.getMainProject().isAndroidProject()) { // Don't flag API checks in non-Android projects mMinApi = Integer.MAX_VALUE; } } return mMinApi; }
private static boolean targetDeviceSupportsInstantRun( @NonNull GradleVariantConfiguration config, @NonNull Project project) { if (config.isLegacyMultiDexMode()) { // We don't support legacy multi-dex on Dalvik. return AndroidGradleOptions.getTargetFeatureLevel(project) >= AndroidVersion.ART_RUNTIME.getFeatureLevel(); } return true; }
if (project.getMinSdkVersion().getFeatureLevel() >= 21) { return;
/** * Retrieve the newest supported version if it is not the specified version is not supported. * * An older NDK may not support the specified compiledSdkVersion. In that case, determine what * is the newest supported version and modify compileSdkVersion. */ @Override @Nullable public String findLatestPlatformVersion(@NonNull String targetPlatformString) { AndroidVersion androidVersion = AndroidTargetHash.getVersionFromHash(targetPlatformString); int targetVersion; if (androidVersion == null) { Logging.getLogger(this.getClass()).warn( "Unable to parse NDK platform version. Try to find the latest instead."); targetVersion = Integer.MAX_VALUE; } else { targetVersion = androidVersion.getFeatureLevel(); } targetVersion = findTargetPlatformVersionOrLower(targetVersion); if (targetVersion == 0) { return null; } return "android-" + targetVersion; }
private static String getDisplayNameInternal(IPkgDesc legacy) { String result = legacy.getListDescription(); if (result != null) { return result; } if (legacy.getType() == PkgType.PKG_PLATFORM) { AndroidVersion androidVersion = legacy.getAndroidVersion(); assert androidVersion != null; return SdkVersionInfo.getAndroidName(androidVersion.getFeatureLevel()); } result = legacy.getListDescription(); if (!result.isEmpty()) { return result; } result = legacy.getName() != null ? legacy.getName().getDisplay() : ""; if (!result.isEmpty()) { return result; } return legacy.getInstallId(); }
@Override public void visitReference(@NonNull JavaContext context, @Nullable JavaElementVisitor visitor, @NonNull PsiJavaCodeReferenceElement reference, @NonNull PsiElement resolved) { if (resolved instanceof PsiField && context.getEvaluator().isMemberInSubClassOf((PsiField)resolved, "android.provider.Settings", false) && context.getMainProject().getTargetSdkVersion().getFeatureLevel() >= 23) { String message = getBatteryOptimizationsErrorMessage(); context.report(ISSUE, reference, context.getNameLocation(reference), message); } }
boolean jackEnabled) { final AndroidVersion hash = AndroidTargetHash.getVersionFromHash(compileSdkVersion); Integer compileSdkLevel = (hash == null ? null : hash.getFeatureLevel());
AndroidGradleOptions.getTargetFeatureLevel(getGlobalScope().getProject()); if (androidBuilderTarget.getVersion().getFeatureLevel() == targetDeviceFeatureLevel) {
context.getMainProject().getTargetSdkVersion().getFeatureLevel() >= 23 && requirement.getLastApplicableApi() >= 23) {
context.getMainProject().getTargetSdkVersion().getFeatureLevel() >= 23) {