Android'i komut satırından (uzaktan) yeniden başlatmanın en iyi yolu nedir?


29

Benim köklü android 4.1.1 cihazı yeniden başlatmanın en iyi / friendliest yolunu arıyorum. Bu çözümleri şu ana kadar buldum:

  • su -c "reboot" - Cihazımda yeniden başlattıktan sonra wifi ile ilgili sorunlara neden oluyor ... Bunun bazı durumlarda dosya dosyalarının kesilmesine neden olabileceğini okudum ... ssh ile çalışmıyor.
  • toolbox reboot - Burada da aynı endişeler var, ancak ssh ile çalışıyor.
  • reboot -d 8 -f - yeniden başlattıktan sonra problemlere neden olur, örneğin bazı uygulamalar
  • busybox killall system_server - "Hot Reboot" (gerçekten bir sistem yeniden başlatması değil)
  • start|stop - Android Çalışma Zamanı'nı başlatır / durdurur (gerçekten bir sistem yeniden başlatması değil)

(Donanım) güç düğmesine bastığımda cihaz tam olarak ne yapıyor? Sanırım en dostane yol bu.


su -c "reboot"rebootiçinde tanımlanan komutu çalıştırır reboot.c. reboot.cyıllar boyunca fazla değişmedi. Her zaman sync () işlevini çağırdı ve ardından cihazı yeniden başlattı . Ayrıca, bu taahhüt sayesinde , modern reboot.cdosya sürümleri de tüm dosya sistemlerini çıkarmaktadır . Android 4.1.1 bahsettiğim taahhüdü içeriyor ve bu yüzden su -c "reboot"Android 4.1.1'de dosya sisteminin bozulmasına neden olabileceğini görmüyorum .
unutulmaz

Sevgili acy: Firelord'un geç yanıtı ( su -c 'am start -a android.intent.action.REBOOT') Android 4.1.2'de benim için çalışıyor ve mevcut cevapların en iyisi gibi görünüyor. Sizin için Android 4.1.1'de çalışıyorsa veya denemek için çok yoğunsanız, lütfen cevap bölümünün üst kısmına kadar yüzmek için yeşil onay işaretini tıklayın.
Unutulmaz

Yanıtlar:


13

Basit, gerçekten:

  • Android, çalışma zamanının hayati parçalarını güvenle kapatıyor.
  • İşletim sistemi ayrıca uygulamalara ve hizmetlere zarafetle kapanmalarını söyleme niyetlerini yayınlamaktadır. Bunlar, tüm veri ve paylaşılan tercihlerin önbelleklerini temizler, notları notları veritabanında saklar, vb.

Başka bir deyişle, uygulamalara ve hizmetlere, temizleme işlemlerini sistematik olarak yapma şansı verilmiştir.

Denediğiniz komutlar daha sert. Aslında zarif bir kapatma için güvenlik mekanizmalarını atlarlar.

Android, Linux'un kendi başına, Linux ortamını kapatmak için bu komutların verilebileceği sıradan bir masaüstü sürümü anlamında değildir.

Bunun gibi bir sarmalayıcı komut dosyası oluşturmak mümkün olabilir:

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

Bunu safe_shutdown.sh0755 izinleriyle kaydedebilirsiniz. Kilometreniz ahizelere ve ROM'lara bağlı olarak değişebilir - bu yüzden orada hiçbir garanti yoktur.


Bu açıklama için teşekkürler! Bunu uzaktan yapmak mümkün mü, örneğin ssh ile (adb değil)?
acy

4
Sanırım düğmeyi kapatmayı bir komutla nasıl taklit edeceğini bilmek istiyor.
Akış

eğer cihazı kapatmak için en kolay / en güvenli / en iyi yol
buysa

@Flow adb reboot? Güvenli olup olmadığından emin değilim. Belki de etrafına bir sarıcı betiği yayınlamak için gönder ve ACTION_SHUTDOWNsonra ara adb reboot?
t0mm13b

Yayıncılığın ACTION_SHUTDOWNda istediğinizi yapacağından emin değilim : "Ön plan etkinliği de duraklatılacağından, uygulamaların normal olarak bu işlemi gerçekleştirmesi gerekmez." En uygulamaları gibi Sesler nedenle olmaz idare. Aktiviteyi duraklatmak yeterli mi?
Matthew

12

(Donanım) güç düğmesine bastığımda cihaz tam olarak ne yapıyor? Sanırım en dostane yol bu.

Cihazı kapatmak için seçeneği olan bir iletişim kutusu görüyorsunuz (stok Android yeniden başlatma yapmıyor). Güç düğmesine uzun bastığınızda ShutdownActivity'nin çağrıldığı görülüyor .

Her neyse, uzaktan ya da yerel olarak deneyebilirsiniz, ancak sadece root erişimi ile:

su -c 'am start -a android.intent.action.REBOOT'

Yeniden başlatmanın ardından zarif bir kapatma işlemi yapacaktır. Burada fark ettiğimde bir niyet arıyordum .

Yöntem Android 4.2.1, 5.0.2 ve 6.0.1'de test edilmiştir ve Android 4.1.1 için de çalışması gerekir.

Güncelleştirme

Android 5.0 ve 6.0.1 üzerinde test edildi:

su -c 'svc power reboot'

Buradaki kaynak koduna göre , KitKat komutları da komutu desteklemelidir.


1
Tam olarak ihtiyacım olan şeydi. Yeniden başlatma metni için değerler olduğunda hala "Güçleniyor ..." yazması garip buluyorum.
Sirenler

10
killall zygote

Bu kök zygoteişlemini öldürecek ve Android sisteminin yenilenmesine neden olacaktır .

Bu, telefonunuzun donanımını yeniden başlatmaz, yalnızca Android işlemektedir.

Varsayılan olarak (Linux'ta), kill/ killallkomutları, işlemlerin kapatılması için zarif bir yol sağlar; bununla birlikte, zigot uygulamasına bağlı olarak, bu durumun çalışan Android uygulamalarınızı zarif bir şekilde kapatıp kapatmamasına bağlıdır .

Not: Bunu, kullanmak su -c, SSH veya ADB ile bağlamak veya başka bir yöntemle root olarak çalıştırmanız gerekir .

Bu işlem için diğer isimler:

  • yumuşak yeniden başlatma
  • sıcak yeniden başlatma

Bazı cihazlarda farkettim, Wifi bu komuttan sonra düzgün şekilde yeniden bağlanmayacak (bu yüzden Wifi'yi devre dışı bırakmalı, bir dakika beklemeli ve ardından Wifi'yi tekrar etkinleştirmeliyim).
palswim

2
Okuyucular için: Lollipop'ta, Android çerçevesini yeniden başlatmanın standart yolu am restart. Bu olsa kök erişim gerektirir.
Firelord

killall zygoteSüreçleri kapatmanın zarif bir yolunu mu veriyor? İlginç soru. Birisi zygotebilmek için kaynak koduna bakmak zorunda kalacaktı .
unutulmaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.