// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | |
// for details. All rights reserved. Use of this source code is governed by a | |
// BSD-style license that can be found in the LICENSE file. | |
package com.android.tools.r8.utils; | |
import com.android.tools.r8.errors.Unreachable; | |
/** | |
* Android API level description | |
*/ | |
public enum AndroidApiLevel { | |
P(27), | |
O(26), | |
N_MR1(25), | |
N(24), | |
M(23), | |
L_MR1(22), | |
L(21), | |
K_WATCH(20), | |
K(19), | |
J_MR2(18), | |
J_MR1(17), | |
J(16), | |
I_MR1(15), | |
I(14), | |
H_MR2(13), | |
H_MR1(12), | |
H(11), | |
G_MR1(10), | |
G(9), | |
F(8), | |
E_MR1(7), | |
E_0_1(6), | |
E(5), | |
D(4), | |
C(3), | |
B_1_1(2), | |
B(1); | |
private final int level; | |
AndroidApiLevel(int level) { | |
this.level = level; | |
} | |
public int getLevel() { | |
return level; | |
} | |
public String getName() { | |
return "Android " + name(); | |
} | |
public static AndroidApiLevel getDefault() { | |
return AndroidApiLevel.B; | |
} | |
public DexVersion getDexVersion() { | |
return DexVersion.getDexVersion(this); | |
} | |
public static AndroidApiLevel getMinAndroidApiLevel(DexVersion dexVersion) { | |
switch (dexVersion) { | |
case V35: | |
return AndroidApiLevel.B; | |
case V37: | |
return AndroidApiLevel.N; | |
case V38: | |
return AndroidApiLevel.O; | |
case V39: | |
return AndroidApiLevel.P; | |
default: | |
throw new Unreachable(); | |
} | |
} | |
public static AndroidApiLevel getAndroidApiLevel(int apiLevel) { | |
switch (apiLevel) { | |
case 1: | |
return B; | |
case 2: | |
return B_1_1; | |
case 3: | |
return C; | |
case 4: | |
return D; | |
case 5: | |
return E; | |
case 6: | |
return E_0_1; | |
case 7: | |
return E_MR1; | |
case 8: | |
return F; | |
case 9: | |
return G; | |
case 10: | |
return G_MR1; | |
case 11: | |
return H; | |
case 12: | |
return H_MR1; | |
case 13: | |
return H_MR2; | |
case 14: | |
return I; | |
case 15: | |
return I_MR1; | |
case 16: | |
return J; | |
case 17: | |
return J_MR1; | |
case 18: | |
return J_MR2; | |
case 19: | |
return K; | |
case 20: | |
return K_WATCH; | |
case 21: | |
return L; | |
case 22: | |
return L_MR1; | |
case 23: | |
return M; | |
case 24: | |
return N; | |
case 25: | |
return N_MR1; | |
case 26: | |
return O; | |
case 27: | |
return P; | |
default: | |
throw new Unreachable(); | |
} | |
} | |
} |