Como escrevi no meu comentário, existem alguns caracteres especiais que precisam de cuidados extras ao trabalhar no prompt do shell (ou nos scripts do shell). Um deles é o $sinal, que geralmente indica uma variável. Se isso for considerado literalmente, você precisará escapá-lo (ou coloque a cadeia inteira entre aspas simples). Regras semelhantes para aspas.
Como seu comando deve parecer com um escape $ , você já pode encontrar na resposta de eldarerathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Observe a barra invertida na frente do $- esse é o sinal de fuga. Use o mesmo para aspas ou espaços em branco, se o seu comando incluir algumas que devem ser tomadas literalmente, por exemplo,
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
ambos fariam o mesmo: transformando a string em um único parâmetro. No exemplo do seu am startcomando, foi o que aconteceu na análise:
- comando:
am
- parâmetro 1:
start
- parâmetro 2:
-S
- parâmetro 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- tem uma
$, interpretando: a variável $PowerUsageSummaryActivitynão está definida, portanto, vazia
- conclusão: o parâmetro 3 é
com.android.settings/.Settings
Observe também que, se você executar isso diretamente via adb shell, o comando passará pela análise de shell duas vezes, portanto, você precisa escapar ou citar o comando novamente , assim:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'- ou escapar do$mesmocom.android.settings/.Settings\$PowerUsageSummaryActivity- que é a coisa usual a se fazer no shell ao lidar com$sinais literais que não indicam uma variável?