Я пытаюсь запустить действие для приложения (которое я не писал на случай, если вам интересно) через оболочку 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>
в дополнение к экранированию $
.
для Windows или OSX/Linux? – laalto
Хост-компьютер работает под управлением Linux. – user381261
вопрос в том, является ли MainActivity $ mainActivity ** статическим ** внутренним классом или ** не статическим ** внутренним классом – Selvin