diff --git a/apexer/Android.bp b/apexer/Android.bp
index 20d6f27..a5bc3c6 100644
--- a/apexer/Android.bp
+++ b/apexer/Android.bp
@@ -115,6 +115,7 @@
     ],
     data: [
         ":com.android.example.apex",
+        ":com.android.example-no_version.apex",
         ":com.android.example-legacy.apex",
         ":com.android.example-logging_parent.apex",
         ":com.android.example-overridden_package_name.apex",
diff --git a/apexer/apex_manifest.py b/apexer/apex_manifest.py
index 4ee1870..0291437 100644
--- a/apexer/apex_manifest.py
+++ b/apexer/apex_manifest.py
@@ -26,13 +26,7 @@
     self.errmessage = errmessage
 
 
-def ValidateApexManifest(file):
-  try:
-    with open(file, "rb") as f:
-      manifest_pb = apex_manifest_pb2.ApexManifest()
-      manifest_pb.ParseFromString(f.read())
-  except message.DecodeError as err:
-    raise ApexManifestError(err)
+def ValidateApexManifest(manifest_pb):
   # Checking required fields
   if manifest_pb.name == "":
     raise ApexManifestError("'name' field is required.")
@@ -43,7 +37,15 @@
     raise ApexManifestError(
         "'noCode' can't be true when either preInstallHook or postInstallHook is set"
     )
-  return manifest_pb
+
+def ParseApexManifest(file):
+  try:
+    with open(file, "rb") as f:
+      manifest_pb = apex_manifest_pb2.ApexManifest()
+      manifest_pb.ParseFromString(f.read())
+      return manifest_pb
+  except message.DecodeError as err:
+    raise ApexManifestError(err)
 
 def fromApex(apexFilePath):
   with zipfile.ZipFile(apexFilePath, 'r') as apexFile:
diff --git a/apexer/apexer.py b/apexer/apexer.py
index 65ea25f..7d767a9 100644
--- a/apexer/apexer.py
+++ b/apexer/apexer.py
@@ -36,6 +36,7 @@
 import glob
 from apex_manifest import ValidateApexManifest
 from apex_manifest import ApexManifestError
+from apex_manifest import ParseApexManifest
 from manifest import android_ns
 from manifest import find_child_with_attribute
 from manifest import get_children_with_tag
@@ -187,6 +188,12 @@
           'Add testOnly=true attribute to application element in '
           'AndroidManifest file.')
   )
+  parser.add_argument(
+    '--apex_version',
+    type=int,
+    help='APEX version to use if it\'s not set in manifest'
+  )
+
 
   return parser.parse_args(argv)
 
@@ -770,14 +777,11 @@
     shutil.copyfile(src, dst)
 
   try:
-    manifest_apex = ValidateApexManifest(args.manifest)
+    manifest_apex = CreateApexManifest(args.manifest, args.apex_version)
   except ApexManifestError as err:
     print("'" + args.manifest + "' is not a valid manifest file")
     print(err.errmessage)
     return False
-  except IOError:
-    print("Cannot read manifest file: '" + args.manifest + "'")
-    return False
 
   # Create content dir and manifests dir, the manifests dir is used to
   # create the payload image
@@ -861,6 +865,15 @@
 
   return True
 
+def CreateApexManifest(manifest_path, default_version):
+  try:
+    manifest_apex = ParseApexManifest(manifest_path)
+    if default_version is not None and manifest_apex.version == 0:
+      manifest_apex.version = default_version
+    ValidateApexManifest(manifest_apex)
+    return manifest_apex
+  except IOError:
+    raise ApexManifestError("Cannot read manifest file: '" + manifest_path + "'")
 
 class TempDirectory(object):
 
diff --git a/apexer/apexer_test.py b/apexer/apexer_test.py
index da5becd..3d311d0 100644
--- a/apexer/apexer_test.py
+++ b/apexer/apexer_test.py
@@ -19,7 +19,6 @@
 import hashlib
 import logging
 import os
-import re
 import shutil
 import stat
 import subprocess
@@ -28,6 +27,7 @@
 from zipfile import ZipFile
 
 from apex_manifest import ValidateApexManifest
+from apex_manifest import ParseApexManifest
 
 logger = logging.getLogger(__name__)
 
@@ -35,6 +35,7 @@
 TEST_APEX_LEGACY = "com.android.example-legacy.apex"
 TEST_APEX_WITH_LOGGING_PARENT = "com.android.example-logging_parent.apex"
 TEST_APEX_WITH_OVERRIDDEN_PACKAGE_NAME = "com.android.example-overridden_package_name.apex"
+TEST_APEX_NO_VERSION = "com.android.example-no_version.apex"
 
 TEST_PRIVATE_KEY = os.path.join("testdata", "com.android.example.apex.pem")
 TEST_X509_KEY = os.path.join("testdata", "com.android.example.apex.x509.pem")
@@ -347,7 +348,8 @@
         cmd.extend(['--algorithm', 'SHA256_RSA4096'])
         cmd.extend(['--hash_algorithm', 'sha256'])
         cmd.extend(['--key', os.path.join(get_current_dir(), TEST_PRIVATE_KEY)])
-        manifest_apex = ValidateApexManifest(container_files["apex_manifest.pb"])
+        manifest_apex = ParseApexManifest(container_files["apex_manifest.pb"])
+        ValidateApexManifest(manifest_apex)
         cmd.extend(['--prop', 'apex.key:' + manifest_apex.name])
         # Set up the salt based on manifest content which includes name
         # and version
@@ -425,5 +427,39 @@
     def test_apex_with_overridden_package_name(self):
       self._run_build_test(TEST_APEX_WITH_OVERRIDDEN_PACKAGE_NAME)
 
+    def test_apex_default_version(self):
+        default_version = 12345
+        apex_file_path = os.path.join(get_current_dir(), TEST_APEX_NO_VERSION + ".apex")
+        container_files = self._get_container_files(apex_file_path)
+        payload_dir = self._extract_payload(apex_file_path)
+
+        manifest_pb = ParseApexManifest(container_files["apex_manifest.pb"])
+        manifest_pb.ClearField("version")
+        with open(container_files["apex_manifest.pb"], "wb") as f:
+            f.write(manifest_pb.SerializeToString())
+
+        repack_apex_file_path = self._run_apexer(container_files, payload_dir,
+                                                 ["--apex_version", str(default_version)])
+        repack_container_files = self._get_container_files(repack_apex_file_path)
+        manifest_apex = ParseApexManifest(repack_container_files["apex_manifest.pb"])
+        self.assertEqual(manifest_apex.version, default_version)
+
+    def test_apex_doesnt_override_existing_version(self):
+        default_version = 12345
+        apex_file_path = os.path.join(get_current_dir(), TEST_APEX + ".apex")
+        container_files = self._get_container_files(apex_file_path)
+        payload_dir = self._extract_payload(apex_file_path)
+
+        manifest_pb = ParseApexManifest(container_files["apex_manifest.pb"])
+        with open(container_files["apex_manifest.pb"], "wb") as f:
+            f.write(manifest_pb.SerializeToString())
+
+        repack_apex_file_path = self._run_apexer(container_files, payload_dir,
+                                                 ["--apex_version", str(default_version)])
+        repack_container_files = self._get_container_files(repack_apex_file_path)
+        manifest_apex = ParseApexManifest(repack_container_files["apex_manifest.pb"])
+        self.assertEqual(manifest_apex.version, 1)
+
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
diff --git a/apexer/testdata/Android.bp b/apexer/testdata/Android.bp
index 951f849..18e4bbe 100644
--- a/apexer/testdata/Android.bp
+++ b/apexer/testdata/Android.bp
@@ -76,3 +76,15 @@
     package_name: "com.android.overridden.example.apex",
     updatable: false,
 }
+
+apex {
+    name: "com.android.example-no_version.apex",
+    manifest: "manifest-no-version.json",
+    file_contexts: ":apex.test-file_contexts",
+    prebuilts: ["sample_prebuilt_file"],
+    key: "com.android.example.apex.key",
+    certificate: ":com.android.example.apex.certificate",
+    installable: false,
+    updatable:false,
+    generate_hashtree: false,
+}
\ No newline at end of file
diff --git a/apexer/testdata/manifest-no-version.json b/apexer/testdata/manifest-no-version.json
new file mode 100644
index 0000000..c08f928
--- /dev/null
+++ b/apexer/testdata/manifest-no-version.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.example.apex",
+  "version": 0
+}
