diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index 55f5ab5..4c9c40c 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -713,6 +713,10 @@
     filepath = re.sub('^gen', '$(genDir)', filepath)
     return filepath
 
+  # Iterate through all the args and apply function
+  def _update_all_args(self, func):
+    self.target.args = [func(arg) for arg in self.target.args]
+
   def get_args(self):
     return self.target.args
 
@@ -759,8 +763,17 @@
     return super().get_args()
 
 class VersionSanitizer(BaseActionSanitizer):
+  def _sanitize_version_filepath(self, arg):
+    if arg.startswith('../../'):
+      arg = self._sanitize_filepath(arg)
+      arg = self._add_location_tag(arg)
+    return arg
+
   def get_args(self):
     self._set_value_arg('-o', '$(out)')
+    # args for the version.py contain file path without leading --arg key. So apply sanitize
+    # function for all the args.
+    self._update_all_args(self._sanitize_version_filepath)
     return super().get_args()
 
 def get_action_sanitizer(target):
@@ -837,10 +850,7 @@
     # android_chrome_version.py is not specified in anywhere but version.py imports this file
     module.tool_files.add('build/util/android_chrome_version.py')
     for i, val in enumerate(target.args):
-      if val.startswith('../../'):
-        filename = re.sub('^\.\./\.\./', '', val)
-        target.args[i] = '$(location %s)' % filename
-      elif val == '-e':
+      if val == '-e':
         # arg for -e EVAL option should be passed in -e PATCH_HI=int(PATCH)//256 format.
         target.args[i + 1] = '%s=\'%s\'' % (target.args[i + 1], target.args[i + 2])
         target.args[i + 2] = ''
