2013-07-18 3 views
1

정상적으로 사용자 앱으로 실행되는 서비스가있는 런처 앱이 있지만 시스템 앱으로/system/app /에 넣은 후에는 사용할 수 없습니다. 여기에 이상한 logcat가 있습니다 :Android 앱이 시스템 앱으로 설치되었을 때 null 포인터 예외가 발생합니다.

F/FileObserver( 367): Unhandled exception in FileObserver [email protected]430 
F/FileObserver( 367): java.lang.NullPointerException: name == null 
F/FileObserver( 367): at java.io.File.<init>(File.java:150) 
F/FileObserver( 367): at java.io.File.<init>(File.java:124) 
F/FileObserver( 367): at com.android.server.pm.PackageManagerService.getDataPathForPackage(PackageManagerService.java:3579) 
F/FileObserver( 367): at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:3940) 
F/FileObserver( 367): at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:3382) 
F/FileObserver( 367): at com.android.server.pm.PackageManagerService.access$1700(PackageManagerService.java:172) 
F/FileObserver( 367): at com.android.server.pm.PackageManagerService$AppDirObserver.onEvent(PackageManagerService.java:5541) 
F/FileObserver( 367): at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125) 
F/FileObserver( 367): at android.os.FileObserver$ObserverThread.observe(Native Method) 
F/FileObserver( 367): at android.os.FileObserver$ObserverThread.run(FileObserver.java:88) 
D/dalvikvm( 367): GC_FOR_ALLOC freed 1488K, 25% free 11974K/15816K, paused 56ms, total 57ms 

A 문자열 널 포인터! 어떻게 된 거예요? 여기

는 PackageManagerService (Android4.2)에서 관련 안드로이드 소스 코드 :

private File getDataPathForPackage(String packageName, int userId) { 
    /* 
    * Until we fully support multiple users, return the directory we 
    * previously would have. The PackageManagerTests will need to be 
    * revised when this is changed back.. 
    */ 
    if (userId == 0) { 
     return new File(mAppDataDir, packageName); 
    } else { 
     return new File(mUserAppDataDir.getAbsolutePath() + File.separator + userId 
      + File.separator + packageName); 
    } 
} 

하지만 난 여전히 이유를 알 수 없습니다.

UDPATE :

이 매니페스트에 <original-package> 태그의 이유는, 그것이 사라 문제를 제거합니다.

+0

이는 3579 라인입니까? – Rajeev

+0

"내 소스 코드에서 else {"입니다. – herbertD

답변

0

대부분 패키지 이름이 null로 표시됩니다. File 설명서를 보면 name 부분이 null 일 때 정확한 예외가 throw됩니다.

공공 파일 지정된 디렉토리와 이름을 사용하여 새 파일을 구축 (파일 디렉토리, 문자열 이름).

매개 변수 dir 파일이 저장된 디렉토리입니다. name 파일의 이름입니다.

예외 번호 이름이 null 인 경우 NullPointerException이 발생합니다.

관련 문제