Make the Android incremental installer script support incrementally installing native libraries.

--
MOS_MIGRATED_REVID=99257598
diff --git a/tools/android/incremental_install_test.py b/tools/android/incremental_install_test.py
index b8ea64f..a040f74 100644
--- a/tools/android/incremental_install_test.py
+++ b/tools/android/incremental_install_test.py
@@ -78,6 +78,8 @@
       elif shell_cmdln.startswith("rm"):
         file_path = shell_cmdln.split()[2]
         self.files.pop(file_path, None)
+      elif shell_cmdln.startswith("getprop ro.product.cpu.abi"):
+        return self._CreatePopenMock(0, "armeabi-v7a", "")
       else:
         raise Exception("Unknown shell command line: %s" % shell_cmdln)
     # Return a mock subprocess.Popen object
@@ -151,11 +153,13 @@
   def _PutDeviceFile(self, f, content):
     self._mock_adb.files[self._GetDeviceAppPath(f)] = content
 
-  def _CallIncrementalInstall(self, incremental, start_app=False):
+  def _CallIncrementalInstall(self, incremental, native_libs=None,
+                              start_app=False):
     if incremental:
       apk = None
     else:
       apk = self._APK
+
     incremental_install.IncrementalInstall(
         adb_path=self._ADB_PATH,
         execroot=self._EXEC_ROOT,
@@ -163,13 +167,13 @@
         dexmanifest=self._DEXMANIFEST,
         apk=apk,
         resource_apk=self._RESOURCE_APK,
+        native_libs=native_libs,
         output_marker=self._OUTPUT_MARKER,
         adb_jobs=1,
         start_app=start_app,
         user_home_dir="/home/root")
 
   def testUploadToPristineDevice(self):
-
     self._CreateZip()
 
     with open("dex1", "w") as f:
@@ -190,8 +194,35 @@
     self.assertEquals("content3", self._GetDeviceFile("dex/ip3"))
     self.assertEquals("resource apk", self._GetDeviceFile("resources.ap_"))
 
-  def testUploadWithOneChangedFile(self):
+  def testUploadNativeLibs(self):
+    self._CreateZip()
+    with open("liba.so", "w") as f:
+      f.write("liba_1")
+    with open("libb.so", "w") as f:
+      f.write("libb_1")
 
+    native_libs = ["armeabi-v7a:liba.so", "armeabi-v7a:libb.so"]
+    self._CallIncrementalInstall(incremental=False, native_libs=native_libs)
+    self.assertEquals("liba_1", self._GetDeviceFile("native/liba.so"))
+    self.assertEquals("libb_1", self._GetDeviceFile("native/libb.so"))
+
+    # Change a library
+    with open("libb.so", "w") as f:
+      f.write("libb_2")
+    self._CallIncrementalInstall(incremental=True, native_libs=native_libs)
+    self.assertEquals("libb_2", self._GetDeviceFile("native/libb.so"))
+
+    # Delete a library
+    self._CallIncrementalInstall(
+        incremental=True, native_libs=["armeabi-v7a:liba.so"])
+    self.assertFalse(
+        self._GetDeviceAppPath("native/libb.so") in self._mock_adb.files)
+
+    # Add the deleted library back
+    self._CallIncrementalInstall(incremental=True, native_libs=native_libs)
+    self.assertEquals("libb_2", self._GetDeviceFile("native/libb.so"))
+
+  def testUploadWithOneChangedFile(self):
     # Existing manifest from a previous install.
     self._CreateRemoteManifest(
         "zip1 zp1 ip1 0",