cmd/gomobile: copy libopenal.so explicitly

Fixes golang/go#12550.

Change-Id: I744729cfd702f0e044eac22858ee746096977665
Reviewed-on: https://go-review.googlesource.com/14474
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/cmd/gomobile/build_androidapp.go b/cmd/gomobile/build_androidapp.go
index 775df60..c489381 100644
--- a/cmd/gomobile/build_androidapp.go
+++ b/cmd/gomobile/build_androidapp.go
@@ -106,7 +106,7 @@
 	if !buildN {
 		apkw = NewWriter(out, privKey)
 	}
-	apkwcreate := func(name string) (io.Writer, error) {
+	apkwCreate := func(name string) (io.Writer, error) {
 		if buildV {
 			fmt.Fprintf(os.Stderr, "apk: %s\n", name)
 		}
@@ -115,8 +115,25 @@
 		}
 		return apkw.Create(name)
 	}
+	apkwWriteFile := func(dst, src string) error {
+		w, err := apkwCreate(dst)
+		if err != nil {
+			return err
+		}
+		if !buildN {
+			f, err := os.Open(src)
+			if err != nil {
+				return err
+			}
+			defer f.Close()
+			if _, err := io.Copy(w, f); err != nil {
+				return err
+			}
+		}
+		return nil
+	}
 
-	w, err := apkwcreate("AndroidManifest.xml")
+	w, err := apkwCreate("AndroidManifest.xml")
 	if err != nil {
 		return nil, err
 	}
@@ -124,7 +141,7 @@
 		return nil, err
 	}
 
-	w, err = apkwcreate("classes.dex")
+	w, err = apkwCreate("classes.dex")
 	if err != nil {
 		return nil, err
 	}
@@ -136,44 +153,16 @@
 		return nil, err
 	}
 
-	w, err = apkwcreate("lib/armeabi/lib" + libName + ".so")
-	if err != nil {
+	if err := apkwWriteFile("lib/armeabi/lib"+libName+".so", libPath); err != nil {
 		return nil, err
 	}
-	if !buildN {
-		r, err := os.Open(libPath)
-		if err != nil {
-			return nil, err
-		}
-		if _, err := io.Copy(w, r); err != nil {
-			return nil, err
-		}
-	}
 
 	if nmpkgs["golang.org/x/mobile/exp/audio/al"] {
-		alDir := filepath.Join(ndkccpath, "openal/lib")
-		filepath.Walk(alDir, func(path string, info os.FileInfo, err error) error {
-			if err != nil {
-				return err
-			}
-			if info.IsDir() {
-				return nil
-			}
-			name := "lib/" + path[len(alDir)+1:]
-			w, err := apkwcreate(name)
-			if err != nil {
-				return err
-			}
-			if !buildN {
-				f, err := os.Open(path)
-				if err != nil {
-					return err
-				}
-				defer f.Close()
-				_, err = io.Copy(w, f)
-			}
-			return err
-		})
+		dst := "lib/armeabi/libopenal.so"
+		src := filepath.Join(ndkccpath, "openal/"+dst)
+		if err := apkwWriteFile(dst, src); err != nil {
+			return nil, err
+		}
 	}
 
 	// Add any assets.
@@ -198,17 +187,7 @@
 				return nil
 			}
 			name := "assets/" + path[len(assetsDir)+1:]
-			w, err := apkwcreate(name)
-			if err != nil {
-				return err
-			}
-			f, err := os.Open(path)
-			if err != nil {
-				return err
-			}
-			defer f.Close()
-			_, err = io.Copy(w, f)
-			return err
+			return apkwWriteFile(name, path)
 		})
 		if err != nil {
 			return nil, fmt.Errorf("asset %v", err)