diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp
index 3e39989..339a7d3 100644
--- a/core/jni/android_app_backup_FullBackup.cpp
+++ b/core/jni/android_app_backup_FullBackup.cpp
@@ -111,10 +111,10 @@
         return (jint) -1;
     }
 
-    off_t tarSize = 0;
+    off64_t tarSize = 0;
     jint err = write_tarfile(packageName, domain, rootpath, path, &tarSize, writer);
     if (!err) {
-        //ALOGI("measured [%s] at %lld", path.string(), (long long) tarSize);
+        ALOGI("measured [%s] at %lld", path.string(), (long long)tarSize);
         env->CallVoidMethod(dataOutputObj, sFullBackupDataOutput.addSize, (jlong) tarSize);
     }
 
diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp
index 02c85aa..3893041 100644
--- a/libs/androidfw/Android.bp
+++ b/libs/androidfw/Android.bp
@@ -155,6 +155,7 @@
         android: {
             srcs: [
                 "tests/BackupData_test.cpp",
+		"tests/BackupHelpers_test.cpp",
                 "tests/ObbFile_test.cpp",
                 "tests/PosixUtils_test.cpp",
             ],
diff --git a/libs/androidfw/BackupHelpers.cpp b/libs/androidfw/BackupHelpers.cpp
index 8bfe2b6..e80e948 100644
--- a/libs/androidfw/BackupHelpers.cpp
+++ b/libs/androidfw/BackupHelpers.cpp
@@ -479,7 +479,7 @@
 }
 
 int write_tarfile(const String8& packageName, const String8& domain,
-        const String8& rootpath, const String8& filepath, off_t* outSize,
+        const String8& rootpath, const String8& filepath, off64_t* outSize,
         BackupDataWriter* writer)
 {
     // In the output stream everything is stored relative to the root
diff --git a/libs/androidfw/include/androidfw/BackupHelpers.h b/libs/androidfw/include/androidfw/BackupHelpers.h
index 2da247b..a0fa136 100644
--- a/libs/androidfw/include/androidfw/BackupHelpers.h
+++ b/libs/androidfw/include/androidfw/BackupHelpers.h
@@ -137,7 +137,7 @@
         char const* const* files, char const* const *keys, int fileCount);
 
 int write_tarfile(const String8& packageName, const String8& domain,
-        const String8& rootPath, const String8& filePath, off_t* outSize,
+        const String8& rootPath, const String8& filePath, off64_t* outSize,
         BackupDataWriter* outputStream);
 
 class RestoreHelperBase
diff --git a/libs/androidfw/tests/BackupHelpers_test.cpp b/libs/androidfw/tests/BackupHelpers_test.cpp
new file mode 100644
index 0000000..86b7fb3
--- /dev/null
+++ b/libs/androidfw/tests/BackupHelpers_test.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "BackupHelpers_test"
+#include <androidfw/BackupHelpers.h>
+
+#include <gtest/gtest.h>
+
+#include <fcntl.h>
+#include <utils/String8.h>
+#include <android-base/file.h>
+
+namespace android {
+
+class BackupHelpersTest : public testing::Test {
+protected:
+
+    virtual void SetUp() {
+    }
+    virtual void TearDown() {
+    }
+};
+
+TEST_F(BackupHelpersTest, WriteTarFileWithSizeLessThan2GB) {
+  TemporaryFile tf;
+  // Allocate a 1 KB file.
+  off64_t fileSize = 1024;
+  ASSERT_EQ(0, posix_fallocate64(tf.fd, 0, fileSize));
+  off64_t tarSize = 0;
+  int err = write_tarfile(/* packageName */ String8("test-pkg"), /* domain */ String8(""), /* rootpath */ String8(""), /* filePath */ String8(tf.path), /* outSize */ &tarSize, /* writer */ NULL);
+  ASSERT_EQ(err, 0);
+  // Returned tarSize includes 512 B for the header.
+  off64_t expectedTarSize = fileSize + 512;
+  ASSERT_EQ(tarSize, expectedTarSize);
+}
+
+TEST_F(BackupHelpersTest, WriteTarFileWithSizeGreaterThan2GB) {
+  TemporaryFile tf;
+  // Allocate a 2 GB file.
+  off64_t fileSize = 2ll * 1024ll * 1024ll * 1024ll + 512ll;
+  ASSERT_EQ(0, posix_fallocate64(tf.fd, 0, fileSize));
+  off64_t tarSize = 0;
+  int err = write_tarfile(/* packageName */ String8("test-pkg"), /* domain */ String8(""), /* rootpath */ String8(""), /* filePath */ String8(tf.path), /* outSize */ &tarSize, /* writer */ NULL);
+  ASSERT_EQ(err, 0);
+  // Returned tarSize includes 512 B for the header.
+  off64_t expectedTarSize = fileSize + 512;
+  ASSERT_EQ(tarSize, expectedTarSize);
+}
+}
+
