diff --git a/bind/gen.go b/bind/gen.go
index 519d1e3..546c5cf 100644
--- a/bind/gen.go
+++ b/bind/gen.go
@@ -371,21 +371,6 @@
 	return name
 }
 
-func constExactString(o *types.Const) string {
-	// TODO(hyangah): this is a temporary fix for golang.org/issues/14615.
-	// Clean this up when we can require at least go 1.6 or above.
-
-	type exactStringer interface {
-		ExactString() string
-	}
-	v := o.Val()
-	if v, ok := v.(exactStringer); ok {
-		return v.ExactString()
-	}
-	// TODO: warning?
-	return v.String()
-}
-
 func lowerFirst(s string) string {
 	if s == "" {
 		return ""
diff --git a/bind/genjava.go b/bind/genjava.go
index 3080fa1..ee45c20 100644
--- a/bind/genjava.go
+++ b/bind/genjava.go
@@ -983,7 +983,7 @@
 	// TODO(hyangah): should const names use upper cases + "_"?
 	// TODO(hyangah): check invalid names.
 	jType := g.javaType(o.Type())
-	val := constExactString(o)
+	val := o.Val().ExactString()
 	switch b := o.Type().(*types.Basic); b.Kind() {
 	case types.Int64, types.UntypedInt:
 		i, exact := constant.Int64Val(o.Val())
diff --git a/bind/genobjc.go b/bind/genobjc.go
index 32ec399..4485dcf 100644
--- a/bind/genobjc.go
+++ b/bind/genobjc.go
@@ -368,7 +368,7 @@
 		g.Printf("const BOOL %s = %s;\n", cName, v)
 
 	case types.String, types.UntypedString:
-		g.Printf("NSString* const %s = @%s;\n", cName, constExactString(o))
+		g.Printf("NSString* const %s = @%s;\n", cName, o.Val().ExactString())
 
 	case types.Int, types.Int8, types.Int16, types.Int32:
 		g.Printf("const %s %s = %s;\n", objcType, cName, o.Val())
diff --git a/cmd/gomobile/bind_androidapp.go b/cmd/gomobile/bind_androidapp.go
index cb86f00..59ad764 100644
--- a/cmd/gomobile/bind_androidapp.go
+++ b/cmd/gomobile/bind_androidapp.go
@@ -21,12 +21,9 @@
 	if sdkDir := os.Getenv("ANDROID_HOME"); sdkDir == "" {
 		return fmt.Errorf("this command requires ANDROID_HOME environment variable (path to the Android SDK)")
 	}
-	var androidArgs []string
-	if goVersion == go1_6 {
-		// Ideally this would be -buildmode=c-shared.
-		// https://golang.org/issue/13234.
-		androidArgs = []string{"-gcflags=-shared", "-ldflags=-shared"}
-	}
+	// Ideally this would be -buildmode=c-shared.
+	// https://golang.org/issue/13234.
+	androidArgs := []string{"-gcflags=-shared", "-ldflags=-shared"}
 
 	paths := make([]string, len(pkgs))
 	for i, p := range pkgs {
diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go
index d2f4d1c..0e3abae 100644
--- a/cmd/gomobile/bind_test.go
+++ b/cmd/gomobile/bind_test.go
@@ -36,7 +36,7 @@
 	buildN = true
 	buildX = true
 	buildO = "asset.aar"
-	buildTarget = "android"
+	buildTarget = "android/arm"
 	ndkRoot = "/NDK"
 
 	tests := []struct {
@@ -107,7 +107,7 @@
 mkdir -p $WORK/gomobile_bind
 mkdir -p $WORK/gomobile_bind
 mkdir -p $WORK/gen/src/Java
-GOOS=android GOARCH=arm CC=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L/NDK/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -x golang.org/x/mobile/asset
+GOOS=android GOARCH=arm CC=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L/NDK/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -x -gcflags=-shared -ldflags=-shared golang.org/x/mobile/asset
 rm -r -f "$WORK/fakegopath"
 mkdir -p $WORK/fakegopath/pkg
 cp $GOMOBILE/pkg_android_arm/golang.org/x/mobile/asset.a $WORK/fakegopath/pkg/android_arm/golang.org/x/mobile/asset.a
diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go
index c1e9957..423da7f 100644
--- a/cmd/gomobile/build.go
+++ b/cmd/gomobile/build.go
@@ -330,11 +330,7 @@
 	case "ios":
 		supported = []string{"arm", "arm64", "amd64"}
 	case "android":
-		for arch, tc := range ndk {
-			if tc.minGoVer <= goVersion {
-				supported = append(supported, arch)
-			}
-		}
+		supported = []string{"arm", "arm64", "386", "amd64"}
 	}
 
 	isSupported := func(arch string) bool {
diff --git a/cmd/gomobile/build_test.go b/cmd/gomobile/build_test.go
index 569441e..1257c6a 100644
--- a/cmd/gomobile/build_test.go
+++ b/cmd/gomobile/build_test.go
@@ -75,7 +75,7 @@
 	buildN = true
 	buildX = true
 	buildO = "basic.apk"
-	buildTarget = "android"
+	buildTarget = "android/arm"
 	ndkRoot = "/NDK"
 	gopath = filepath.ToSlash(filepath.SplitList(os.Getenv("GOPATH"))[0])
 	if goos == "windows" {
@@ -105,7 +105,7 @@
 `))
 
 func TestParseBuildTargetFlag(t *testing.T) {
-	androidArchs := "arm"
+	androidArchs := "arm,arm64,386,amd64"
 	iosArchs := "arm,arm64,amd64"
 
 	tests := []struct {
diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go
index e96848b..bda72ec 100644
--- a/cmd/gomobile/env.go
+++ b/cmd/gomobile/env.go
@@ -116,10 +116,6 @@
 	if ndkRoot != "" {
 		androidEnv = make(map[string][]string)
 		for arch, toolchain := range ndk {
-			if goVersion < toolchain.minGoVer {
-				continue
-			}
-
 			// Emulate the flags in the clang wrapper scripts generated
 			// by make_standalone_toolchain.py
 			s := strings.SplitN(toolchain.toolPrefix, "-", 3)
@@ -313,7 +309,6 @@
 	platform   string
 	gcc        string
 	toolPrefix string
-	minGoVer   goToolVersion
 }
 
 func (tc *ndkToolchain) Path(toolName string) string {
@@ -337,7 +332,7 @@
 
 func (nc ndkConfig) Toolchain(arch string) ndkToolchain {
 	tc, ok := nc[arch]
-	if !ok || tc.minGoVer > goVersion {
+	if !ok {
 		panic(`unsupported architecture: ` + arch)
 	}
 	return tc
@@ -350,7 +345,6 @@
 		platform:   "android-15",
 		gcc:        "arm-linux-androideabi-4.9",
 		toolPrefix: "arm-linux-androideabi",
-		minGoVer:   go1_5,
 	},
 	"arm64": {
 		arch:       "arm64",
@@ -358,7 +352,6 @@
 		platform:   "android-21",
 		gcc:        "aarch64-linux-android-4.9",
 		toolPrefix: "aarch64-linux-android",
-		minGoVer:   go1_6,
 	},
 
 	"386": {
@@ -367,7 +360,6 @@
 		platform:   "android-15",
 		gcc:        "x86-4.9",
 		toolPrefix: "i686-linux-android",
-		minGoVer:   go1_6,
 	},
 	"amd64": {
 		arch:       "x86_64",
@@ -375,7 +367,6 @@
 		platform:   "android-21",
 		gcc:        "x86_64-4.9",
 		toolPrefix: "x86_64-linux-android",
-		minGoVer:   go1_6,
 	},
 }
 
diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go
index 120a9bb..4452c37 100644
--- a/cmd/gomobile/init.go
+++ b/cmd/gomobile/init.go
@@ -158,13 +158,11 @@
 
 	// Install standard libraries for cross compilers.
 	start := time.Now()
-	var androidArgs []string
-	if goVersion == go1_6 {
-		// Ideally this would be -buildmode=c-shared.
-		// https://golang.org/issue/13234.
-		androidArgs = []string{"-gcflags=-shared", "-ldflags=-shared"}
-	}
-	for _, env := range androidEnv {
+	// Ideally this would be -buildmode=c-shared.
+	// https://golang.org/issue/13234.
+	androidArgs := []string{"-gcflags=-shared", "-ldflags=-shared"}
+	for _, arch := range archs {
+		env := androidEnv[arch]
 		if err := installStd(env, androidArgs...); err != nil {
 			return err
 		}
diff --git a/cmd/gomobile/init_test.go b/cmd/gomobile/init_test.go
index 43384ce..eb8221e 100644
--- a/cmd/gomobile/init_test.go
+++ b/cmd/gomobile/init_test.go
@@ -106,7 +106,10 @@
 go install -x golang.org/x/mobile/gl
 go install -x golang.org/x/mobile/app
 go install -x golang.org/x/mobile/exp/app/debug{{end}}
-GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 go install -pkgdir=$GOMOBILE/pkg_android_arm -x std
+GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_arm -x std
+GOOS=android GOARCH=arm64 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-21/arch-arm64/usr/lib -L$GOMOBILE/lib/arm64 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_arm64 -x std
+GOOS=android GOARCH=386 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-x86/usr/lib -L$GOMOBILE/lib/386 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_386 -x std
+GOOS=android GOARCH=amd64 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-21/arch-x86_64/usr/lib -L$GOMOBILE/lib/amd64 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_amd64 -x std
 {{if eq .GOOS "darwin"}}GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go install -pkgdir=$GOMOBILE/pkg_darwin_arm -x std
 GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go install -pkgdir=$GOMOBILE/pkg_darwin_arm64 -x std
 GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go install -tags=ios -pkgdir=$GOMOBILE/pkg_darwin_amd64 -x std
diff --git a/cmd/gomobile/main.go b/cmd/gomobile/main.go
index 4e0e184..b855a35 100644
--- a/cmd/gomobile/main.go
+++ b/cmd/gomobile/main.go
@@ -25,7 +25,6 @@
 var (
 	gomobileName = "gomobile"
 	goVersionOut = []byte(nil)
-	goVersion    = go1_5
 )
 
 func printUsage(w io.Writer) {
@@ -85,13 +84,6 @@
 	os.Exit(2)
 }
 
-type goToolVersion int
-
-const (
-	go1_5 goToolVersion = iota
-	go1_6
-)
-
 func determineGoVersion() error {
 	gobin, err := exec.LookPath("go")
 	if err != nil {
@@ -102,12 +94,10 @@
 		return fmt.Errorf("'go version' failed: %v, %s", err, goVersionOut)
 	}
 	switch {
-	case bytes.HasPrefix(goVersionOut, []byte("go version go1.4")):
-		return errors.New("Go 1.5 or newer is required")
-	case bytes.HasPrefix(goVersionOut, []byte("go version go1.5")):
-		goVersion = go1_5
-	default:
-		goVersion = go1_6 // assume developers are working at tip
+	case bytes.HasPrefix(goVersionOut, []byte("go version go1.4")),
+		bytes.HasPrefix(goVersionOut, []byte("go version go1.5")),
+		bytes.HasPrefix(goVersionOut, []byte("go version go1.6")):
+		return errors.New("Go 1.7 or newer is required")
 	}
 	return nil
 }
