Pass --no-default-features to cargo build

* When --features is specified,
  pass --no-default-features to cargo.
* When a dependent Rust package is imported to AOSP,
  if not all "default" features are needed, run
  cargo2android.py with empty or a list of specific features.

Test: cargo2android.py --run # use default features
Test: cargo2android.py --run --features=''  # no default
Test: cargo2android.py --run --features='default,std'
Change-Id: I854f1ecb7d7466490ff34e229ec14a07c1273c6d
diff --git a/scripts/cargo2android.py b/scripts/cargo2android.py
index c88536e..9f3dd57 100755
--- a/scripts/cargo2android.py
+++ b/scripts/cargo2android.py
@@ -876,8 +876,11 @@
     cmd_tail = ' --target-dir ' + TARGET_TMP + ' >> cargo.out 2>&1'
     for c in self.cargo:
       features = ''
-      if self.args.features and c != 'clean':
-        features = ' --features ' + self.args.features
+      if c != 'clean':
+        if self.args.features is not None:
+          features = ' --no-default-features'
+        if self.args.features:
+          features += ' --features ' + self.args.features
       cmd = 'cargo -vv ' if self.args.vv else 'cargo -v '
       cmd += c + features + cmd_tail
       if self.args.rustflags and c != 'clean':
@@ -1076,7 +1079,9 @@
       default=False,
       help='run cargo also for a default device target')
   parser.add_argument(
-      '--features', type=str, help='passing features to cargo build')
+      '--features', type=str,
+      help=('pass features to cargo build, ' +
+            'empty string means no default features'))
   parser.add_argument(
       '--onefile',
       action='store_true',