/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.sdklib.devices; import com.android.SdkConstants; import com.android.annotations.NonNull; import com.android.annotations.Nullable; /** * ABI values that can appear in a device's xml <abi> field <em>and</em> * in a system-image abi. * <p/> * The CPU arch and model values are used to configure an AVD using a given ABI. */ public enum Abi { // // ABI string // Display // CPU arch ARMEABI (SdkConstants.ABI_ARMEABI, "ARM", SdkConstants.CPU_ARCH_ARM), ARMEABI_V7A(SdkConstants.ABI_ARMEABI_V7A, "ARM", SdkConstants.CPU_ARCH_ARM, SdkConstants.CPU_MODEL_CORTEX_A8), ARM64_V8A (SdkConstants.ABI_ARM64_V8A, "ARM", SdkConstants.CPU_ARCH_ARM64), X86 (SdkConstants.ABI_INTEL_ATOM, "Intel Atom", SdkConstants.CPU_ARCH_INTEL_ATOM), X86_64 (SdkConstants.ABI_INTEL_ATOM64,"Intel Atom", SdkConstants.CPU_ARCH_INTEL_ATOM64), MIPS (SdkConstants.ABI_MIPS, "MIPS", SdkConstants.CPU_ARCH_MIPS), MIPS64 (SdkConstants.ABI_MIPS64, "MIPS", SdkConstants.CPU_ARCH_MIPS64); @NonNull private final String mAbi; @NonNull private final String mCpuArch; @Nullable private final String mCpuModel; @NonNull private final String mDisplayName; /** * Define an ABI with a given ABI code name, a display name and a CPU architecture. * * @param abi The ABI code name, used in the system-images and device definitions. * @param displayName The ABI "family" name. Typically used in the UI combined with the * code name, for example "ARM (armeabi-v7a)". * @param cpuArch The CPU architecture, used in the AVD configuration files. */ Abi(@NonNull String abi, @NonNull String displayName, @NonNull String cpuArch) { this(abi, displayName, cpuArch, null); } /** * Define an ABI with a given ABI code name, a display name, a CPU architecture * and an optional CPU model. * * @param abi The ABI code name, used in the system-images and device definitions. * @param displayName The ABI "family" name. Typically used in the UI combined with the * code name, for example "ARM (armeabi-v7a)". * @param cpuArch The CPU architecture, used in the AVD configuration files. * @param cpuModel An optional CPU model, used in the AVD configuration files. * The current strategy is to leave this field out. The emulator, which uses the * AVD configuration files, doesn't seem to use it. */ Abi(@NonNull String abi, @NonNull String displayName, @NonNull String cpuArch, @Nullable String cpuModel) { mAbi = abi; mDisplayName = displayName; mCpuArch = cpuArch; mCpuModel = cpuModel; } /** * Returns the ABI definition matching the given ABI code name. * * @param abi The ABI code name, used in the system-images and device definitions. * @return An existing {@link Abi} description or null. */ @Nullable public static Abi getEnum(@NonNull String abi) { for (Abi a : values()) { if (a.mAbi.equals(abi)) { return a; } } return null; } /** * Returns the ABI code name, as used in the system-images and device definitions */ @NonNull @Override public String toString() { return mAbi; } /** * Returns the CPU architecture, as used in the AVD configuration files */ @NonNull public String getCpuArch() { return mCpuArch; } /** * Returns the optional CPU model, used in the AVD configuration files. * This is often null. */ @Nullable public String getCpuModel() { return mCpuModel; } /** * Return the ABI "family" name for display. * Clients should typically display that combined with the code name, * for example "ARM (armeabi-v7a)". */ @NonNull public String getDisplayName() { return mDisplayName; } }