Respostas:
Edit: Muito tempo depois que escrevi este post e ele foi aceito como resposta, o am force-stop
comando foi implementado pela equipe do Android, conforme mencionado nesta resposta .
Como alternativa: em vez de apenas interromper o aplicativo, já que você mencionou que deseja uma "lista limpa" para cada execução de teste, você pode usar o adb shell pm clear com.my.app.package
que interromperá o processo do aplicativo e limpará todos os dados armazenados para esse aplicativo.
Se você estiver no Linux:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill
Isso funcionará apenas para dispositivos / emuladores nos quais você tenha root imediatamente após executar um shell. Provavelmente isso pode ser refinado um pouco para ligar com su
antecedência.
Caso contrário, você pode fazer (manualmente, ou suponho que esteja com script):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>
A maneira limpa de parar o aplicativo é:
adb shell am force-stop com.my.app.package
Dessa forma, você não precisa descobrir o ID do processo.
force-stop
comando existisse. Eu atualizei minha resposta para apontar para esta.
Android 9.0 API Level 28
, o aplicativo ainda é exibido nos Aplicativos recentes, mesmo que ele PID
seja encontrado em relação ao aplicativo. Você sabe como parar o aplicativo completamente, o que significa mesmo nos aplicativos em segundo plano?
Primeiro, coloque o aplicativo em segundo plano (pressione o botão home do dispositivo)
Então .... em um terminal ....
adb shell am kill com.your.package
você pode usar o seguinte no console do dispositivo: o pm disable com.my.app.package
que o matará. Em seguida, use pm enable com.my.app.package
para que você possa iniciá-lo novamente.
adb shell
, em seguida, execute su
primeiro.
Se você tiver acesso ao pacote de aplicativos, poderá instalar com a opção -r e ele interromperá o processo se estiver em execução no momento como efeito colateral. Como isso:
adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity
A opção -r preserva os dados atualmente associados ao aplicativo. No entanto, se você deseja uma lista limpa como você mencionou, pode não querer usar essa opção.
Se você segmentar um dispositivo não-rooteado e / ou tiver serviços em seu APK que não deseja parar também, as outras soluções não funcionarão.
Para resolver esse problema, recorri a um receptor de mensagem de broadcast que adicionei à minha atividade para pará-lo.
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));
}
}
Dessa forma, você pode emitir este comando adb para interromper sua atividade:
adb shell am broadcast -a com.example.TestActivity.STOP
Se tudo o que você está procurando é matar um pacote
pkill package_name
Deveria trabalhar
adb shell killall -9 com.your.package.name
de acordo com o "controle de acesso obrigatório" do MAC, você provavelmente tem permissão para interromper o processo que não é iniciado pelo root
diverta-se!
No eclipse, vá para a perspectiva DDMS e, na guia dispositivos, clique no processo que você deseja matar no dispositivo em que deseja matá-lo. Você só precisa pressionar o botão Parar e isso deve interromper o processo.
Não sei como você faria isso na ferramenta de linha de comando, mas deve haver uma maneira. Talvez você faça isso através do shell adb ...
pkill NAMEofAPP
Marshmallow não enraizado, termux e emulador de terminal.