Stop versioning NDK stubs pre-M.

Test: make ndk # readelf various stubs to check version info
Bug: https://github.com/android-ndk/ndk/issues/622
Change-Id: Ic2930cfe5ee8377bb89bfb1bc051b6975f6e57d3
Merged-In: Ic2930cfe5ee8377bb89bfb1bc051b6975f6e57d3
(cherry picked from commit c229f38e93da71bcf9beca3683f5a603b7dd3bca)
diff --git a/android/api_levels.go b/android/api_levels.go
index b1b954c..1b56625 100644
--- a/android/api_levels.go
+++ b/android/api_levels.go
@@ -16,6 +16,7 @@
 
 import (
 	"encoding/json"
+	"strconv"
 )
 
 func init() {
@@ -50,28 +51,48 @@
 	return PathForOutput(ctx, "api_levels.json")
 }
 
-func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) {
-	baseApiLevel := 9000
-	apiLevelsMap := map[string]int{
-		"G":     9,
-		"I":     14,
-		"J":     16,
-		"J-MR1": 17,
-		"J-MR2": 18,
-		"K":     19,
-		"L":     21,
-		"L-MR1": 22,
-		"M":     23,
-		"N":     24,
-		"N-MR1": 25,
-		"O":     26,
-		"O-MR1": 27,
-		"P":     28,
-	}
-	for i, codename := range ctx.Config().PlatformVersionCombinedCodenames() {
-		apiLevelsMap[codename] = baseApiLevel + i
-	}
+func getApiLevelsMap(config Config) map[string]int {
+	return config.Once("ApiLevelsMap", func() interface{} {
+		baseApiLevel := 9000
+		apiLevelsMap := map[string]int{
+			"G":     9,
+			"I":     14,
+			"J":     16,
+			"J-MR1": 17,
+			"J-MR2": 18,
+			"K":     19,
+			"L":     21,
+			"L-MR1": 22,
+			"M":     23,
+			"N":     24,
+			"N-MR1": 25,
+			"O":     26,
+			"O-MR1": 27,
+			"P":     28,
+		}
+		for i, codename := range config.PlatformVersionCombinedCodenames() {
+			apiLevelsMap[codename] = baseApiLevel + i
+		}
 
+		return apiLevelsMap
+	}).(map[string]int)
+}
+
+// Converts an API level string into its numeric form.
+// * Codenames are decoded.
+// * Numeric API levels are simply converted.
+// * "minimum" and "current" are not currently handled since the former is
+//   NDK specific and the latter has inconsistent meaning.
+func ApiStrToNum(ctx BaseContext, apiLevel string) (int, error) {
+	num, ok := getApiLevelsMap(ctx.Config())[apiLevel]
+	if ok {
+		return num, nil
+	}
+	return strconv.Atoi(apiLevel)
+}
+
+func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) {
+	apiLevelsMap := getApiLevelsMap(ctx.Config())
 	apiLevelsJson := GetApiLevelsJson(ctx)
 	createApiLevelsJson(ctx, apiLevelsJson, apiLevelsMap)
 }