Yeni tarih

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

Disclaimer: Bu makale sadece eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptıklarınızın sorumluluğunu unutmayın.

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

Hiç Kimsenin Konuşmadığı Sorun

Dijital Uyku Paradoksu Ekranların uyku rutinlerine hakim olduğu bir çağda, milyonlarca kişi artık YouTube videolarına, podcastlara veya akış uygulamalarına uykuya dalıyor.


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


Google Play Mağazasında ücretsiz uygulamalar, Volume Limiter, Volume Control bir başarısızlık oldu: çöktü, ayarları yoktu, ya da çok karıştırıcıydı. Belki ticari uygulamalar daha iyi olurdu, ancak bunu para maliyeti olduğu için test ettim.

The Hack (Totally Illegal...ish)

Hakkında

Android cihazınıza kablosuz olarak bağlanıp ses seviyesini izleyen bir senkron oluşturdum. Eğer çok yüksekse — onu hafifçe düşürür. hiçbir durdurma videoları, hiçbir ekran parlayan, hiçbir kullanıcı etkileşimi. Sadece sessiz sihir.


Evet, teknik olarak, geliştiriciler için bir araç olan Wi-Fi üzerinde ADB (Android Debug Bridge) kullanıyor ve yatmadan önce ebeveynlik için tasarlanmıyor.

Geliştirme Çevrenizi Kurmak

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.



Ben 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 zaten yüklü olmasıdır ve Windows'ta, burada Python kendiniz yüklemeniz gerekir: Windows Python

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

  1. Download and Extract Platform Tools:

    1. Go to the official Android Developers website:

      1. Navigate to Android SDK Platform-Tools.
    2. Download the SDK Platform Tools:

      1. Download the latest version for your operating system (Windows, macOS, or Linux).
      2. Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows).
    C:\adb
    
  2. Add Platform Tools to your System's PATH:

    1. Windows:

      1. Open the "Environment Variables" settings (search for "Environment Variables" in the Start menu).
      2. Click "Edit the system environment variables".
      3. Click "Environment Variables".
      4. In the "System variables" section, find the "Path" variable, select it, and click "Edit".
      5. Click "New" and add the path to the platform-tools directory (e.g., C:\adb).
    2. macOS/Linux:

      1. Open your terminal.

      2. Add the path to the platform-tools directory to your shell's configuration file (e.g., ~/.bashrc, ~/.zshrc).

        For example: export PATH=$PATH:/path/to/platform-tools.

        export PATH=$PATH:/usr/local/bin/adb
        echo $PATH | tr ":" "\n"
        

        In my case, it’ll be something like this:

        Export PATH (first command) and check that PATH has been added (second command)

      3. Restart your terminal or source the configuration file (e.g., source ~/.bashrc).

        From now on, we will work only in the command line. In my case, it will be the terminal.


  3. Verify ADB Installation:

    1. Open a command line interface (CLI):

      1. Using the Windows Search Bar (Windows OS):
        • Click the Start button or the magnifying glass icon in the taskbar.
        • Type "cmd" (without quotes) in the search bar.
        • Click on the "Command Prompt" result.
        • To run as administrator, right-click on "Command Prompt" in the search results and select "Run as administrator".
      2. Using Spotlight Search (macOS):
        • Click the magnifying glass icon in the menu bar (or press Cmd+Space).
        • Type "Terminal" and double-click it to open.
    2. Type adb and press Enter.

      adb
      
    3. If adb is installed correctly, you should see the ADB help message.

      Help has a lot of lines (I show a couple of them)


  4. Enable USB Debugging on your Android Device:

    1. Go to "Settings" on your Android device.
    2. Scroll down and select "About Phone".
    3. Find "Build Number" and tap it 7 or more times to unlock Developer Options.
    4. Go back to the main "Settings" page, and now you'll see "Developer Options".
    5. Select "Developer Options".
    6. Scroll down to "USB Debugging" and toggle it on.

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

İletişim kurmak

Sonraki adım mobil cihazınızı bilgisayarınıza bağlamaktır.Bu iki parçadan oluşan nispeten basit bir adımdır:


  • Kablosuz bağlantı;
  • Kablosuz bağlantı.

Wire Bağlantı:

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


Sonrasında, 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.


Şu anda, aşağıdaki komutu kullanarak TCP/IP modunu etkinleştirmeye hazırız:

adb tcpip 5555


Eğer zaten terminaldeysek, Wi-Fi ağındaki mobil cihazın IP adresini, mobil cihazı görmeden kontrol edebiliriz.

Kablosuz bağlantı kurarken daha sonra ihtiyacımız olacak 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ı:

Şimdi cihazınızın IP adresine sahip olduğunuzda, kablosuz bağlantıya geçme zamanıdır. Artık kablolu bağlantıya ihtiyacınız yok. adb tcpip 5555 çalıştırdığınızda, USB kablosunu güvenle bağlayabilirsiniz.


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 IP 10.0.0.108 ise:

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

Hakkında

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, yüksek sesli reklamlar veya yüksek enerjili çizgi film sesleri onları uyandırır. Onlar groggy. Sen groggy. Herkes gününü zaten bozulmuş başlar. Neye ihtiyacımız vardı sessiz bir koruyucusu - görünmez ve güvenilir bir şey. Arka planta ses miktarını hafifçe düşüren bir sistem, oynatmayı durdurmadan, sinir bozucu pop-upları parlatmadan ve kullanıcısını uyandırmadan. İşte bu senaryo ne yapar.

Görüntülü Görüntülü Görüntülü Görüntü

İşte her şeyin nasıl bağlandığını gösteren hızlı bir diagram:


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

Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android aygıtı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.


The Script That Does the Magic

Türkçe Dublaj izle

Çözümün çekirdeği, Android cihazınızla Wi-Fi üzerinden ADB üzerinden 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), senkron yavaşça aşağıya indirilir - 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ı gerektiği gibi.

The Script’s Evolution: From Tiny Hack to Reliable Tool

Türkçe Altyazılı izle

Bu senaryoyu ilk yazdığımda birkaç satır uzunluğunda değildi.


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

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'")


Ama yakında, gerçeklik girdi. aygıt gecenin ortasında bağlanmazsa ne olur? ADB bir zamanlama atarsa ne olur? telefon eşleştirilmezse ne olur? senaryo herkes uyurken çökerse ne olur?


Böylece senaryo gelişti.

  • Bazen cihaz bağlanmadı. Öyleyse adb connect ip:port ekledim.
  • Bazen ADB gece yarısı çöktü. Ben istisna işleme ve retries ekledim.
  • Logging? Evet, bunu da ekledim.
  • File logging ve konsol logging? Tabii ki.
  • Volume mid-sleep değişiklikleri? Şimdi, senkron da bunu izler - ve sadece gerektiğinde müdahale eder.
  • Frekans izleme? Yüksek vs. düşük hacim seviyeleri için farklı ar


    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.Ama bu satırı ADB_DEVICE = "10.0.0.108:5555" "Setting Up Your Connection"'dan IP adresinizle senkronizasyonda değiştirmek için emin olun.

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

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

    1. Python ile doğrudan


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

    python3 reduce_volume.py
    


    Hemen başlar ve arka planda işini sessizce yapar.

    1. Standalone Executable olarak


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


    Skript'i macOS için bağımsız bir .app veya Windows için .exe olarak dönüştürebilirsiniz, PyInstaller:

    pyinstaller --onefile reduce_volume.py
    

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


    1. Eğer fancy iseniz cron iş veya görev zamanlayıcısı ile de zamanlayın.

    Bir Şey Daha: Uzaktan ADB Sınırlamaları

    Wifi üzerinden ADB'nin kırılgan olabileceğini belirtmek önemlidir.


    Uzaktan bağlantınız kesilirse:

    • Telefon yeniden başlatılır.
    • Wi-Fi ağı değişir.
    • Geliştirici Modu veya USB Debugging devre dışı bırakılır.
    • Aygıt ADB aktivitesi olmadan çok uzun sürer (bazı sistemler otomatik olarak aktif olmayan bağlantıları başlatır).
    • Ve diğer birçok ...


    Öyleyse, senkron çalışmayı durdurursa, sadece " Bağlantınızı ayarlamak" adımlarını tekrarlayın:

    1. Connect the mobile device with a wire to your personal computer.

    2. Run the command adb tcpip 5555

      adb tcpip 5555
      
    3. And run adb connect <DEVICE_IP>:5555

    adb connect 10.0.0.108:5555
    

    ve işinize geri döneceksiniz.

    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, ama 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.


    • Bu biraz bir hack mı? Tabii.
    • Bu güvenilir mi? Kesinlikle.
    • Bu yasal mı? 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 desteklenmiyor).
    • Ama ne biliyorsunuz? Yorgun bir ebeveyn (veya kendiniz) daha iyi uyumaya yardımcı olduğu sürece - buna değer.
    • Bu ince.
    • Bu görünmez.
    • Ve işe yarıyor.


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


    And hey — sleep well. You’ve earned it.

    İyi bir uyku.

    P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir program ayarlayabilir, farklı profillere adapte olabilir, cihaz aktivitesini izleyebilir, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, eğer 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.

    P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlayabilir, farklı profillere uyum sağlayabilir, cihaz aktivitesini izleyebilir, 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