Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provides a json list of files needed for Kimono build #4777

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added archive.zip
Binary file not shown.
38 changes: 38 additions & 0 deletions cobalt/android/kimono_snapshot.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"archive_datas": [
{
"files": [
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/base/natives/GEN_JNI.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/build/NativeLibraries.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/build/BuildConfig.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/gen/base_module/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/appcompat/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/appcompat/resources/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/fragment/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/core/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/ui/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content_shell/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content_shell_apk/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/media/R.java",
"../../cobalt/android/apk/app/proguard-rules.pro",
"obj/third_party/android_deps/chromium_play_services_availability_java.javac.jar",
"obj/components/metrics/metrics_java.javac.jar",
"../../content/shell/android/java/res/layout/shell_view.xml",
"../../content/shell/android/shell_apk/res/layout/content_shell_activity.xml",
"../../content/shell/android/java/res/drawable/progress.xml",
"snapshot_blob.bin",
"icudtl.dat",
"content_shell.pak",
"libcobalt_content_shell_content_view.so",
"libstarboard_jni_state.so",
"gen/cobalt/android/cobalt_manifest/AndroidManifest.xml",
],
"dirs": [
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars",
"lib.java",
"../../cobalt/android/apk/app/src/main/res"
]
}
]
}
5 changes: 5 additions & 0 deletions cobalt/android/kimono_snapshot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
kimono_snapshot.json lists files/dirs that Kimono build requires.
The file list was generated from snapshot-chrobalt-android.sh on google3.
All file/dir path are relative to out/android-#ARC_#BUILD. Each architecture/build requires its own snapshot.
The listed dirs contain more than what's needed by today's Kimono build because future build rule changes might add/remove Java dependencies easily. Copying entire dirs allow us to avoid changing the snapshot process frequently.
There are additional file move and modification operations needed during/after storing them in google3.
90 changes: 90 additions & 0 deletions snapshot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import json
import os
import zipfile

def zip_files_from_json(json_data, output_zip_name="archive.zip"):
"""Zips files and directories specified in a JSON structure.

Args:
json_data: A dictionary containing the JSON data.
output_zip_name: The name of the output zip file.
"""

try:
data = json.loads(json_data) # If json_data is a string
except json.JSONDecodeError:
data = json_data # If json_data is already a dictionary

with zipfile.ZipFile(output_zip_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
for archive_data in data.get("archive_datas", []):
files = archive_data.get("files", [])
dirs = archive_data.get("dirs", [])

for file_path in files:
if os.path.exists(file_path):
print(f"Adding file: {file_path}")
zipf.write(file_path, arcname=os.path.basename(file_path)) # Store only the file name in the archive
else:
print(f"Warning: File not found: {file_path}")

for dir_path in dirs:
if os.path.exists(dir_path):
print(f"Adding directory: {dir_path}")
for root, _, files_in_dir in os.walk(dir_path):
for file in files_in_dir:
file_path = os.path.join(root, file)
zipf.write(file_path, arcname=os.path.relpath(file_path, start=dir_path)) # Preserve directory structure within the archive
else:
print(f"Warning: Directory not found: {dir_path}")


# Example usage (assuming the JSON data is in a string variable called 'json_string'):
json_string = """
{
"archive_datas": [
{
"files": [
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/base/natives/GEN_JNI.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/build/NativeLibraries.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/build/BuildConfig.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/gen/base_module/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/appcompat/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/appcompat/resources/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/fragment/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/androidx/core/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/ui/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content_shell/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/content_shell_apk/R.java",
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars/org/chromium/media/R.java",
"../../cobalt/android/apk/app/proguard-rules.pro",
"obj/third_party/android_deps/chromium_play_services_availability_java.javac.jar",
"obj/components/metrics/metrics_java.javac.jar",
"../../content/shell/android/java/res/layout/shell_view.xml",
"../../content/shell/android/shell_apk/res/layout/content_shell_activity.xml",
"../../content/shell/android/java/res/drawable/progress.xml",
"snapshot_blob.bin",
"icudtl.dat",
"content_shell.pak",
"libcobalt_content_shell_content_view.so",
"libstarboard_jni_state.so",
"gen/cobalt/android/cobalt_manifest/AndroidManifest.xml"
],
"dirs": [
"gen/cobalt/android/cobalt_apk/generated_java/input_srcjars",
"lib.java",
"../../cobalt/android/apk/app/src/main/res"
]
}
]
}
"""

zip_files_from_json(json_string) # Creates archive.zip

# Or, if the JSON is already parsed as a Python dictionary:
import json
json_data = json.loads(json_string)
zip_files_from_json(json_data, "my_archive.zip") # Creates my_archive.zip
A

Loading