603 okumalar
603 okumalar

Bu Yasadışı Android Hack Seni Daha İyi Bir Ebeveyn Yapacak

ile Sergei Shaikin14m2025/04/16
Read on Terminal Reader

Çok uzun; Okumak

Dijital Uyku Paradoksu, hiç kimse hakkında konuşmayan bir sorun. Milyonlar şimdi YouTube videolarına, podcastlara veya akış uygulamalarına uykuya dalıyor. Android cihazınıza kablosuz olarak bağlanıp ses hacmini izleyen bir senkron oluşturdum.
featured image - Bu Yasadışı Android Hack Seni Daha İyi Bir Ebeveyn Yapacak
Sergei Shaikin HackerNoon profile picture
Şöyle

Bu makale yalnızca eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptığınız şeylerden sorumlu olduğunuzu unutmayın.

Şöyle

Bu makale yalnızca eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptığınız şeylerden sorumlu olduğunuzu unutmayın.

Kimsenin Konuşmadığı Sorun

Dijital Uyku Paradoksu Ekranların uyku rutinlerini domine ettiği bir çağda, milyonlarca insan şimdi YouTube videolarına, podcastlara veya akış uygulamalarına uykuya dalıyor.


Bununla birlikte, bu alışkanlığın gizli bir maliyeti vardır: özellikle çocuklar için kontrolsüz ses maruz kalması. bir ebeveyn ve geliştiricisi olarak, bu sorunu ilk elden karşı karşıya kaldım - çocuğumun gece geç saatlerinde YouTube binges huzursuz uyku ve sabah sinirlenmesine neden oldu.


Google Play Store'daki ücretsiz uygulamalar, örneğinVolüm SınırlamasıveVolume KontrolüBelki ticari uygulamalar daha iyi olurdu, ama bunu test etmedim çünkü para maliyeti vardı, genellikle biraz.

The Hack (Totally Illegal...ish) Hakkında

Android cihazınıza kablosuz bir şekilde bağlanır ve sesini izler bir senkron oluşturdum. Eğer çok gürültülü olursa - onu hafifçe düşürür. hiçbir durdurma videoları, hiçbir ekran patlaması, hiçbir kullanıcı etkileşimi. Sadece sessiz sihir.


Evet, teknik olarak, bir geliştirici aracı olan Wi-Fi üzerinde ADB (Android Debug Bridge) kullanır ve yatmadan önce ebeveynlik için tasarlanmamıştır.

Gelişim ortamınızı oluşturun

Bir geliştirme ortamı ve bağlantı kurmak, kodun içine dalmadan önce çok önemlidir.Bu, geliştirme sürecini kolaylaştırmak için gerekli tüm araçlara ve kitaplıklara sahip olmanızı sağlayacaktır.


macOS kullanıyorum, bu yüzden hikayedeki tüm örnekler bu sistemle olacak, ancak Windows kullanımı, süreci macOS'a kıyasla çok daha zorlaştırmaz. tek fark, macOS işletim sisteminde Python'un zaten yüklendiği ve Windows'ta Python'u buradan kendiniz yüklemeniz gerektiğidir:Windows Python Hakkında

İşte daha ayrıntılı bir bölünme:

    Şöyle
  1. Download and Extract Platform Tools: Go to the official Android Developers website: Navigate to Android SDK Platform-Tools. Download the SDK Platform Tools: Download the latest version for your operating system (Windows, macOS, or Linux). Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows).
  2. Şöyle
  3. Platform Aracıları Sisteminizin YOLU: Windows: “Environment Variables” ayarlarını açın (Başlangıç menüsünde “Environment Variables” için arama). “Environment Variables” bölümüne tıklayın. “System variables” bölümüne “Environment Variables” bölümüne tıklayın, “Path” değişkenini bulun, seçin ve “Edit” tıklayın. Örneğin: “PATH=$PATH:/path to/platform-tools export”. macOS/Linux: Terminalinizi açın. Platform-tools dosyasına yol ekleyin (örneğin, ~/.bashrc, ~/.zshrc). Örneğin: export PATH=$PATH:/path/to/platform-tools export. PATH=PATH:/us
  4. Şöyle
  5. ADB Kurulumunu doğrulayın: Bir komut satır arayüzü (CLI) açın: Windows Arama Çubuğu (Windows OS) kullanılarak: Başlat düğmesine veya görev çubuğundaki büyüleyici cam simgesine tıklayın. Arama çubuğunda "cmd" yazın. "Command Prompt" sonuçuna tıklayın. Yönetici olarak çalıştırmak için arama sonuçlarında "Command Prompt" üzerine sağ tıklayın ve "Administrator olarak çalıştır" seçin. Spotlight Search (macOS) kullanılarak: Menü çubuğundaki büyüleyici cam simgesine tıklayın (veya Cmd+Space'ye tıklayın). "Terminal" yazın ve açmak için iki tıklayın. Adb türü ve Enter tuşuna basın. adb Adb doğru şekilde yüklendiğinde ADB yardımı
  6. Şöyle
  7. Android Cihazınızda USB Debugging'i etkinleştirin: Android Cihazınızda "Ayarlar" sayfasına gidin. Aşağı kaydırın ve "Telefon Hakkında" seçeneğini seçin. "Build Number"'i bulun ve Geliştirici Seçenekleri'nin kilidini açmak için 7 veya daha fazla kez dokunun. Ana "Ayarlar" sayfasına dönün ve şimdi "Geliştirici Seçenekleri"yi göreceksiniz. "Geliştirici Seçenekleri"yi seçin. "USB Debugging"'a kaydırın ve açın.
  8. Şöyle

Bundan sonra, sadece komut satırında çalışacağız. Benim durumumda, bu terminal olacak.

Bağlantınızı kurmak

Bir sonraki adım mobil cihazınızı PC'nize bağlamak olacaktır.Bu iki parçadan oluşan nispeten basit bir adımdır:


    Şöyle
  • kablo bağlantıları;
  • Şöyle
  • Wireless bağlantı
  • Şöyle

Wire Bağlantısı :

Mobil cihazınızı bilgisayarınıza kablo (USB A/USB C veya USB A/micro USB, vb.) kullanarak bağlamanız gerekir.


Ardından, terminali açın ve aşağıdaki komutu yazın:

adb devices

You see my device, which is connected by wire to my personal computer. In your case, this "RF8T60M9SBF" number will be a completely different number.


For now, we are ready to enable TCP/IP mode with the following command:

adb tcpip 5555


Eğer zaten terminaldeysek, Wi-Fi ağındaki mobil cihazın IP adresini, mobil cihazı izlemeden kontrol edebiliriz.Daha sonra kablosuz bir bağlantı kurarken ihtiyacımız olan IP adresini bulmak için aşağıdaki komutu çalıştıralım:

adb -d shell "ip route | awk '/wlan0/ {print \$9}'"

My IP address is 10.0.0.108. In your case it will be another one.

Kablosuz Bağlantı :

Cihazınızın IP adresine sahip olduğunuzda, kablosuz olarak bağlanma zamanı geldi. Artık kablolu bir bağlantıya ihtiyacınız yok.adb tcpip 5555, USB kablosunu güvenli bir şekilde çıkarabilirsiniz.Bütün büyünün geri kalanı Wi-Fi üzerinden olacaktır.


Akıllı telefonunuzun ve bilgisayarınızın aynı Wi-Fi ağında olduğundan emin olun.

adb connect <DEVICE_IP>:5555


Örneğin, cihazınızın IP10.0.0.108Giriş yapacaksınız :

adb connect 10.0.0.108:5555


Her şey yolunda giderse, şöyle bir mesaj göreceksiniz:

Here we are.

Let’s Talk About the Problem Again

Bir adım geri dönelim ve çözdüklerimizi hatırlayalım. Çocuğunuz sessiz bir video izlerken huzurlu bir şekilde uykuya dalar - belki bir yatak hikayesi veya biraz rahatlatıcı sesler. Ama iki saat sonra? YouTube'un otomatik oynaması girer, sesli bir reklam dalgası, ya da yüksek enerjili bir çizgi roman sesi onları uyandırır. Onlar groggy. Sen groggy. Herkes günlerini zaten bozulmuş başlar. Neye ihtiyacımız vardı sessiz bir koruyucusu - görünmez ve güvenilir bir şey.

Bir bakışta mimarlık

İşte her şeyin nasıl bağlantılı olduğunu gösteren hızlı bir diagram:


Şöyle

Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android cihazına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır.

Şöyle

Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android cihazına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır.

This minimalistic setup allows for seamless automation:Python Script runs on your laptop or mini PC.


Sihirbazlık yapan yazar

Çözümün temeli, Android cihazınızla Wi-Fi üzerinden ADB aracılığıyla iletişim kuran bir Python senaryosudur.


Her 30 saniyede, şu anki müzik akışı hacmi kontrol eder. eğer hacim 5'in üzerinde ise (Android genellikle 15 noktalı bir ölçekte kullanır), senaryo onu hafifçe düşürür - bir kerede bir adım, kısa kesintilerle. eğer hacim zaten 5 veya daha düşükse, sadece bekler - hacim tekrar yükselirse sessizce bekler.


En iyi kısmı? Manuel değişikliklere saygı gösterir. Birisi ses seviyesini kendisi düşürürse, senaryo fark eder ve rahatsız etmez. Sessizdir. Adaptatiftir. Görünmezdir – iyi bir yatıştırma asistanının olması gibi.

The Script’s Evolution: Tiny Hack’den Güvenilir Araç’a

Bu senaryoyu ilk yazdığımda sadece birkaç satır uzunluğundaydım.


Böyle bir şey görünüyordu:

import subprocess
import time
import re

def get_stream_volume():
    cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    match = re.search(r'streamVolume:(\d+)', result.stdout)
    return int(match.group(1)) if match else None

def set_volume(level):
    cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
    subprocess.run(cmd, shell=True)
    print(f"Volume set to {level}")

def monitor_volume():
    while True:
        volume = get_stream_volume()
        if volume is None:
            print("Failed to get volume level. Retrying...")
            time.sleep(5)
            continue

        print(f"Current volume: {volume}")
        
        if volume == 15:
            for vol in range(14, 4, -1):
                set_volume(vol)
                time.sleep(30)
        
        while get_stream_volume() == 5:
            print("Volume is at 5, monitoring every 60 seconds...")
            time.sleep(60)

if __name__ == "__main__":
    monitor_volume()
os.system("adb shell dumpsys audio | grep -i 'streamVolume'")


Ne olursa olsun, cihaz gece ortasında bağlanmazsa ne olursa olsun? ADB bir zaman geçirmezse ne olursa olsun? telefon çiftleştirilmezse ne olursa olsun? senaryo herkes uyurken çökerse ne olur?


Ama senaryo gelişti.

    Şöyle
  • Bazen, aygıt bağlanmadı, bu yüzden adb connect ip:port ekledim.
  • Şöyle
  • Bazen ADB gece yarısı çöktü. istisnalar ve geri dönüşler ekledim.
  • Şöyle
  • Evet evet, bunu da ekledim.
  • Şöyle
  • Dosya kayıtları ve konsol kayıtları?
  • Şöyle
  • Şimdi, senaryo da bunu izliyor - ve sadece gerektiğinde müdahale ediyor.
  • Şöyle
  • Yüksek vs. düşük voltaj seviyeleri için farklı aralıklar.
  • Şöyle
  • Ve evet, şık kapatma Ctrl + C.
  • Şöyle


Birkaç satır senaryo olarak başlayan şey, telefonunuzu gözetleyen küçük bir bekçi haline geldi - bu yüzden yapmanıza gerek yok.

import subprocess
import time
import re
import logging
from datetime import datetime

logging.basicConfig(
    filename='volume_control.log',
    level=logging.INFO,
    format='[%(asctime)s] %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

ADB_DEVICE = "10.0.0.108:5555"

def log(message):
    timestamp = get_timestamp()
    print(f'[{timestamp}] {message}')
    logging.info(message)

def get_timestamp():
    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')

def connect_adb():
    subprocess.run(f"adb connect {ADB_DEVICE}", shell=True)
    log(f"Reconnected to ADB at {ADB_DEVICE}")

def get_stream_volume():
    cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    match = re.search(r'streamVolume:(\d+)', result.stdout)
    return int(match.group(1)) if match else None

def safe_get_stream_volume(retries=3, delay=5):
    for attempt in range(retries):
        volume = get_stream_volume()
        if volume is not None:
            return volume
        log(f"Attempt {attempt + 1}: Failed to get volume. Retrying after reconnect...")
        connect_adb()
        time.sleep(delay)
    log("All attempts failed. Giving up temporarily.")
    return None

def set_volume(level):
    cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
    subprocess.run(cmd, shell=True)
    log(f"Volume set to {level}, waiting 30 seconds...")

def monitor_volume():
    while True:
        volume = safe_get_stream_volume()
        if volume is None:
            log("Initial volume read failed. Retrying in 30 seconds...")
            time.sleep(30)
            continue

        log(f"Current volume: {volume}")

        while volume > 5:
            set_volume(volume - 1)
            time.sleep(30)
            volume = safe_get_stream_volume()
            if volume is None:
                log("Failed to read volume during decreasing.")
                break 

        while True:
            volume = safe_get_stream_volume()
            if volume is None:
                log("Failed to read volume during monitoring.")
                time.sleep(30)
                break
            if volume > 5:
                log(f"Volume increased to {volume}, restarting decreasing")
                break
            log(f"Volume is at {volume}, monitoring every 60 seconds...")
            time.sleep(60)

if __name__ == "__main__":
    try:
        monitor_volume()
    except KeyboardInterrupt:
        log("Script stopped by user (Ctrl+C)")
    except Exception as e:
        log(f"Unexpected error: {e}")
    finally:
        log("Script exited.")


Bugün, senkron üretim düzeyinde ve açık kaynaklıdır. ancak bu satırı değiştirmek için ADB_DEVICE = "10.0.0.108:5555" senkronun IP adresinizle“İletişiminizi kurmak”ve .

Senaryo çalıştırmak: Cron gibi iki kolay seçenek

Senaryoyu çalıştırmak için iki ana yolu vardır:

    Şöyle
  1. Python ile doğrudan
  2. Şöyle


Python 3 yüklü ise, sadece çalıştırabilirsiniz:

python3 reduce_volume.py


Hemen başlayacak ve işini arka planda sessizce yapacaktır.

    Şöyle
  1. Standalone Executable olarak
  2. Şöyle


Python yüklü olmayan biriyle paylaşmak ister misiniz?


Senaryoyu bir standalone'a dönüştürebilirsiniz.appmacOS veya.exeWindows kullanırken,Piyasalar: Hakkında

pyinstaller --onefile reduce_volume.py

Bu, bir çift tıklama ile başlatılabilecek taşınabilir bir uygulama oluşturacaktır - Python gerekmez.


    Şöyle
  1. Hatta fancy iseniz bir cron iş veya görev programlayıcısı ile planlayın.
  2. Şöyle

Bir şey daha: Uzaktan ADB Sınırlamaları

Wi-Fi üzerinden ADB'nin kırılgan olabileceğine dikkat etmek önemlidir.


Uzaktan bağlantınız kesilirse:

    Şöyle
  • Telefonu yeniden başlatıyor.
  • Şöyle
  • Wi-Fi ağı değişiyor
  • Şöyle
  • Geliştirici Modu veya USB Debugging devre dışı bırakılır.
  • Şöyle
  • Cihaz ADB aktivitesi olmadan çok uzun süre çalışır (bazı sistemler otomatik olarak aktif olmayan bağlantıları başlatır).
  • Şöyle
  • Ve diğer birçok...
  • Şöyle


Eğer senaryo çalışmıyorsa, sadece adımları tekrarlayın.“İletişiminizi kurmak”: Hakkında

    Şöyle
  1. Mobil cihazı kablo ile kişisel bilgisayarınıza bağlayın.
  2. Şöyle
  3. Adb tcpip 5555 Adb tcpip 5555 Adb tcpip 5555 Adb tcpip 5555
  4. Şöyle
  5. Adb Connect <DEVICE_IP> 5555 indir
  6. Şöyle
adb connect 10.0.0.108:5555

İşe geri döneceksin.

Son Düşünceler

Bu hack, çocuğunuzun eğlencesini sessizleştirmekle ilgili değildir. uykularını - ve aklınızı - beklenmedik teknoloji sürprizlerinden korumakla ilgilidir.


Bu küçük bir senaryo olabilir, ancak ailem ve benim için, hayatımı değiştiren bir şeydi. Artık 2 AM YouTube uyanıklığı yok. Artık korkunç sabahlar yok. Sadece huzurlu geceler ve ince bir parental otomasyon.


    Şöyle
  • Bu biraz hacker mıdır?
  • Şöyle
  • Güvenilir bir şekilde çalışıyor mu?
  • Şöyle
  • Teknik olarak evet, ancak gri bir bölgede çalışır (ADB erişimi ve otomatik kontrol, Google tarafından nihai kullanıcılar için resmi olarak desteklenmez).
  • Şöyle
  • Yorgun bir ebeveynin (veya kendisinin) daha iyi uyumasına yardımcı olduğu sürece - buna değer.
  • Şöyle
  • Bu çok subtil.
  • Şöyle
  • Görünmez bir şey.
  • Şöyle
  • Ve işe yarıyor.
  • Şöyle


Kaynak kodu, tek tıklama kurulum veya geliştirilmiş bir sürüm istiyorsanız bana bildirin.


Ve hey - iyi uyumak. sen bunu kazandın.

Şöyle

P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlamak, farklı profillere uyum sağlamak, cihaz aktivitesini izlemek, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak.

Şöyle

P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlamak, farklı profillere uyum sağlamak, cihaz aktivitesini izlemek, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks