Bir Android uygulamasını konsoldan durdurma


205

Bir Android uygulamasını konsoldan durdurmak mümkün müdür? Gibi bir şey:

adb stop com.my.app.package

Test sürecimizi çok hızlandıracaktı. Şu anda, manuel test senaryolarının temiz bir durumla başladığından emin olmak için her seferinde uygulamayı kaldırıyoruz / yüklüyoruz.

Yanıtlar:


146

Düzenleme: Bu yazıyı yazdıktan ve cevap olarak kabul edildikten sonra, am force-stopkomut bu cevapta belirtildiği gibi Android ekibi tarafından uygulandı .

Alternatif olarak: Aksine sen, kullanabilirsiniz her test için bir "temiz bir sayfa" isteyen sayılabilir çünkü sadece, uygulamanın durmaya daha adb shell pm clear com.my.app.packageuygulama sürecini durduracak olan ve bu uygulamaya ilişkin tüm saklanan verileri temizleyin.


Linux'taysanız:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

Bu yalnızca bir kabuk çalıştırdıktan hemen sonra kökünüzün olduğu cihazlar / emülatörler için işe yarar. Bu suönceden aramak için muhtemelen biraz rafine edilebilir .

Aksi takdirde, şunları yapabilirsiniz (manuel olarak veya betiklenmiş varsayalım):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>


6
Çalışmak için alınamadı (hem öldürmek hem de su için izin reddedildi), ancak +1 bana göstermek için adb ile düşündüğümden çok daha fazlasını yapabilirim.
hpique

9
Ah, köklü bir cihazınız yok gibi. Kesinlikle en azından emülatör üzerinde çalışıyor! :)
Christopher Orr

1
Belki okuma-yazma bölümünü yeniden takmanız ve adb'yi root olarak çalıştırmanız gerekir: adb remount; adb root # bu sadece aptal bir tahmin düşündü
Rorist

570

Uygulamayı durdurmanın temiz yolu:

adb shell am force-stop com.my.app.package

Bu şekilde işlem kimliğini bulmak zorunda kalmazsınız.


28
Bu, bu sorunun kabul edilen cevabı olmalıdır. Soru köklü bir cihaz içermiyor.
Dimitris

10
@Dimitris Yukarıdaki cevabımı force-stopkomut olmadan önce yazdım . Cevabımı buna işaret edecek şekilde güncelledim.
Christopher Orr

2
Ayrıca gerçekten test çalıştırmak için "temiz bir sayfa" sağlamak için iyi bir yol ile cevabımı güncelledi.
Christopher Orr

Bundan sonra, BroadcastReceiver'ınızın (bir sonraki uygulama açılana
CAMOBAP

Üzerinde test Android 9.0 API Level 28, uygulama hala görüntülenen son Apps rağmen PIDapp ilişkin bulunur. Arka plan uygulamalarından bile gelen uygulamayı tamamen nasıl durduracağınızı biliyor musunuz ?
talha06

32

İlk olarak, uygulamayı arka plana yerleştirin (cihazın ana düğmesine basın)

Sonra ... bir terminalde ....

adb shell am kill com.your.package

11
NOT Bunun artık API seviyeleri> 22'de çalıştığına inanmıyorum
dell116

Marshmallow ile benim Nexus 5 üzerinde
urSus

Bu çalışıyor. Yine de uygulamayı arka plana yerleştirdiğinizden emin olun.
PhillyTheThrilly

17

Eğer cihaz konsoldan aşağıdaki kullanabilirsiniz: pm disable com.my.app.packageonu öldürmek hangi. Sonra pm enable com.my.app.packagetekrar başlatabilmek için kullanın .


1
Köklü olmayan bir telefonda bu hiçbir şey yapmıyor gibi görünüyor.
Robert Muil

Köklü olmayan bir telefonda kontrol ettim. İlk başta bazı izinler reddedildi mesajları ve daha sonra benim DalvicVM uygulaması / hizmetini öldürdü. Bir saniye ver.
BeğenBunu

1
Köklü bir cihazda bu çalışır ve uygulamayı / hizmeti aşağıda tutma avantajı vardır. Bu test amaçları için arzu edilebilir.
miki

2
Not: Önce yapmanız adb shell, ardından çalıştırmanız gerekir su.
kakyo

Uyarı, bu, yeniden etkinleştirdikten sonra bile, o paketin başlatıcı simgesi kısayollarının kaybolmasını sağlar.
Elad Nava

10

Uygulama paketine erişiminiz varsa, -r seçeneği ile yükleyebilirsiniz ve şu anda bir yan etki olarak çalışıyorsa işlemi sonlandıracaktır. Bunun gibi:

adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity

-R seçeneği, şu anda uygulama ile ilişkilendirilmiş olan verileri korur. Ancak, bahsettiğiniz gibi temiz bir sayfa istiyorsanız, bu seçeneği kullanmak istemeyebilirsiniz.


7

Köklü olmayan bir cihazı hedefliyorsanız ve / veya APK'nızda da durdurmak istemediğiniz hizmetlere sahipseniz, diğer çözümler çalışmaz.

Bu sorunu çözmek için, etkinliği durdurmak amacıyla eklediğim bir yayın mesajı alıcısına başvurdum.

public class TestActivity extends Activity {
    private static final String STOP_COMMAND = "com.example.TestActivity.STOP";

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            TestActivity.this.finish();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //other stuff...

        registerReceiver(broadcastReceiver, new IntentFilter(STOP_COMMAND));
    }
}

Bu şekilde, etkinliğinizi durdurmak için bu adb komutunu verebilirsiniz:

adb shell am broadcast -a com.example.TestActivity.STOP

2

Eğer aradığınız tek şey bir paketi öldürüyorsa

pkill package_name 

çalışmalı


Not: Bu yalnızca yeni Android sürümlerinde çalışır. pkill 4.4 emülatörümde mevcut değil, ancak Android 6 emülatöründe mevcut.
Simon Warta

1

adb shell killall -9 com.your.package.name

MAC "zorunlu erişim kontrolü" ne göre büyük olasılıkla root tarafından başlatılmayan süreci öldürme izniniz vardır.

iyi eğlenceler!


Bu komutu çalıştırma cevabında "Operasyona izin verilmiyor" alıyorum
Abdul Rahman Shamair

0

Tutulmada DDMS perspektifine gidin ve cihazlar sekmesinde, öldürmek istediğiniz cihazın altında öldürmek istediğiniz işlemi tıklayın. Daha sonra sadece durdur düğmesine basmanız gerekir ve bu işlemi sonlandırmalıdır.

Bunu komut satırı aracından nasıl yapacağınızdan emin değilim ama bir yolu olmalı. Belki adb kabuğundan yapıyorsun ...


GitHub'da Eclipse'yi çalıştırmadan komut satırından bunu nasıl yapacağınıza dair bir kod snippet'i buldum ve biraz uzattım .
sschuberth

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.