
Employer Dashboard를 위해 앱을 처음 실행했을 때 Landing Page가 존재하는 지 확인하는 용도로 UIAutomatorTest를 만들고 돌렸는데 java.lang.NullPointerException 오류가 떴다.
일단 이 java.lang.NullPointerException이라는 오류에 대해 설명해보자면
java.lang.NUllPointerException이라는 오류는 Runtime Exception 오류의 일종으로, 프로그램을 run 했을 때 참조하는 변수가 null값을 가져올 때 생기는 오류이다.

Tutorial에서 배운 대로 Test를 동일하되 Dashboard에 맞게 코드를 약간 변형시키긴 했는데 왜 오류가 나는지 몰랐다. 하지만 일단 UIAutomatorTest 코드의 30번째 줄에서 에러가 난다고 하니 살펴봤다.
UIAutomator 코드
흠냠냐...
launcherIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
이 코드에서 오류가 난다고 한다. 일단 이 코드를 분석해보자면
launcherIntent : Intent 객체
Intent : 앱의 컴포넌트 간에 메세지를 전달하거나 다른 앱의 컴포넌트와 상호작용을 요청할 때 사용하는 객체
addFlags() : Intent에 flag를 달아주는 메소드.
flag : 새로운 activity가 어떻게 런칭되어야 할 지 정해주는 명령어
Intent.FLAG_ACTIVITY_CLEAR_TASK : flag의 일종으로 시스템에 activity가 포함된 모든 task를 clear하라는 역할. 새로운 걸 시작하기 전에 깨끗하게 청소하는 느낌!
종합하자면 새로운 activity를 런칭하기 전에 이 activity와 연관있는 task를 전부 제거한다는건데, 지금 이 Intent 객체의 값이 null이라서 가져올 수 없는 값을 제거하기 때문에 오류가 난다는 거다.
이 경우 기초적인 해결 방법은
1. laucherIntent가 제대로 초기화 됐는지 확인하기
2. 전체적인 로직 확인해보기
3. build.gradle에 TestImplemation 추가했는지
등등...
일단 결론적으로 나는 1번이 문제였기 때문에 이 부분에 대해서만 설명을 하겠다.
UIAutomatorTest 코드에서 launcherIntent가 초기화된 부분인 29번째 줄을 살펴보면
Intent launcherIntent = context.getPackageManager().getLaunchIntentForPackage(launcherPackageName) ;
라구 되어있다. 그리구 여기서 launcherPackageName은 22번째 줄에 따로 선언이 되어있다.
final String launcherPackageName = "csci-fall-2024-project";
모든 것을 종합해봤을 때 launcherIntent가 null값을 가진 객체를 가리키고 있다면 이 launcherIntent를 선언할때 적은 launcherPackageName이 잘못된 것 같다. 이거는 Android Studio 좌측에 파일이 나열된 셀의 맨 위에 Project라고 적힌 부분을 눌러서 Android로 바꿔준 다음 확인할 수 있다.



이 앱의 Package Name은 "com.example.quickcashapp"인 것을 확인할 수 있다. 그래서 launcherPackageName을 위의 이름으로 재선언 해줬더니 코드가 돌아가더라....... 멍청이슈로 인한 오류였다.
가벼운 실수여서 정말 다행이라고 생각한다!