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);
}