Mengapa aplikasi yang dinonaktifkan masih berjalan?

8

Saya perhatikan bahwa aplikasi (seperti Google Kontak Sync) yang telah dinonaktifkan menggunakan manajer aplikasi Android stock (KitKat) masih terlihat berjalan ketika menggunakan alat pengamat proses. Ini benar bahkan setelah perangkat di-reboot.

Mengapa aplikasi yang dinonaktifkan masih berjalan? Apakah ada cara yang efektif (dan aman) untuk benar-benar menonaktifkannya?

Solusi yang membutuhkan hak akses root dapat diterima.

(Perhatikan bahwa untuk contoh khusus di atas, Anda dapat memberi tahu Android untuk tidak menyinkronkan kontak Anda, tetapi itu masih menjalankan proses Sinkronisasi Kontak Google. Tetapi janganlah memikirkan contoh itu ... itu hanya sebuah contoh.)

RockPaperLizard
sumber
Tepat di sebelah tombol "Disable" adalah tombol "Force Stop". Tekan itu dan prosesnya harus berakhir dan tidak mulai lagi.
GiantTree
@GTTreeTerima kasih. Setelah reboot, bukankah itu akan mulai lagi?
RockPaperLizard
4
Dalam kasus Anda, karena aplikasi sistem secara eksplisit telah menyebut layanan yang diekspor dari paket itu dan satu-satunya cara untuk mematikan proses tersebut (dan yang lainnya) adalah dengan secara aktif membunuhnya menggunakan Greenify, Amplify (memerlukan Xposed) atau aplikasi serupa. Catatan: bahwa ini seharusnya tidak terjadi dan harus dianggap sebagai bug, karena PackageManager memiliki tugas untuk tidak mengizinkan aplikasi yang dinonaktifkan berjalan.
GiantTree
1
Nah dalam hal itu, saya menonaktifkan semua layanan, penerima, aktivitas dan penyedia konten serta menonaktifkan aplikasi SystemUI. Nyalakan kembali perangkat dan tebak aplikasi apa yang masih dimuat ke dalam memori (tidak seperti pada pm block/hide) yang membuat saya bertanya-tanya apa yang menyebabkan aplikasi dimuat sekarang. Ini adalah masalah lain yang sementara dimuat dalam memori Anda dapat mengamati ketidakhadiran dangkal oleh kurangnya latar belakang, tema, status bar dan banyak lagi. Mungkin, sebuah pertanyaan baru dapat dituntaskan.
Firelord
1
@Firelord Saya kira itulah yang saya tunjukkan di atas: jika Anda menonaktifkan aplikasi, itu hanya "ditandai dinonaktifkan" (dan tidak ditampilkan di peluncur dll) - tetapi masih terdaftar dengan sistem (pengelola paket), sehingga aplikasi lain dapat menemukannya dan sebut niatnya. Sepertinya persembunyian / pemblokiran agak sebanding dengan "pencopot pemasangan .apkdan data di belakang" - sehingga aplikasi menjadi "benar-benar tidak terdaftar dan tidak terlihat oleh apa pun selain pengelola file", sehingga aplikasi lain tidak lagi dapat memanggil maksudnya semampu mereka. dapat menemukannya.
Izzy

Jawaban:

7

Android Anda tidak perlu memiliki akses root untuk benar-benar menonaktifkan aplikasi, jika Anda memiliki versi 4.4.x atau di atasnya. Yang kamu butuhkan adalahpengaturan di PC dan USB debugging diaktifkan di perangkat yang tidak di-rooting, atau aplikasi terminal emulator untuk perangkat yang di-rooting (Anda juga dapat menggunakan adb).

Jika Anda memeriksa penggunaan Package Manger ( pm), Anda akan melihat

pm memblokir [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm lepas blokir [--user USER_ID] PACKAGE_OR_COMPONENT ")

Untuk Lollipop, itu akan terjadi

sembunyikan [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT ")

Untuk memblokir atau menyembunyikan paket (aman), cukup lakukan

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

Untuk membuka blokir atau menyembunyikan paket, lakukan

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE→ nama paket suatu aplikasi. Untuk mengetahui nama paket suatu aplikasi:

Tambahkan adb shellsebelum perintah untuk menjalankannya dari PC.

Fungsi di balik hide memiliki komentar berikut di dalam kode sumber

Menempatkan paket dalam keadaan tersembunyi, yang hampir seperti keadaan dihapus, membuat paket tidak tersedia, tetapi tidak menghapus data atau file paket yang sebenarnya. Aplikasi dapat dihindarkan dengan mengatur ulang kondisi tersembunyi atau dengan menginstalnya

Komentar serupa dilakukan untuk memblokir di sini .

Untuk memverifikasi klaim, Anda dapat menggunakan beberapa layanan sistem seperti meminfo, procstatsdan activitymenggunakan alat dumpsys atau bahkan mendaftar semua proses menggunakan ps. Anda tidak akan menemukan kehadiran aktif dari aplikasi yang diblokir / disembunyikan.

Hal yang sama berlaku untuk banyak aplikasi sistem yang dinonaktifkan menggunakan GUI atau pm disabletetapi tidak untuk setiap aplikasi karena bahkan aplikasi yang dinonaktifkan dapat menerima siaran yang telah didaftarkannya, yang hanya dapat dilakukan jika dimasukkan ke dalam memori 1 . Namun demikian, aplikasi yang dinonaktifkan tidak dapat bertindak sendiri, juga tidak dapat dijalankan oleh aplikasi lain.

Saya telah berdebat beberapa perbedaan antara hide / block dan disable pada pertanyaan saya pm hide VS pm disable - krisis identitas . Ini hanya memberikan info tambahan untuk jawaban ini sehingga Anda dapat mengabaikannya.

EDIT:

Tampaknya teknik ini tidak berfungsi untuk semua aplikasi di Android KitKat. Dalam hal itu, cukup cabut izin baca dari APK aplikasi atau hapus ekstensi .APK dari nama file aplikasi (yang terakhir disarankan oleh Jaskaranbir sekali), diikuti dengan reboot lembut / penuh. Ini sama dengan menghapus aplikasi dari sistem, dengan perbedaan hanya bahwa semua file akan tetap di tempatnya.

Kedua langkah tersebut dapat dijalankan menggunakan aplikasi pengelola file root apa saja. Cara baris perintah adalah:

adb shell su -c 'chmod 000 /data/app/PACKAGE*'             # 000 means no read-write-executable permission to user,group and others. 
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE'  # doing renaming by moving the file
adb reboot

1: Kurangnya bukti teknis untuk mendukung fakta

Firelord
sumber
Jawaban bagus! Terima kasih! Apakah yang terbaik untuk pertama menonaktifkan aplikasi menggunakan manajer aplikasi Android stok, atau terbaik untuk memastikan itu tidak dinonaktifkan di sana?
RockPaperLizard
Tidak perlu menonaktifkan aplikasi jika Anda memilih pm block/hidejadi biarkan tidak tersentuh.
Firelord
Jika sudah dinonaktifkan, apakah yang terbaik untuk mengaktifkannya kembali?
RockPaperLizard
1
Ini aneh. Saya menguji blocking systemui pada Kitkat saya dan yang mengejutkan saya, block bekerja seperti halnya disable, aplikasi ini tetap tersimpan di memori. Proses SystemUI mendapat percabangan bahkan jika saya membunuhnya. Tidak tahu itu bug atau perilaku yang diinginkan, tetapi dalam hal apa pun, itu berbeda dengan temuan terkait Lollipop yang dinyatakan dalam jawaban. Saya kira jawabannya cukup berguna sekarang.
Firelord
1
@RockPaperLizard, saya lupa memberi tahu Anda trik yang sangat sederhana. Cabut izin baca dari file paket (atau direktori dasar, jika ada Lollipop), restart dan lakukan untuk selamanya. Misalnya, dengan izin root, Anda bisa menghentikan SystemUI dengan cara ini adb shell su -c "chmod 111 /system/app/SystemUI.apk",. 111 berarti hanya mengatur izin yang dapat dieksekusi untuk pemilik, grup, dan lainnya. Reboot dan aplikasi akan hilang ke sistem. Anda dapat mengaturnya 000juga.
Firelord