Java源码示例:com.android.sdklib.AndroidTargetHash

示例1
/**
 * Creates a new platform package descriptor.
 *
 * @param version The android version of the platform package.
 * @param revision The revision of the extra package.
 * @param minToolsRev An optional {@code min-tools-rev}.
 *                    Use {@link FullRevision#NOT_SPECIFIED} to indicate
 *                    there is no requirement.
 * @return A {@link PkgDesc} describing this platform package.
 */
@NonNull
public static Builder newPlatform(@NonNull AndroidVersion version,
                                  @NonNull MajorRevision revision,
                                  @NonNull FullRevision minToolsRev) {
    Builder p = new Builder(PkgType.PKG_PLATFORM);
    p.mAndroidVersion = version;
    p.mMajorRevision = revision;
    p.mMinToolsRev = minToolsRev;
    p.mCustomPath = new IGetPath() {
        @Override
        public String getPath(PkgDesc thisPkgDesc) {
            /** The "path" of a Platform is its Target Hash. */
            return AndroidTargetHash.getPlatformHashString(thisPkgDesc.getAndroidVersion());
        }
    };
    return p;
}
 
示例2
/**
 * Creates a new platform package descriptor.
 *
 * @param version The android version of the platform package.
 * @param revision The revision of the extra package.
 * @param minToolsRev An optional {@code min-tools-rev}.
 *                    Use {@link FullRevision#NOT_SPECIFIED} to indicate
 *                    there is no requirement.
 * @return A {@link PkgDesc} describing this platform package.
 */
@NonNull
public static Builder newPlatform(@NonNull AndroidVersion version,
                                  @NonNull MajorRevision revision,
                                  @NonNull FullRevision minToolsRev) {
    Builder p = new Builder(PkgType.PKG_PLATFORM);
    p.mAndroidVersion = version;
    p.mMajorRevision = revision;
    p.mMinToolsRev = minToolsRev;
    p.mCustomPath = new IGetPath() {
        @Override
        public String getPath(PkgDesc thisPkgDesc) {
            /** The "path" of a Platform is its Target Hash. */
            return AndroidTargetHash.getPlatformHashString(thisPkgDesc.getAndroidVersion());
        }
    };
    return p;
}
 
示例3
/**
 * Returns a target from a hash that was generated by {@link IAndroidTarget#hashString()}.
 *
 * @param hash the {@link IAndroidTarget} hash string.
 * @return The matching {@link IAndroidTarget} or null.
 */
@Nullable
public IAndroidTarget getTargetFromHashString(@Nullable String hash) {
    if (hash != null) {
        IAndroidTarget[] targets = getTargets();
        for (IAndroidTarget target : targets) {
            if (target != null && hash.equals(AndroidTargetHash.getTargetHashString(target))) {
                return target;
            }
        }
    }
    return null;
}
 
示例4
/**
 * Add-on descriptor.
 * The following attributes are mandatory:
 */
PkgDescAddon(@NonNull  PkgType type,
             @Nullable License license,
             @Nullable String listDisplay,
             @Nullable String descriptionShort,
             @Nullable String descriptionUrl,
             boolean isObsolete,
             @NonNull  MajorRevision majorRevision,
             @NonNull  AndroidVersion androidVersion,
             @NonNull  IdDisplay addonVendor,
             @NonNull  IdDisplay addonName) {
    super(type,
          license,
          listDisplay,
          descriptionShort,
          descriptionUrl,
          isObsolete,
          null,     //fullRevision
          majorRevision,
          androidVersion,
          AndroidTargetHash.getAddonHashString(addonVendor.getDisplay(),
                                               addonName.getDisplay(),
                                               androidVersion),
          null,     //tag
          addonVendor,
          null,     //minToolsRev
          null,     //minPlatformToolsRev
          null,     //customIsUpdateFor
          null);    //customPath

    mAddonName = addonName;
}
 
示例5
/**
 * Determines the java language level to use and sets it on the given task and
 * {@link CompileOptions}. The latter is to propagate the information to Studio.
 */
public static void configureLanguageLevel(
        AbstractCompile compileTask,
        final CompileOptions compileOptions,
        String compileSdkVersion) {
    final AndroidVersion hash = AndroidTargetHash.getVersionFromHash(compileSdkVersion);
    Integer compileSdkLevel = (hash == null ? null : hash.getApiLevel());

    JavaVersion javaVersionToUse;
    if (compileSdkLevel == null || (0 <= compileSdkLevel && compileSdkLevel <= 20)) {
        javaVersionToUse = JavaVersion.VERSION_1_6;
    } else {
        javaVersionToUse = JavaVersion.VERSION_1_7;
    }

    JavaVersion jdkVersion =
            JavaVersion.toVersion(System.getProperty("java.specification.version"));
    if (jdkVersion.compareTo(javaVersionToUse) < 0) {
        compileTask.getLogger().warn(
                "Default language level for compileSdkVersion '{}' is " +
                        "{}, but the JDK used is {}, so the JDK language level will be used.",
                compileSdkVersion,
                javaVersionToUse,
                jdkVersion);
        javaVersionToUse = jdkVersion;
    }

    compileOptions.setDefaultJavaVersion(javaVersionToUse);

    compileTask.setSourceCompatibility(compileOptions.getSourceCompatibility().toString());
    compileTask.setTargetCompatibility(compileOptions.getTargetCompatibility().toString());
}
 
示例6
@Override
public int getBuildSdk() {
    String compileTarget = mProject.getCompileTarget();
    AndroidVersion version = AndroidTargetHash.getPlatformVersion(compileTarget);
    if (version != null) {
        return version.getApiLevel();
    }

    return super.getBuildSdk();
}
 
示例7
/**
 * Returns a target from a hash that was generated by {@link IAndroidTarget#hashString()}.
 *
 * @param hash the {@link IAndroidTarget} hash string.
 * @return The matching {@link IAndroidTarget} or null.
 */
@Nullable
public IAndroidTarget getTargetFromHashString(@Nullable String hash) {
    if (hash != null) {
        IAndroidTarget[] targets = getTargets(true);
        for (IAndroidTarget target : targets) {
            if (target != null && hash.equals(AndroidTargetHash.getTargetHashString(target))) {
                return target;
            }
        }
    }
    return null;
}
 
示例8
/**
 * Add-on descriptor.
 * The following attributes are mandatory:
 */
PkgDescAddon(@NonNull  PkgType type,
             @Nullable License license,
             @Nullable String listDisplay,
             @Nullable String descriptionShort,
             @Nullable String descriptionUrl,
             boolean isObsolete,
             @NonNull  MajorRevision majorRevision,
             @NonNull  AndroidVersion androidVersion,
             @NonNull  IdDisplay addonVendor,
             @NonNull  IdDisplay addonName) {
    super(type,
          license,
          listDisplay,
          descriptionShort,
          descriptionUrl,
          isObsolete,
          null,     //fullRevision
          majorRevision,
          androidVersion,
          AndroidTargetHash.getAddonHashString(addonVendor.getDisplay(),
                                               addonName.getDisplay(),
                                               androidVersion),
          null,     //tag
          addonVendor,
          null,     //minToolsRev
          null,     //minPlatformToolsRev
          null,     //customIsUpdateFor
          null);    //customPath

    mAddonName = addonName;
}
 
示例9
@Override
public String getInstallId() {
    StringBuilder sb = new StringBuilder();

    /* iid patterns:
    tools, platform-tools => FOLDER / FOLDER-preview
    build-tools => FOLDER-REV
    doc, sample, source => ENUM-API
    extra => ENUM-VENDOR.id-PATH
    platform => android-API
    add-on => addon-NAME.id-VENDOR.id-API
    platform sys-img => sys-img-ABI-TAG|android-API
    add-on sys-img => sys-img-ABI-addon-NAME.id-VENDOR.id-API
    */

    switch (mType) {
    case PKG_TOOLS:
    case PKG_PLATFORM_TOOLS:
        sb.append(mType.getFolderName());
        if (getFullRevision().isPreview()) {
            sb.append("-preview");
        }
        break;

    case PKG_BUILD_TOOLS:
        sb.append(mType.getFolderName());
        sb.append('-').append(getFullRevision().toString());
        break;

    case PKG_DOC:
    case PKG_SAMPLE:
    case PKG_SOURCE:
        sb.append(mType.toString().toLowerCase(Locale.US).replace("pkg_", ""));
        sb.append('-').append(getAndroidVersion().getApiString());
        break;

    case PKG_EXTRA:
        sb.append("extra-")
          .append(getVendor().getId())
          .append('-')
          .append(getPath());
        break;

    case PKG_PLATFORM:
        sb.append(AndroidTargetHash.PLATFORM_HASH_PREFIX).append(getAndroidVersion().getApiString());
        break;

    case PKG_ADDON:
        sb.append("addon-")
          .append(((IPkgDescAddon) this).getName().getId())
          .append('-')
          .append(getVendor().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
        break;

    case PKG_SYS_IMAGE:
        sb.append("sys-img-")
          .append(getPath())    // path==ABI for sys-img
          .append('-')
          .append(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
        break;

    case PKG_ADDON_SYS_IMAGE:
        sb.append("sys-img-")
          .append(getPath())    // path==ABI for sys-img
          .append("-addon-")
          .append(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
          .append('-')
          .append(getVendor().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
      break;

    default:
        throw new IllegalArgumentException("IID not defined for type " + mType.toString());
    }

    return sanitize(sb.toString());
}
 
示例10
@Override
public File getCanonicalInstallFolder(@NonNull File sdkLocation) {
    File f = FileOp.append(sdkLocation, mType.getFolderName());

    /* folder patterns:
    tools, platform-tools, doc => FOLDER
    build-tools, add-on => FOLDER/IID
    platform, sample, source => FOLDER/android-API
    platform sys-img => FOLDER/android-API/TAG/ABI
    add-on sys-img => FOLDER/addon-NAME.id-VENDOR.id-API/ABI
    extra => FOLDER/VENDOR.id/PATH
    */

    switch (mType) {
    case PKG_TOOLS:
    case PKG_PLATFORM_TOOLS:
    case PKG_DOC:
        // no-op, top-folder is all what is needed here
        break;

    case PKG_BUILD_TOOLS:
    case PKG_ADDON:
        f = FileOp.append(f, getInstallId());
        break;

    case PKG_PLATFORM:
    case PKG_SAMPLE:
    case PKG_SOURCE:
        f = FileOp.append(f, AndroidTargetHash.PLATFORM_HASH_PREFIX + sanitize(getAndroidVersion().getApiString()));
        break;

    case PKG_SYS_IMAGE:
        f = FileOp.append(f,
                AndroidTargetHash.PLATFORM_HASH_PREFIX + sanitize(getAndroidVersion().getApiString()),
                sanitize(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId()),
                sanitize(getPath()));   // path==abi
        break;

    case PKG_ADDON_SYS_IMAGE:
        String name = "addon-"
                    + (SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
                    + '-'
                    + getVendor().getId()
                    + '-'
                    + getAndroidVersion().getApiString();
        f = FileOp.append(f,
                sanitize(name),
                sanitize(getPath()));   // path==abi
      break;

    case PKG_EXTRA:
        f = FileOp.append(f,
                sanitize(getVendor().getId()),
                sanitize(getPath()));
        break;

    default:
        throw new IllegalArgumentException("CanonicalFolder not defined for type " + mType.toString());
    }

    return f;
}
 
示例11
@Override
public String hashString() {
    return String.format(AndroidTargetHash.ADD_ON_FORMAT, mVendor, mName,
            mBasePlatform.getVersion().getApiString());
}
 
示例12
@Override
public String hashString() {
    return AndroidTargetHash.getPlatformHashString(mVersion);
}
 
示例13
private boolean isPostN() {
    final AndroidVersion hash = AndroidTargetHash.getVersionFromHash(compileSdkVersion);
    return hash != null && hash.getApiLevel() >= 24;
}
 
示例14
@Override
public String getBaseInstallId() {
    StringBuilder sb = new StringBuilder();

    /* iid patterns:
    tools, platform-tools => FOLDER
    build-tools => FOLDER-REV
    doc, sample, source => ENUM-API
    extra => ENUM-VENDOR.id-PATH
    platform => android-API
    add-on => addon-NAME.id-VENDOR.id-API
    platform sys-img => sys-img-ABI-TAG|android-API
    add-on sys-img => sys-img-ABI-addon-NAME.id-VENDOR.id-API
    */

    switch (mType) {
    case PKG_TOOLS:
    case PKG_PLATFORM_TOOLS:
        sb.append(mType.getFolderName());
        break;

    case PKG_BUILD_TOOLS:
        sb.append(mType.getFolderName()).append('-');
        // Add version number without the preview revision number. This is to make preview
        // packages be updatable to the next revision.
        int[] version = getPreciseRevision().toIntArray(false);
        for (int i = 0; i < version.length; i++) {
            sb.append(version[i]);
            if (i != version.length - 1) {
                sb.append('.');
            }
        }
        break;

    case PKG_DOC:
        sb.append("doc");
        break;

    case PKG_SAMPLE:
    case PKG_SOURCE:
        sb.append(mType.toString().toLowerCase(Locale.US).replace("pkg_", ""));
        sb.append('-').append(getAndroidVersion().getApiString());
        break;

    case PKG_EXTRA:
        sb.append("extra-")
          .append(getVendor().getId())
          .append('-')
          .append(getPath());
        break;

    case PKG_PLATFORM:
        sb.append(AndroidTargetHash.PLATFORM_HASH_PREFIX)
                .append(getAndroidVersion().getApiString());
        break;

    case PKG_ADDON:
        sb.append("addon-")
          .append(((IPkgDescAddon)this).getName().getId())
          .append('-')
          .append(getVendor().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
        break;

    case PKG_SYS_IMAGE:
        sb.append("sys-img-")
          .append(getPath())    // path==ABI for sys-img
          .append('-')
          .append(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
        break;

    case PKG_ADDON_SYS_IMAGE:
        sb.append("sys-img-")
          .append(getPath())    // path==ABI for sys-img
          .append("-addon-")
          .append(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
          .append('-')
          .append(getVendor().getId())
          .append('-')
          .append(getAndroidVersion().getApiString());
        break;

    default:
        throw new IllegalArgumentException("IID not defined for type " + mType.toString());
    }

    return sanitize(sb.toString());
}
 
示例15
@Override
public File getCanonicalInstallFolder(@NonNull File sdkLocation) {
    File f = FileOp.append(sdkLocation, mType.getFolderName());

    /* folder patterns:
    tools, platform-tools, doc => FOLDER
    build-tools, add-on => FOLDER/IID
    platform, sample, source => FOLDER/android-API
    platform sys-img => FOLDER/android-API/TAG/ABI
    add-on sys-img => FOLDER/addon-NAME.id-VENDOR.id-API/ABI
    extra => FOLDER/VENDOR.id/PATH
    */

    switch (mType) {
    case PKG_TOOLS:
    case PKG_PLATFORM_TOOLS:
    case PKG_DOC:
        // no-op, top-folder is all what is needed here
        break;

    case PKG_BUILD_TOOLS:
    case PKG_ADDON:
        f = FileOp.append(f, getInstallId());
        break;

    case PKG_PLATFORM:
    case PKG_SAMPLE:
    case PKG_SOURCE:
        f = FileOp.append(f, AndroidTargetHash.PLATFORM_HASH_PREFIX + sanitize(
                getAndroidVersion().getApiString()));
        break;

    case PKG_SYS_IMAGE:
        f = FileOp.append(f,
                AndroidTargetHash.PLATFORM_HASH_PREFIX + sanitize(
                        getAndroidVersion().getApiString()),
                sanitize(SystemImage.DEFAULT_TAG.equals(getTag()) ? "android"
                        : getTag().getId()),
                sanitize(getPath()));   // path==abi
        break;

    case PKG_ADDON_SYS_IMAGE:
        String name = "addon-"
                    + (SystemImage.DEFAULT_TAG.equals(getTag()) ? "android" : getTag().getId())
                    + '-'
                    + getVendor().getId()
                    + '-'
                    + getAndroidVersion().getApiString();
        f = FileOp.append(f,
                sanitize(name),
                sanitize(getPath()));   // path==abi
      break;

    case PKG_EXTRA:
        f = FileOp.append(f,
                sanitize(getVendor().getId()),
                sanitize(getPath()));
        break;

    default:
        throw new IllegalArgumentException(
                "CanonicalFolder not defined for type " + mType.toString());
    }

    return f;
}
 
示例16
@Override
public String hashString() {
    return String.format(AndroidTargetHash.ADD_ON_FORMAT, mVendor, mName,
            mBasePlatform.getVersion().getApiString());
}
 
示例17
@Override
public String hashString() {
    return AndroidTargetHash.getPlatformHashString(mVersion);
}
 
示例18
@Override
public String hashString() {
    return AndroidTargetHash.getTargetHashString(this);
}
 
示例19
/**
 * Computes a suitable build api string, e.g. for API level 18 the build API
 * string is "18".
 */
@NotNull
public static String getBuildApiString(@NotNull AndroidVersion version) {
    return version.isPreview() ? AndroidTargetHash.getPlatformHashString(version) : version.getApiString();
}
 
示例20
/**
 * Returns a string identifier to install this package from the command line.
 * For platforms, we use "android-N" where N is the API or the preview codename.
 * <p/>
 * {@inheritDoc}
 */
@Override
public String installId() {
    return AndroidTargetHash.getPlatformHashString(mVersion);
}
 
示例21
/**
 * Returns a string identifier to install this package from the command line.
 * For platforms, we use "android-N" where N is the API or the preview codename.
 * <p/>
 * {@inheritDoc}
 */
@Override
public String installId() {
    return AndroidTargetHash.getPlatformHashString(mVersion);
}