Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 程序包xyz的uid不匹配:磁盘上为10044,设置中为10045_Android_Android Emulator_Android X86 - Fatal编程技术网

Android 程序包xyz的uid不匹配:磁盘上为10044,设置中为10045

Android 程序包xyz的uid不匹配:磁盘上为10044,设置中为10045,android,android-emulator,android-x86,Android,Android Emulator,Android X86,我找到了在VM()中安装Android-x86的简单指南。 与Eclipse的连接和所有功能正常,但在VM上安装my app失败,出现以下错误: 06-21 22:40:26.390: INFO/PackageManager(2439): /data/app/xyz.apk changed; unpacking 06-21 22:40:26.390: ERROR/PackageManager(2439): Package xyz has mismatched uid: 10044 on disk

我找到了在VM()中安装Android-x86的简单指南。
与Eclipse的连接和所有功能正常,但在VM上安装my app失败,出现以下错误:

06-21 22:40:26.390: INFO/PackageManager(2439): /data/app/xyz.apk changed; unpacking
06-21 22:40:26.390: ERROR/PackageManager(2439): Package xyz has mismatched uid: 10044 on disk, 10045 in settings
06-21 22:40:26.390: WARN/PackageManager(2439): Native ABI mismatch from package file
06-21 22:40:26.390: WARN/PackageManager(2439): Package couldn't be installed in /data/app/xyz-1.apk
我在google上搜索了这个错误,找到了一个小Python脚本来修复这个问题,但是它不起作用()。在脚本执行之后,我得到了相同的错误

我使用的是Android-x86 2.2 generic,更多详细信息可在此处找到:

有没有可能解决这个问题

编辑:

我测试了所有2.2版本。一般来说,只有泛型和斯巴达有效,但没有人接受我的apk。
也尝试了
adb安装

编辑2:


我已经尝试了@Vlad的建议工具。它在签署apk后部分工作。最后,我使用了,并用apktool中的新文件替换了apkEdit的旧文件。
但安装adb时会挂起消息等待设备或什么都没有。如果我相信eclipse DDMS,那么每次尝试安装apk时,与设备的连接都会丢失。

以下是我尝试安装正常apk时出现的故障:
故障[install\u FAILED\u INVALID\u apk]
您的应用程序似乎使用了本机代码。你用NDK吗? 检查的一种方法是使用 “apktool转储标记”

寻找类似于 本机代码:“armeabi” 在输出中

这个问题与一个名为“dexopt”的程序有关,该程序决定 一个称为“linearloc”的固定大小的缓冲区,用于安装在 特定设备。而较新版本的缓冲区大小为8或16 MB Android版本像冰淇淋三明治和果冻豆,只有5MB 在旧版本中

在对apk签名时,您可能会执行proguard步骤,这会删除未引用的代码部分(类、方法、字段等),以便传递与缓冲区大小相关的错误

但proguard可能不是每次都能解决的方案,您仍然有可能超过缓冲区大小限制


Facebook有一个解决方案:“将我们的应用程序分解成多个dex文件”。请参阅:

错误
程序包xyz在磁盘上有不匹配的uid:10044,设置中有10045,这是由exist文件夹
/data/data/xyz/
引起的

在此邮件文件夹中存在,并且与现在安装的(10045)拥有不同的所有者(10044)。这是由于以前安装不干净造成的

例如,上一次安装失败,出现一些错误,不删除创建的文件夹

因为文件夹中可能有来自其他应用程序的数据,android不允许使用它
PackageManager
尝试以不同的方式修复它,但如果无法做到这一点,它会获得不同的应用程序目录并显示此消息

更好的解决方案-安装应用程序并清除它。然后再安装一次

另一个解决方案-以某种方式删除文件夹
/data/data/xyz/
。也许你需要根

来自PackageManager的代码(注释可能非常有用):


是的,我使用本机代码,在我的apk文件中是生成的*.so。但是如何使用apktool dump标签,没有选择。因此,本机代码的目标CPU似乎与x86系统上使用的CPU不同。请确保使用android-x86.org上的NDK查看更多详细信息:它在签署apk后部分工作。最后,我使用了apktool中的apktool,并用apktool中的新文件替换了
apkEdit
中的旧文件。但是安装adb时会挂起消息“等待设备”或什么都没有。如果我相信EclipseDDMS,那么每次尝试安装apk时,与设备的连接都会丢失。编辑:这里是我尝试安装“普通”apk时的失败:
failure[install\u FAILED\u INVALID\u apk]
如果在签署apk后没有问题,它可能会删除未引用的类/方法,并且会减少dex文件。检查我的答案。您的问题是一个常见的bug。
            // This is a normal package, need to make its data directory.
        dataPath = getDataPathForPackage(pkg.packageName, 0);

        boolean uidError = false;

        if (dataPath.exists()) {
            // XXX should really do this check for each user.
            mOutPermissions[1] = 0;
            FileUtils.getPermissions(dataPath.getPath(), mOutPermissions);

            // If we have mismatched owners for the data path, we have a problem.
            if (mOutPermissions[1] != pkg.applicationInfo.uid) {
                boolean recovered = false;
                if (mOutPermissions[1] == 0) {
                    // The directory somehow became owned by root.  Wow.
                    // This is probably because the system was stopped while
                    // installd was in the middle of messing with its libs
                    // directory.  Ask installd to fix that.
                    int ret = mInstaller.fixUid(pkgName, pkg.applicationInfo.uid,
                            pkg.applicationInfo.uid);
                    if (ret >= 0) {
                        recovered = true;
                        String msg = "Package " + pkg.packageName
                                + " unexpectedly changed to uid 0; recovered to " +
                                + pkg.applicationInfo.uid;
                        reportSettingsProblem(Log.WARN, msg);
                    }
                }
                if (!recovered && ((parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0
                        || (scanMode&SCAN_BOOTING) != 0)) {
                    // If this is a system app, we can at least delete its
                    // current data so the application will still work.
                    int ret = mInstaller.remove(pkgName, 0);
                    if (ret >= 0) {
                        // TODO: Kill the processes first
                        // Remove the data directories for all users
                        sUserManager.removePackageForAllUsers(pkgName);
                        // Old data gone!
                        String prefix = (parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0
                                ? "System package " : "Third party package ";
                        String msg = prefix + pkg.packageName
                                + " has changed from uid: "
                                + mOutPermissions[1] + " to "
                                + pkg.applicationInfo.uid + "; old data erased";
                        reportSettingsProblem(Log.WARN, msg);
                        recovered = true;

                        // And now re-install the app.
                        ret = mInstaller.install(pkgName, pkg.applicationInfo.uid,
                                pkg.applicationInfo.uid);
                        if (ret == -1) {
                            // Ack should not happen!
                            msg = prefix + pkg.packageName
                                    + " could not have data directory re-created after delete.";
                            reportSettingsProblem(Log.WARN, msg);
                            mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
                            return null;
                        }
                        // Create data directories for all users
                        sUserManager.installPackageForAllUsers(pkgName,
                                pkg.applicationInfo.uid);
                    }
                    if (!recovered) {
                        mHasSystemUidErrors = true;
                    }
                } else if (!recovered) {
                    // If we allow this install to proceed, we will be broken.
                    // Abort, abort!
                    mLastScanError = PackageManager.INSTALL_FAILED_UID_CHANGED;
                    return null;
                }
                if (!recovered) {
                    pkg.applicationInfo.dataDir = "/mismatched_uid/settings_"
                        + pkg.applicationInfo.uid + "/fs_"
                        + mOutPermissions[1];
                    pkg.applicationInfo.nativeLibraryDir = pkg.applicationInfo.dataDir;
                    String msg = "Package " + pkg.packageName
                            + " has mismatched uid: "
                            + mOutPermissions[1] + " on disk, "
                            + pkg.applicationInfo.uid + " in settings";
                    // writer
                    synchronized (mPackages) {
                        mSettings.mReadMessages.append(msg);
                        mSettings.mReadMessages.append('\n');
                        uidError = true;
                        if (!pkgSetting.uidError) {
                            reportSettingsProblem(Log.ERROR, msg);
                        }
                    }
                }
            }
            pkg.applicationInfo.dataDir = dataPath.getPath();