diff --git a/scripts/manifest_fixer.py b/scripts/manifest_fixer.py
index ebfc4d8..917f55b 100755
--- a/scripts/manifest_fixer.py
+++ b/scripts/manifest_fixer.py
@@ -61,9 +61,10 @@
                       help='specify additional <uses-library> tag to add. android:requred is set to false')
   parser.add_argument('--uses-non-sdk-api', dest='uses_non_sdk_api', action='store_true',
                       help='manifest is for a package built against the platform')
-  parser.add_argument('--prefer-code-integrity', dest='prefer_code_integrity', action='store_true',
-                      help=('specify if the app prefers strict code integrity. Should not be conflict '
-                            'if already declared in the manifest.'))
+  parser.add_argument('--use-embedded-dex', dest='use_embedded_dex', action='store_true',
+                      help=('specify if the app wants to use embedded dex and avoid extracted,'
+                            'locally compiled code. Should not be conflict if already declared '
+                            'in the manifest.'))
   parser.add_argument('input', help='input AndroidManifest.xml file')
   parser.add_argument('output', help='output AndroidManifest.xml file')
   return parser.parse_args()
@@ -272,7 +273,7 @@
     application.setAttributeNode(attr)
 
 
-def add_prefer_code_integrity(doc):
+def add_use_embedded_dex(doc):
   manifest = parse_manifest(doc)
   elems = get_children_with_tag(manifest, 'application')
   application = elems[0] if len(elems) == 1 else None
@@ -285,13 +286,13 @@
     manifest.insertBefore(doc.createTextNode(indent), first)
     manifest.insertBefore(application, first)
 
-  attr = application.getAttributeNodeNS(android_ns, 'preferCodeIntegrity')
+  attr = application.getAttributeNodeNS(android_ns, 'useEmbeddedDex')
   if attr is None:
-    attr = doc.createAttributeNS(android_ns, 'android:preferCodeIntegrity')
+    attr = doc.createAttributeNS(android_ns, 'android:useEmbeddedDex')
     attr.value = 'true'
     application.setAttributeNode(attr)
   elif attr.value != 'true':
-    raise RuntimeError('existing attribute mismatches the option of --prefer-code-integrity')
+    raise RuntimeError('existing attribute mismatches the option of --use-embedded-dex')
 
 
 def write_xml(f, doc):
@@ -321,8 +322,8 @@
     if args.uses_non_sdk_api:
       add_uses_non_sdk_api(doc)
 
-    if args.prefer_code_integrity:
-      add_prefer_code_integrity(doc)
+    if args.use_embedded_dex:
+      add_use_embedded_dex(doc)
 
     with open(args.output, 'wb') as f:
       write_xml(f, doc)
diff --git a/scripts/manifest_fixer_test.py b/scripts/manifest_fixer_test.py
index edc98cd..1d8de55 100755
--- a/scripts/manifest_fixer_test.py
+++ b/scripts/manifest_fixer_test.py
@@ -346,12 +346,12 @@
     self.assertEqual(output, expected)
 
 
-class PreferCodeIntegrityTest(unittest.TestCase):
-  """Unit tests for add_prefer_code_integrity function."""
+class UseEmbeddedDexTest(unittest.TestCase):
+  """Unit tests for add_use_embedded_dex function."""
 
   def run_test(self, input_manifest):
     doc = minidom.parseString(input_manifest)
-    manifest_fixer.add_prefer_code_integrity(doc)
+    manifest_fixer.add_use_embedded_dex(doc)
     output = StringIO.StringIO()
     manifest_fixer.write_xml(output, doc)
     return output.getvalue()
@@ -362,23 +362,23 @@
       '    <application%s/>\n'
       '</manifest>\n')
 
-  def prefer_code_integrity(self, value):
-    return ' android:preferCodeIntegrity="%s"' % value
+  def use_embedded_dex(self, value):
+    return ' android:useEmbeddedDex="%s"' % value
 
   def test_manifest_with_undeclared_preference(self):
     manifest_input = self.manifest_tmpl % ''
-    expected = self.manifest_tmpl % self.prefer_code_integrity('true')
+    expected = self.manifest_tmpl % self.use_embedded_dex('true')
     output = self.run_test(manifest_input)
     self.assertEqual(output, expected)
 
-  def test_manifest_with_prefer_code_integrity(self):
-    manifest_input = self.manifest_tmpl % self.prefer_code_integrity('true')
+  def test_manifest_with_use_embedded_dex(self):
+    manifest_input = self.manifest_tmpl % self.use_embedded_dex('true')
     expected = manifest_input
     output = self.run_test(manifest_input)
     self.assertEqual(output, expected)
 
-  def test_manifest_with_not_prefer_code_integrity(self):
-    manifest_input = self.manifest_tmpl % self.prefer_code_integrity('false')
+  def test_manifest_with_not_use_embedded_dex(self):
+    manifest_input = self.manifest_tmpl % self.use_embedded_dex('false')
     self.assertRaises(RuntimeError, self.run_test, manifest_input)
 
 if __name__ == '__main__':
