diff --git a/android/module.go b/android/module.go
index 07c4e8f..4a8e8ac 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1220,7 +1220,7 @@
 				ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m)
 			}
 		} else if pathtools.IsGlob(s) {
-			globbedSrcFiles := ctx.Glob(filepath.Join(prefix, s), expandedExcludes)
+			globbedSrcFiles := ctx.GlobFiles(filepath.Join(prefix, s), expandedExcludes)
 			for i, s := range globbedSrcFiles {
 				globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir)
 			}
@@ -1246,25 +1246,15 @@
 	if err != nil {
 		ctx.ModuleErrorf("glob: %s", err.Error())
 	}
-	return pathsForModuleSrcFromFullPath(ctx, ret)
+	return pathsForModuleSrcFromFullPath(ctx, ret, true)
 }
 
-// glob only "files" under the directory relative to top of the source tree.
 func (ctx *androidModuleContext) GlobFiles(globPattern string, excludes []string) Paths {
-	paths, err := ctx.GlobWithDeps(globPattern, excludes)
+	ret, err := ctx.GlobWithDeps(globPattern, excludes)
 	if err != nil {
 		ctx.ModuleErrorf("glob: %s", err.Error())
 	}
-	var ret []Path
-	for _, p := range paths {
-		if isDir, err := ctx.Fs().IsDir(p); err != nil {
-			ctx.ModuleErrorf("error in IsDir(%s): %s", p, err.Error())
-			return nil
-		} else if !isDir {
-			ret = append(ret, PathForSource(ctx, p))
-		}
-	}
-	return ret
+	return pathsForModuleSrcFromFullPath(ctx, ret, false)
 }
 
 func init() {
diff --git a/android/paths.go b/android/paths.go
index 3b1cea6..ffdb393 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -228,14 +228,17 @@
 
 // pathsForModuleSrcFromFullPath returns Paths rooted from the module's local
 // source directory, but strip the local source directory from the beginning of
-// each string.
-func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string) Paths {
+// each string. If incDirs is false, strip paths with a trailing '/' from the list.
+func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string, incDirs bool) Paths {
 	prefix := filepath.Join(ctx.Config().srcDir, ctx.ModuleDir()) + "/"
 	if prefix == "./" {
 		prefix = ""
 	}
 	ret := make(Paths, 0, len(paths))
 	for _, p := range paths {
+		if !incDirs && strings.HasSuffix(p, "/") {
+			continue
+		}
 		path := filepath.Clean(p)
 		if !strings.HasPrefix(path, prefix) {
 			reportPathErrorf(ctx, "Path '%s' is not in module source directory '%s'", p, prefix)
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index e824d0f..b573c2e 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -100,7 +100,7 @@
 
 func (stub *llndkStubDecorator) processHeaders(ctx ModuleContext, srcHeaderDir string, outDir android.ModuleGenPath) android.Path {
 	srcDir := android.PathForModuleSrc(ctx, srcHeaderDir)
-	srcFiles := ctx.Glob(filepath.Join(srcDir.String(), "**/*.h"), nil)
+	srcFiles := ctx.GlobFiles(filepath.Join(srcDir.String(), "**/*.h"), nil)
 
 	var installPaths []android.WritablePath
 	for _, header := range srcFiles {
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index d7c2a06..9fabc97 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -202,7 +202,7 @@
 
 	fromSrcPath := android.PathForModuleSrc(ctx, String(m.properties.From))
 	toOutputPath := getCurrentIncludePath(ctx).Join(ctx, String(m.properties.To))
-	srcFiles := ctx.Glob(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
+	srcFiles := ctx.GlobFiles(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
 	var installPaths []android.WritablePath
 	for _, header := range srcFiles {
 		installDir := getHeaderInstallDir(ctx, header, String(m.properties.From), String(m.properties.To))
diff --git a/java/app.go b/java/app.go
index 34f05b7..ac88df7 100644
--- a/java/app.go
+++ b/java/app.go
@@ -342,17 +342,7 @@
 }
 
 func resourceGlob(ctx android.ModuleContext, dir android.Path) android.Paths {
-	var ret android.Paths
-	files := ctx.Glob(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
-	for _, f := range files {
-		if isDir, err := ctx.Fs().IsDir(f.String()); err != nil {
-			ctx.ModuleErrorf("error in IsDir(%s): %s", f.String(), err.Error())
-			return nil
-		} else if !isDir {
-			ret = append(ret, f)
-		}
-	}
-	return ret
+	return ctx.GlobFiles(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
 }
 
 type overlayGlobResult struct {
@@ -440,10 +430,7 @@
 		}
 		var paths android.Paths
 		for _, f := range files {
-			if isDir, err := ctx.Fs().IsDir(f); err != nil {
-				ctx.Errorf("error in IsDir(%s): %s", f, err.Error())
-				return
-			} else if !isDir {
+			if !strings.HasSuffix(f, "/") {
 				paths = append(paths, android.PathForSource(ctx, f))
 			}
 		}
