我有一个Launcher应用程序,其服务通常作为用户应用程序运行,但在我将其作为系统应用程序打入/ system / app /之后,它无法安装,这里是奇怪的logcat:
F/FileObserver( 367): Unhandled exception in FileObserver com.android.server.pm.PackageManagerService$AppDirObserver@41130430
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
一个String空指针!发生了什么事?
以下是来自PackageManagerService(Android4.2)的相关Android源代码:
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 :(得分:0)
大多数情况下,您的包名称为null。如果您看到File的文档,则会注意到name
部分为null
时会引发确切的异常。
公共文件(文件目录,字符串名称) 使用指定的目录和名称构造一个新文件。
参数 dir存储文件的目录。 命名文件的名称。
抛出 如果name为null,则为NullPointerException。