91 lines
2.5 KiB
Python
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()
|
|
|