2014-09-11 6 views
1

Я пытаюсь запустить действие для приложения (которое я не писал на случай, если вам интересно) через оболочку adb. Манифеста строки:am start не может найти основную активность, указанную в манифесте

<activity android:label="@string/app_name" android:name="MainActivity$mainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Я попытался с помощью команды

adb shell am start -W com.pkg.name/MainActivity$mainActivity 
adb shell am start -W com.pkg.name/.MainActivity$mainActivity 
adb shell am start -W com.pkg.name/.MainActivity 
adb shell am start -a android.intent.action.MAIN -n com.pkg.name/MainActivity$mainActivity 
adb shell am start -n com.pkg.name/MainActivity$mainActivity 
etc... 

и каждый из них дает мне ошибку:

Error type 3 
Error: Activity class {com.pkg.name/com.pkg.name.MainActivity} 
does not exist. 

Это, однако работать при нажатии на значке приложения в эмуляторе, и, используя grepping вывод logcat, я обнаружил, что запущенная деятельность называется .MainActivity$mainActivit или .MainActivity, они оба отображаются на выходе. Может ли кто-нибудь сказать мне, почему am start не работает и как на самом деле начать эту деятельность без ручного нажатия на значок?

ОБНОВЛЕНИЕ: Решение, данное laalto, является почти правильным. Оказывается, проблема с разрешением $ решена как переменная среды, однако команда, которую он предложил, не совсем это делает. Вам нужно поставить одинарные кавычки на <pkgname/activityname> в дополнение к экранированию $.

+0

для Windows или OSX/Linux? – laalto

+0

Хост-компьютер работает под управлением Linux. – user381261

+0

вопрос в том, является ли MainActivity $ mainActivity ** статическим ** внутренним классом или ** не статическим ** внутренним классом – Selvin

ответ

4

В Unix-подобных оболочек, $ является оболочкой метасимволом так $mainActivity расширяется независимо от значения переменной среды mainActivity имеет место, вероятно, пустое значение в вашем случае.

Чтобы избежать этого, используйте обратную косую черту:

adb shell am start -W com.pkg.name/.MainActivity\$mainActivity 

Однако, имея внутренний класс как точка входа является своего рода кодом запаха. Подумайте о том, чтобы сделать внешний класс своей точкой входа. Тогда вам не понадобится $ в любой форме.

+0

Я пробовал это, все еще не работая и только для записи, это не мое приложение. Я ничего не могу сказать о том, как разработчик принял решение о точке входа. :/ – user381261

+0

Фрагмент манифеста имеет его как 'mainActivity', а не' mainActivit' – laalto

+0

Это было на самом деле опечатка в сообщении. Я вернулся и дважды проверил, что я правильно его провела. Еще один результат. – user381261

0
am start -n com.pkg.name/com.package.name.MainActivity$mainActivity 

Успехов

 Смежные вопросы

  • Нет связанных вопросов^_^