Spaces:
Paused
Paused
| import streamlit as st | |
| import os | |
| import subprocess | |
| import shutil | |
| import requests | |
| # Function to process APK file | |
| def process_apk(input_path, output_dir): | |
| # Run apk-mitm command | |
| command = f"apk-mitm {input_path} -o {output_dir}" | |
| result = subprocess.run(command, shell=True, capture_output=True, text=True) | |
| return result | |
| # Streamlit app interface | |
| st.title("APK File Processor") | |
| # File upload | |
| uploaded_file = st.file_uploader("Upload APK file", type=['apk', 'xapk', 'apks']) | |
| # URL upload | |
| url_input = st.text_input("Or enter APK URL") | |
| if uploaded_file is not None or url_input: | |
| # Create directories if they don't exist | |
| upload_dir = "uploads" | |
| if not os.path.exists(upload_dir): | |
| os.makedirs(upload_dir) | |
| if uploaded_file is not None: | |
| # Save uploaded file | |
| input_path = os.path.join(upload_dir, uploaded_file.name) | |
| with open(input_path, "wb") as f: | |
| f.write(uploaded_file.read()) | |
| elif url_input: | |
| # Download APK from URL | |
| st.write("Downloading APK from URL...") | |
| response = requests.get(url_input) | |
| if response.status_code == 200: | |
| input_path = os.path.join(upload_dir, os.path.basename(url_input)) | |
| with open(input_path, "wb") as f: | |
| f.write(response.content) | |
| else: | |
| st.error("Failed to download APK from URL. Please check the URL and try again.") | |
| st.stop() | |
| # Define output directory for the patched APK | |
| output_dir = upload_dir | |
| # Process APK | |
| st.write("Processing APK...") | |
| result = process_apk(input_path, output_dir) | |
| if result.returncode == 0: | |
| st.success("APK processed successfully!") | |
| st.write("Processing result:") | |
| st.text(result.stdout) | |
| # Extract the patched APK file name from the stdout | |
| output_file_name = result.stdout.split("Patched file: ")[-1].strip() | |
| output_path = os.path.join(output_dir, output_file_name) | |
| # Check if the processed APK file exists | |
| if os.path.exists(output_path): | |
| st.write(f"Processed APK file found at: {output_path}") | |
| # Provide download link for the patched APK file | |
| with open(output_path, "rb") as f: | |
| file_data = f.read() | |
| if file_data: | |
| st.write("File data read successfully.") | |
| st.download_button( | |
| label="Download Patched APK", | |
| data=file_data, | |
| file_name=os.path.basename(output_path), | |
| mime="application/vnd.android.package-archive" | |
| ) | |
| else: | |
| st.error("Failed to read file data.") | |
| else: | |
| st.error("Processed APK file not found. Please try again.") | |
| else: | |
| st.error(f"Error processing APK: {result.stderr}") | |
| # Clean up the uploaded and processed files | |
| def cleanup_files(input_path, output_path): | |
| if os.path.exists(input_path): | |
| os.remove(input_path) | |
| if os.path.exists(output_path): | |
| os.remove(output_path) | |
| cleanup_files(input_path, output_path) |