--- a/clang/lib/Driver/ToolChains/Linux.cpp	2019-12-21 22:30:03.676720096 +0000
+++ b/clang/lib/Driver/ToolChains/Linux.cpp	2019-12-21 22:34:42.941719383 +0000
@@ -374,7 +374,7 @@
   // those searched.
   // FIXME: It's not clear whether we should use the driver's installed
   // directory ('Dir' below) or the ResourceDir.
-  if (StringRef(D.Dir).startswith(SysRoot)) {
+  if (StringRef(D.Dir).startswith(SysRoot) && !IsAndroid) {
     addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths);
     addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);
   }
@@ -403,7 +403,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
   if (Triple.getVendor() == llvm::Triple::OpenEmbedded &&
       Triple.isArch64Bit())
     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir, Paths);
-  else
+  else if (!IsAndroid)
     addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
   if (IsRISCV) {
     StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple);
@@ -447,11 +447,19 @@
   // searched.
   // FIXME: It's not clear whether we should use the driver's installed
   // directory ('Dir' below) or the ResourceDir.
-  if (StringRef(D.Dir).startswith(SysRoot))
+  if (StringRef(D.Dir).startswith(SysRoot) && !IsAndroid)
     addPathIfExists(D, D.Dir + "/../lib", Paths);
 
   addPathIfExists(D, SysRoot + "/lib", Paths);
-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
+  bool nativeBuild = MultiarchTriple == getMultiarchTriple(D, llvm::Triple(llvm::sys::getDefaultTargetTriple()), SysRoot);
+  if (nativeBuild || !IsAndroid)
+    addPathIfExists(D, SysRoot + "/usr/lib", Paths);
+
+  if (IsAndroid) {
+    addPathIfExists(D, SysRoot + "/usr/" + MultiarchTriple + "/lib", Paths);
+    addPathIfExists(D, "/system/" + OSLibDir, Paths);
+    ExtraOpts.push_back("-rpath=" + SysRoot + "/usr/lib");
+  }
 }
 
 ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {