2014-09-11 4 views
1

adb 셸을 통해 응용 프로그램 (필자가 궁금해 할 경우 작성하지 않은 활동)을 시작하려고합니다. 클릭하면오전 시작은 매니페스트에 나열된 주요 활동을 찾을 수 없습니다.

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

그것은 그러나 작동합니까 :

<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... 

및 각각의 모든 사람이 나에게 오류를 제공를 사용하여 시도했다 매니페스트 라인을 가지고 에뮬레이터의 앱 아이콘에서 logcat 출력을 grepping하여 실행중인 활동이 .MainActivity$mainActivit 또는 .MainActivity 인 경우 모두 출력에 표시됩니다. 누군가 am start이 작동하지 않는 이유와 실제로 수동으로 아이콘을 클릭하지 않고이 활동을 시작하는 방법을 말할 수 있습니까?

업데이트 : laalto가주는 해결책은 거의 옳습니다. $이 환경 변수로 해결되면서 문제가되는 것으로 밝혀졌지만, 그가 제안한 명령은 그렇게하지 않았습니다. $을 이스케이프하는 것 외에도 작은 따옴표를 <pkgname/activityname>에 입력해야합니다.

+0

Windows 또는 OSX/리눅스? – laalto

+0

호스트 시스템에서 Linux가 실행 중입니다. – user381261

+0

MainActivity $ mainActivity가 ** 정적 ** 내부 클래스이거나 ** 정적이 아닌 ** 내부 클래스 – Selvin

답변

4

유닉스 계열 쉘에서 $은 쉘 메타 문자이므로 은 환경 변수 mainActivity에있는 값으로 확장됩니다.이 경우 사용자의 경우 빈 값이 될 수 있습니다. 엔트리 포인트는 코드 냄새의 종류이기 때문에 내부 클래스를 가진, 그러나

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

: 그것을 탈출하는

는 백 슬래시를 사용합니다. 외부 클래스를 진입 점으로 만드는 것을 고려하십시오. 그렇다면 어떤 형태로든 $이 필요하지 않습니다.

+0

나는 여전히 작동하지 않고 기록을 위해이를 시도했지만 이것은 내 응용 프로그램이 아닙니다. 개발자가 진입 점을 결정하는 방법에 대해서는 아무 것도 할 수 없습니다. :/ – user381261

+0

매니페스트 스 니펫에는 'mainActivit'이 아닌 'mainActivi'가 있습니다. – laalto

+0

실제로 게시물의 오타였습니다. 나는 돌아가서 내가 제대로 달렸다는 것을 두 번 확인했다. 여전히 같은 결과. – user381261

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

행운