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.

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>


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.


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

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.


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.


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

2

Jika semua yang Anda cari adalah membunuh paket

pkill package_name 

harus bekerja


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!


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


Saya telah menemukan potongan kode di GitHub tentang cara melakukan ini dari baris perintah tanpa menjalankan Eclipse dan sedikit memperpanjangnya .
sschuberth

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.