1

ユーザーアプリとして通常どおり実行されるサービスを備えたランチャーアプリがありますが、システムアプリとして /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

文字列の null ポインター! どうしたの?

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);
    }
}

しかし、その理由はまだわかりません。

更新:

これがマニフェストのタグの理由です<original-package>。それを削除すると、問題はなくなりました。

4

1 に答える 1

0

ほとんどの場合、パッケージ名は null になります。Fileのドキュメントを見ると、partnamenull.

public File (File dir, String name) 指定されたディレクトリと名前を使用して新しいファイルを作成します。

パラメータ dir ファイルが保存されているディレクトリ。ファイルの名前を指定します。

name が null の場合、NullPointerException をスローします。

于 2013-07-18T08:43:15.067 に答える