# Copyright 2015 The Bazel Authors. All rights reserved.
#
# 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.

"""Removes the resources from a resource APK for incremental deployment.

The reason this utility exists is that the only way we can build a binary
AndroidManifest.xml is by invoking aapt, which builds a whole resource .apk.

Thus, in order to build the AndroidManifest.xml for an incremental .apk, we
invoke aapt, then extract AndroidManifest.xml from its output.
"""

import zipfile

# Do not edit this line. Copybara replaces it with PY2 migration helper.
from absl import app
from absl import flags

flags.DEFINE_string("input_resource_apk", None, "The input resource .apk")
flags.DEFINE_string("output_resource_apk", None, "The output resource .apk")

FLAGS = flags.FLAGS
HERMETIC_TIMESTAMP = (2001, 1, 1, 0, 0, 0)


def main(unused_argv):
  with zipfile.ZipFile(FLAGS.input_resource_apk) as input_zip:
    with input_zip.open("AndroidManifest.xml") as android_manifest_entry:
      android_manifest = android_manifest_entry.read()

  with zipfile.ZipFile(FLAGS.output_resource_apk, "w") as output_zip:
    # Timestamp is explicitly set so that the resulting zip file is hermetic
    zipinfo = zipfile.ZipInfo(
        filename="AndroidManifest.xml",
        date_time=HERMETIC_TIMESTAMP)
    output_zip.writestr(zipinfo, android_manifest)


if __name__ == "__main__":
  app.run(main)
