Menghentikan aplikasi Android dari konsol

205

Apakah mungkin untuk menghentikan aplikasi Android dari konsol? Sesuatu seperti:

adb stop com.my.app.package

Ini akan mempercepat proses pengujian kami. Saat ini kami menghapus / menginstal aplikasi setiap kali untuk memastikan kasus uji manual dimulai dengan keadaan bersih.

hpique
sumber

Jawaban:

146

Sunting: Lama setelah saya menulis posting ini dan diterima sebagai jawabannya, am force-stopperintah itu diterapkan oleh tim Android, sebagaimana disebutkan dalam jawaban ini .

Sebagai alternatif: Daripada hanya menghentikan aplikasi, karena Anda menyebutkan menginginkan "pembersihan" untuk setiap uji coba, Anda dapat menggunakan adb shell pm clear com.my.app.package, yang akan menghentikan proses aplikasi dan menghapus semua data yang disimpan untuk aplikasi itu.


Jika Anda menggunakan Linux:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

Itu hanya akan bekerja untuk perangkat / emulator di mana Anda memiliki root segera setelah menjalankan shell. Itu mungkin bisa sedikit disempurnakan untuk menelepon susebelumnya.

Jika tidak, Anda dapat melakukannya (secara manual, atau saya kira dituliskan):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>

Christopher Orr
sumber
6
Tidak dapat membuatnya berfungsi (izin ditolak untuk membunuh dan su), tetapi +1 untuk menunjukkan kepada saya bahwa saya dapat melakukan lebih banyak dari yang saya kira dengan adb.
hpique
9
Ah, sepertinya Anda tidak memiliki perangkat yang di-rooting. Ini pasti berfungsi setidaknya pada emulator! :)
Christopher Orr
1
Mungkin Anda harus me-remount partisi read-write dan menjalankan adb sebagai root: adb remount; adb root # itu hanya dugaan bodoh
Rorist
570

Cara bersih menghentikan aplikasi adalah:

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

Dengan cara ini Anda tidak perlu mencari tahu ID proses.

Enrico Ros
sumber
28
Ini harus menjadi jawaban yang diterima untuk masalah ini. Pertanyaannya tidak termasuk perangkat yang di-rooting.
Dimitris
10
@ Dimitris saya menulis jawaban saya di atas sebelum force-stopada perintah. Saya memperbarui jawaban saya untuk menunjukkan yang ini.
Christopher Orr
2
Saya juga memperbarui jawaban saya dengan cara yang baik untuk benar-benar memberikan "batu tulis bersih" untuk menjalankan tes.
Christopher Orr
Poin penting bahwa setelah ini BroadcastReceiver Anda tidak akan berfungsi (hingga aplikasi berikutnya terbuka) commonsware.com/blog/2011/07/13/…
CAMOBAP
Diuji pada Android 9.0 API Level 28, aplikasi masih ditampilkan di Aplikasi Terbaru meskipun PIDditemukan mengenai aplikasi. Apakah Anda tahu cara menghentikan aplikasi sepenuhnya yang artinya bahkan dari aplikasi latar belakang?
talha06
32

Pertama, letakkan aplikasi di latar belakang (tekan tombol beranda perangkat)

Kemudian .... di terminal ....

adb shell am kill com.your.package
dell116
sumber
11
CATATAN Saya tidak percaya ini bekerja lagi di level API> 22.
dell116
itu terjadi pada Nexus 5 saya dengan Marshmallow
urSus
Ini bekerja. Pastikan Anda menempatkan aplikasi ke latar belakang terlebih dahulu.
PhillyTheThrilly
17

Anda dapat menggunakan yang berikut dari konsol perangkat: pm disable com.my.app.packageyang akan membunuhnya. Kemudian gunakan pm enable com.my.app.packagesehingga Anda dapat meluncurkannya kembali.

Seseorang disuatu tempat
sumber
1
Pada ponsel yang tidak di-root, ini sepertinya tidak melakukan apa-apa.
Robert Muil
Saya sudah memeriksanya di ponsel yang tidak di-root. Pada awalnya ada beberapa pesan izin ditolak dan kemudian membunuh aplikasi / layanan DalvicVM saya. Tunggu sebentar.
SepertiAnda
1
pada perangkat yang di-rooting ini berfungsi, dan ini memiliki manfaat tambahan untuk menjaga aplikasi / layanan tetap rendah. Ini mungkin diinginkan untuk tujuan pengujian.
miki
2
Catatan: Anda perlu adb shell, lalu jalankan suterlebih dahulu.
kakyo
Peringatan, ini akan membuat pintasan ikon peluncur untuk paket itu hilang, bahkan setelah diaktifkan kembali.
Elad Nava
10

Jika Anda memiliki akses ke paket aplikasi, maka Anda dapat menginstal dengan opsi -r dan itu akan mematikan proses jika saat ini berjalan sebagai efek samping. Seperti ini:

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

Opsi -r menyimpan data yang saat ini terkait dengan aplikasi. Namun, jika Anda ingin yang bersih seperti yang Anda sebutkan, Anda mungkin tidak ingin menggunakan opsi itu.

ThomasW
sumber
7

Jika Anda menargetkan perangkat yang tidak di-rooting dan / atau memiliki layanan di APK yang tidak ingin Anda hentikan juga, solusi lain tidak akan berfungsi.

Untuk mengatasi masalah ini, saya telah beralih ke penerima pesan siaran yang saya tambahkan ke aktivitas saya untuk menghentikannya.

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));
    }
}

Dengan begitu, Anda dapat mengeluarkan perintah adb ini untuk menghentikan aktivitas Anda:

adb shell am broadcast -a com.example.TestActivity.STOP
Patrick Valsecchi
sumber
2

Jika semua yang Anda cari adalah membunuh paket

pkill package_name 

harus bekerja

steve
sumber
Catatan: ini hanya berfungsi pada versi Android yang lebih baru. pkill tidak tersedia pada emulator 4.4 saya tetapi tersedia pada emulator Android 6.
Simon Warta
1

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

menurut MAC "kontrol akses wajib" Anda mungkin memiliki izin untuk mematikan proses yang tidak dimulai oleh root

Selamat bersenang-senang!

sinan bilkay
sumber
Saya mendapatkan "Operasi tidak diizinkan" dalam menanggapi menjalankan perintah ini
Abdul Rahman Shamair
0

Dalam gerhana pergi ke perspektif DDMS dan di tab perangkat klik proses Anda ingin membunuh di bawah perangkat yang ingin Anda matikan. Anda kemudian hanya perlu menekan tombol stop dan itu harus mematikan proses.

Saya tidak yakin bagaimana Anda akan melakukan ini dari alat baris perintah tetapi harus ada cara. Mungkin Anda melakukannya melalui adb shell ...

matto1990
sumber
Saya telah menemukan potongan kode di GitHub tentang cara melakukan ini dari baris perintah tanpa menjalankan Eclipse dan sedikit memperpanjangnya .
sschuberth
-1
pkill NAMEofAPP

Emarsh marshmallow, termux & terminal tidak berakar.

William A. Krithinithis Kripto
sumber