apkmitm / app.py
deepak191z's picture
Update app.py
cc2e390 verified
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)