|| target.getVersion().getApiLevel() > latestTarget.getVersion().getApiLevel() )
private String getMainLocaleViaProperties(Device device) { Optional<String> locale = Optional.empty(); int apiLevel = device.getVersion().getApiLevel(); if (apiLevel < Versions.ANDROID_M_API_VERSION) { Optional<String> language = device.getProperty(LEGACY_LANGUAGE_PROPERTY); Optional<String> region = device.getProperty(LEGACY_REGION_PROPERTY); if (language.isPresent() && region.isPresent()) { locale = Optional.of(language.get() + "-" + region.get()); } } else { locale = device.getProperty(LOCALE_PROPERTY_SYS); if (!locale.isPresent()) { locale = device.getProperty(LOCALE_PROPERTY_PRODUCT); } } return locale.orElseGet( () -> { System.err.println("Warning: Can't detect device locale, will use 'en-US'."); return "en-US"; }); }
@Override public void installApks(ImmutableList<Path> apks, InstallOptions installOptions) { ImmutableList<File> apkFiles = apks.stream().map(Path::toFile).collect(toImmutableList()); try { if (getVersion() .isGreaterOrEqualThan(AndroidVersion.ALLOW_SPLIT_APK_INSTALLATION.getApiLevel())) { device.installPackages( apkFiles, installOptions.getAllowReinstall(), installOptions.getAllowDowngrade() ? ImmutableList.of("-d") : ImmutableList.of(), installOptions.getTimeout().toMillis(), TimeUnit.MILLISECONDS); } else { device.installPackage( Iterables.getOnlyElement(apkFiles).toString(), installOptions.getAllowReinstall(), installOptions.getAllowDowngrade() ? "-d" : null); } } catch (InstallException e) { throw InstallationException.builder() .withCause(e) .withMessage("Installation of the app failed.") .build(); } } }
int deviceSdkVersion = device.getVersion().getApiLevel(); checkState(deviceSdkVersion > 1, "Error retrieving device SDK version. Please try again."); int deviceDensity = device.getDensity();
private boolean isPostN() { final AndroidVersion hash = AndroidTargetHash.getVersionFromHash(compileSdkVersion); return hash != null && hash.getApiLevel() >= 24; } }
/** * Returns the minimum API <b>level</b> requested by the manifest, or -1 if not * specified. Use {@link #getMinSdkVersion()} to get a full version if you need * to check if the platform is a preview platform etc. * * @return the minimum API level or -1 if unknown */ public int getMinSdk() { AndroidVersion version = getMinSdkVersion(); return version == AndroidVersion.DEFAULT ? -1 : version.getApiLevel(); }
/** * Returns the target API <b>level</b> specified by the manifest, or -1 if not * specified. Use {@link #getTargetSdkVersion()} to get a full version if you need * to check if the platform is a preview platform etc. * * @return the target API level or -1 if unknown */ public int getTargetSdk() { AndroidVersion version = getTargetSdkVersion(); return version == AndroidVersion.DEFAULT ? -1 : version.getApiLevel(); }
private boolean isMarshmallowOrMore(@Nonnull IDevice device){ return device.getVersion().getApiLevel() >= 23; }
/** * Returns a description of this package that is suitable for a list display. * <p/> */ private static String createListDescription(String listDisplay, AndroidVersion version, boolean obsolete) { if (!listDisplay.isEmpty()) { return String.format("%1$s%2$s", listDisplay, obsolete ? " (Obsolete)" : ""); } if (version.isPreview()) { return String .format("Sources for Android '%1$s' Preview SDK%2$s", version.getCodename(), obsolete ? " (Obsolete)" : ""); } else { return String.format("Sources for Android SDK%2$s", version.getApiLevel(), obsolete ? " (Obsolete)" : ""); } }
@Nullable @Override public File getDefaultSkin() { // TODO: validate choice to ignore property in sdk.properties // only one skin? easy. if (mSkins.size() == 1) { return mSkins.iterator().next(); } String skinName; // otherwise try to find a good default. if (getVersion().getApiLevel() >= 11 && getVersion().getApiLevel() <= 13) { skinName = "WXGA"; } else if (getVersion().getApiLevel() >= 4) { // at this time, this is the default skin for all older platforms that had 2+ skins. skinName = "WVGA800"; } else { skinName = "HVGA"; // this is for 1.5 and earlier. } return new File(getFile(IAndroidTarget.SKINS), skinName); }
private static void validateArguments(@NonNull IDevice device, @NonNull List<File> apks) { if (apks.isEmpty()) { throw new IllegalArgumentException( "List of APKs is empty: the main APK must be specified."); } for (File apk: apks) { if (!apk.isFile()) { throw new IllegalArgumentException("Invalid File: " + apk.getPath()); } } int apiWithSplitApk = AndroidVersion.ALLOW_SPLIT_APK_INSTALLATION.getApiLevel(); if (!device.getVersion().isGreaterOrEqualThan(apiWithSplitApk)) { throw new IllegalArgumentException( "Cannot install split APKs on device with API level < " + apiWithSplitApk); } }
@Override public int getBuildSdk() { String compileTarget = mProject.getCompileTarget(); AndroidVersion version = AndroidTargetHash.getPlatformVersion(compileTarget); if (version != null) { return version.getApiLevel(); } return super.getBuildSdk(); }
@Override public int getBuildSdk() { if (mocker != null) { String compileTarget = mocker.getProject().getCompileTarget(); //noinspection ConstantConditions if (compileTarget != null && !compileTarget.isEmpty()) { AndroidVersion version = AndroidTargetHash.getPlatformVersion(compileTarget); if (version != null) { return version.getApiLevel(); } } } return super.getBuildSdk(); }
public static ApiVersion clone(@NonNull AndroidVersion androidVersion) { return new ApiVersionImpl(androidVersion.getApiLevel(), androidVersion.getCodename()); }
public static ApiVersion clone(@NonNull AndroidVersion androidVersion) { return new ApiVersionImpl(androidVersion.getApiLevel(), androidVersion.getCodename()); }
/** * Returns the codename for a given {@link AndroidVersion}'s API level. */ @Nullable public static String getAndroidVersionCodeName(@NonNull AndroidVersion version) { String codeName = version.getCodename(); if (codeName == null) { codeName = getCodeName(version.getApiLevel()); } return codeName; }
@Override public boolean canRunOn(@NonNull IAndroidTarget target) { if (getVersion().isPreview()) { return target.getVersion().equals(getVersion()); } return target.getVersion().getApiLevel() > getVersion().getApiLevel(); }
private SplitApkInstaller(@NonNull IDevice device, @NonNull List<File> apks, @NonNull String options) { mDevice = device; mApks = apks; mOptions = options; // Use "cmd package" when possible to avoid starting up a new VM mPrefix = mDevice.getVersion().isGreaterOrEqualThan( AndroidVersion.BINDER_CMD_AVAILABLE.getApiLevel()) ? "cmd package" : "pm"; }
/** * Returns first target found with API level no lower than the minimum provided. * @param minimumApiLevel minimum api level desired for target. * @param progress progress indicator. * @return a matching {@link IAndroidTarget} or null */ @Nullable public IAndroidTarget getTargetOfAtLeastApiLevel( int minimumApiLevel, @NonNull ProgressIndicator progress) { for (IAndroidTarget target : getTargets(progress)) { if (target.getVersion().getApiLevel() >= minimumApiLevel) { return target; } } return null; }
/** * Returns the highest known API level. * * @return the highest known API level */ public int getHighestKnownApiLevel() { int max = SdkVersionInfo.HIGHEST_KNOWN_STABLE_API; for (IAndroidTarget target : getTargets()) { if (target.isPlatform()) { int api = target.getVersion().getApiLevel(); if (api > max && !target.getVersion().isPreview()) { max = api; } } } return max; }