Upgrade rust/crates/protobuf to 2.17.0

* Android.bp was regenerated. New rustc warnings were found.
* Keep local change in src/lib.rs to include out/version.rs.
* Update out/version.rs to the new version.

Change-Id: I9c2f7d412dcd42fe3769505629e05ab949300fe6
Test: make
diff --git a/src/repeated.rs b/src/repeated.rs
index e5072cf..6ceae53 100644
--- a/src/repeated.rs
+++ b/src/repeated.rs
@@ -16,7 +16,7 @@
 use std::slice;
 use std::vec;
 
-use clear::Clear;
+use crate::clear::Clear;
 
 /// Wrapper around vector to avoid deallocations on clear.
 pub struct RepeatedField<T> {
@@ -207,6 +207,31 @@
         self.vec.remove(index)
     }
 
+    /// Retains only the elements specified by the predicate.
+    ///
+    /// In other words, remove all elements `e` such that `f(&e)` returns `false`.
+    /// This method operates in place, visiting each element exactly once in the
+    /// original order, and preserves the order of the retained elements.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// # use protobuf::RepeatedField;
+    ///
+    /// let mut vec = RepeatedField::from(vec![1, 2, 3, 4]);
+    /// vec.retain(|&x| x % 2 == 0);
+    /// assert_eq!(vec, RepeatedField::from(vec![2, 4]));
+    /// ```
+    pub fn retain<F>(&mut self, f: F)
+    where
+        F: FnMut(&T) -> bool,
+    {
+        // suboptimal
+        self.vec.truncate(self.len);
+        self.vec.retain(f);
+        self.len = self.vec.len();
+    }
+
     /// Truncate at specified length.
     #[inline]
     pub fn truncate(&mut self, len: usize) {