Files
AndroidDeviceInfo/gen-db.py
2025-08-06 17:26:20 -07:00

91 lines
2.5 KiB
Python

import csv
import os
import sqlite3
import zipfile
import requests
from io import StringIO
# Constants
CSV_URL = "https://storage.googleapis.com/play_public/supported_devices.csv"
DB_PATH = "library/src/main/res/raw/android-devices.db"
ZIP_PATH = "database/android-devices.zip"
# Ensure output directory exists
os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
os.makedirs(os.path.dirname(ZIP_PATH), exist_ok=True)
def download_devices_csv(url=CSV_URL):
print("Downloading CSV from Google Play...")
response = requests.get(url)
response.encoding = "utf-16"
if response.status_code != 200:
raise Exception(f"Failed to fetch CSV. Status code: {response.status_code}")
return response.text
def parse_devices(csv_data):
print("Parsing CSV...")
reader = csv.reader(StringIO(csv_data))
next(reader) # Skip header
devices = []
for row in reader:
if len(row) == 4:
manufacturer, name, codename, model = row
devices.append((manufacturer, name, codename, model))
print(f"Parsed {len(devices)} devices.")
return devices
def create_database(devices):
print("Creating SQLite database...")
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# Drop old tables
cursor.execute("DROP TABLE IF EXISTS devices;")
cursor.execute("DROP TABLE IF EXISTS android_metadata;")
# Create android_metadata table
cursor.execute("""
CREATE TABLE android_metadata (
locale TEXT DEFAULT 'en_US'
);
""")
cursor.execute("INSERT INTO android_metadata (locale) VALUES ('en_US');")
# Create devices table
cursor.execute("""
CREATE TABLE devices (
_id INTEGER PRIMARY KEY,
manufacturer TEXT,
name TEXT,
codename TEXT,
model TEXT
);
""")
# Insert all device entries
cursor.executemany("""
INSERT INTO devices (manufacturer, name, codename, model)
VALUES (?, ?, ?, ?);
""", devices)
conn.commit()
conn.close()
print("Database populated successfully.")
def zip_database():
print(f"Zipping database to {ZIP_PATH}...")
with zipfile.ZipFile(ZIP_PATH, 'w', zipfile.ZIP_DEFLATED) as zipf:
zipf.write(DB_PATH, arcname=os.path.basename(DB_PATH))
print("Zip archive created.")
def main():
csv_data = download_devices_csv()
devices = parse_devices(csv_data)
create_database(devices)
zip_database()
print("Done.")
if __name__ == "__main__":
main()