精华内容
下载资源
问答
  • 出现这个情况: 1、如果你已经安装了,就先卸载...3、以上都没问题的话,你手机是不是有手机分身功能,如果有,看另一个手机分身是不是已经安装不同签名同包名的应用,是的话就卸载已安装的,跟第一个情况一样; ...

    出现这个情况:
    1、如果你已经安装了,就先卸载已经安装的应用再安装;
    2、如果本地没有安装,去文件管理中找与安装应用相同包名的文件夹删除;
    3、以上都没问题的话,你手机是不是有手机分身功能,如果有,看另一个手机分身是不是已经安装了不同签名同包名的应用,是的话就卸载已安装的,跟第一个情况一样;

    展开全文
  • 与已安装应用签名不同

    千次阅读 2018-12-11 16:04:28
    1.打包的时候的keystore.jks和 加固的keystore.jks(没有加固的忽略) ,及线上原有版本的keystore.jks务必要保持一致,所以keysore.jks文件创建以后务必要保存好,不然版本会更新失败,流失用户. 1.release版本和debug...

    总的来说:只要保证jks文件始终是同一个,就可以解决这个问题.

    1.打包的时候的keystore.jks和 加固的keystore.jks(没有加固的忽略)  ,及线上原有版本的keystore.jks务必要保持一致,所以keysore.jks文件创建以后务必要保存好,不然版本会更新失败,流失用户.

    1.release版本和debug版本提示签名不一致,

    解决办法:在project structure-->siging配置config

    把刚配置的config添加到release和debug中,这样就能解决签名不同的问题,别忘记点确定.

    二:如果上架版本提示签名不一致,线上原有版本和刚发布的版本keystore.jks文件不一致造成的.用原有版本的keystore.jks重新打包上架就可以了,有些第三方加固以后貌似也会出现这种情况,重新加固上传,

    展开全文
  • android v2签名、渠道包安装失败

    千次阅读 2018-11-01 13:49:20
    v2签名机制:v2是android 7.0开始引入,使用SHA256哈希值校验,会对每个文件的二进制字节进行校验,对应用提供更安全的保护,不管签名后对文件做了任何修改,都会导致在android 7.0以上的机型安装失败(提示改安装包...

    android 7.0开始增加了v2签名,能够加速app的安装结束。

    v2签名机制:v2是android 7.0开始引入,使用SHA256哈希值校验,会对每个文件的二进制字节进行校验,对应用提供更安全的保护,不管签名后对文件做了任何修改,都会导致在android 7.0以上的机型安装失败(提示改安装包未包含任何证书),v2签名在编译的过程中,将会压缩,调整和签署合并成一步完成,可以缩短apk在设备上验证的时间,加快安装速度。

    最近遇到打完的渠道包在手机上安装失败,提示改安装包未包含任何证书的问题。

    签名方式一(apk正式安装可以正常使用):

    对apk只进行v1签名,跑脚本生成渠道包,之后不需要重新签名,安装成功。

    签名方式二(出现安装失败)

    1、对apk进行v1和v2同时签名,跑脚本生成渠道包,安装失败。

    2、对apk进行v1和v2同时签名,跑脚本生成渠道包,重新进行签名,安装成功。

    渠道包没有重新签名安装失败的原因?

    我们是通过在apk的META-INF文件夹下写入一个空文件来标识不同渠道包,因为v2的签名机制一旦对文件进行了修改,就会破坏签名,使签名失效,所以就会报安装包未包含任何证书。

    解决方案:重新签名就好了

     

     

    展开全文
  • 在app安装时,系统会采集app的...手机签名的用处就是方尺防止安装的apk是非法来源的,那么系统是怎么进行校验的呢,下面我们通过Android9.0的源码进行分析 查看installPackageLI方法如下 private void installPac...

    在app安装时,系统会采集app的签名进行保存,不了解的请看https://blog.csdn.net/Cailand/article/details/103870784

    手机签名的用处就是方尺防止安装的apk是非法来源的,那么系统是怎么进行校验的呢,下面我们通过Android9.0的源码进行分析

    查看installPackageLI方法如下

    private void installPackageLI(InstallArgs args, PackageInstalledInfo res) {
        ..........................
        ..........................
        PackageParser pp = new PackageParser();
        pp.setSeparateProcesses(mSeparateProcesses);
        pp.setDisplayMetrics(mMetrics);
        pp.setCallback(mPackageParserCallback);
        ..............................
        ..............................
        //解析apk中的签名文件
        try {
            // either use what we've been given or parse directly from the APK
            if (args.signingDetails != PackageParser.SigningDetails.UNKNOWN) {
                pkg.setSigningDetails(args.signingDetails);
            } else {
                PackageParser.collectCertificates(pkg, false /* skipVerify */);
            }
        } catch (PackageParserException e) {
            res.setError("Failed collect during installPackageLI", e);
            return;
        }
        .............................
        .............................
        //获取已安装的信息
        PackageSetting ps = mSettings.mPackages.get(pkgName);
        if (ps != null) {
            if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
    
            // Static shared libs have same package with different versions where
            // we internally use a synthetic package name to allow multiple versions
            // of the same package, therefore we need to compare signatures against
            // the package setting for the latest library version.
            PackageSetting signatureCheckPs = ps;
            if (pkg.applicationInfo.isStaticSharedLibrary()) {
                SharedLibraryEntry libraryEntry = getLatestSharedLibraVersionLPr(pkg);
                if (libraryEntry != null) {
                    signatureCheckPs = mSettings.getPackageLPr(libraryEntry.apk);
                }
            }
    
            // Quick sanity check that we're signed correctly if updating;
            // we'll check this again later when scanning, but we want to
            // bail early here before tripping over redefined permissions.
            final KeySetManagerService ksms = mSettings.mKeySetManagerService;
            if (ksms.shouldCheckUpgradeKeySetLocked(signatureCheckPs, scanFlags)) {
                if (!ksms.checkUpgradeKeySetLocked(signatureCheckPs, pkg)) {
                    res.setError(INSTALL_FAILED_UPDATE_INCOMPATIBLE, "Package "
                            + pkg.packageName + " upgrade keys do not match the "
                            + "previously installed version");
                    return;
                }
            } else {
                try {
                    final boolean compareCompat = isCompatSignatureUpdateNeeded(pkg);
                    final boolean compareRecover = isRecoverSignatureUpdateNeeded(pkg);
                    // We don't care about disabledPkgSetting on install for now.
                    //此处去比较两个apk的签名文件
                    final boolean compatMatch = verifySignatures( signatureCheckPs, null, pkg.mSigningDetails, compareCompat, compareRecover);
                    // The new KeySets will be re-added later in the scanning process.
                    if (compatMatch) {
                        synchronized (mPackages) {
                            ksms.removeAppKeySetDataLPw(pkg.packageName);
                        }
                    }
                } catch (PackageManagerException e) {
                    res.setError(e.error, e.getMessage());
                    return;
                 
                }   
            }
    
            oldCodePath = mSettings.mPackages.get(pkgName).codePathString;
            if (ps.pkg != null && ps.pkg.applicationInfo != null) {
                systemApp = (ps.pkg.applicationInfo.flags &
                ApplicationInfo.FLAG_SYSTEM) != 0;
            }
            res.origUsers = ps.queryInstalledUsers(sUserManager.getUserIds(), true);
        }    
        ............
        ...................
    }

    接下来看verifySignatures方法

    public static boolean verifySignatures(PackageSetting pkgSetting,
                PackageSetting disabledPkgSetting, PackageParser.SigningDetails parsedSignatures,
                boolean compareCompat, boolean compareRecover)
                throws PackageManagerException {
            final String packageName = pkgSetting.name;
            boolean compatMatch = false;
            if (pkgSetting.signatures.mSigningDetails.signatures != null) {
    
                // Already existing package. Make sure signatures match
                boolean match = parsedSignatures.checkCapability(
                        pkgSetting.signatures.mSigningDetails,
                        PackageParser.SigningDetails.CertCapabilities.INSTALLED_DATA)
                                || pkgSetting.signatures.mSigningDetails.checkCapability(
                                        parsedSignatures,
                                        PackageParser.SigningDetails.CertCapabilities.ROLLBACK);
    
                if (!match && compareCompat) {
                    match = matchSignaturesCompat(packageName, pkgSetting.signatures,
                            parsedSignatures);
                    compatMatch = match;
                }
                if (!match && compareRecover) {
                    match = matchSignaturesRecover(
                            packageName,
                            pkgSetting.signatures.mSigningDetails,
                            parsedSignatures,
                            PackageParser.SigningDetails.CertCapabilities.INSTALLED_DATA)
                                    || matchSignaturesRecover(
                                            packageName,
                                            parsedSignatures,
                                            pkgSetting.signatures.mSigningDetails,
                                            PackageParser.SigningDetails.CertCapabilities.ROLLBACK);
                }
                if (!match && isApkVerificationForced(disabledPkgSetting)) {
                    match = matchSignatureInSystem(pkgSetting, disabledPkgSetting);
                }
                if (!match) {
                    throw new PackageManagerException(INSTALL_FAILED_UPDATE_INCOMPATIBLE,
                            "Package " + packageName +
                            " signatures do not match previously installed version; ignoring!");
                }
            }
            // Check for shared user signatures
            if (pkgSetting.sharedUser != null
                    && pkgSetting.sharedUser.signatures.mSigningDetails
                            != PackageParser.SigningDetails.UNKNOWN) {
    
                // Already existing package. Make sure signatures match.  In case of signing certificate
                // rotation, the packages with newer certs need to be ok with being sharedUserId with
                // the older ones.  We check to see if either the new package is signed by an older cert
                // with which the current sharedUser is ok, or if it is signed by a newer one, and is ok
                // with being sharedUser with the existing signing cert.
                boolean match =
                        parsedSignatures.checkCapability(
                                pkgSetting.sharedUser.signatures.mSigningDetails,
                                PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID)
                        || pkgSetting.sharedUser.signatures.mSigningDetails.checkCapability(
                                parsedSignatures,
                                PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID);
                if (!match && compareCompat) {
                    match = matchSignaturesCompat(
                            packageName, pkgSetting.sharedUser.signatures, parsedSignatures);
                }
                if (!match && compareRecover) {
                    match =
                            matchSignaturesRecover(packageName,
                                    pkgSetting.sharedUser.signatures.mSigningDetails,
                                    parsedSignatures,
                                    PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID)
                            || matchSignaturesRecover(packageName,
                                    parsedSignatures,
                                    pkgSetting.sharedUser.signatures.mSigningDetails,
                                    PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID);
                    compatMatch |= match;
                }
                if (!match) {
                    throw new PackageManagerException(INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,
                            "Package " + packageName
                            + " has no signatures that match those in shared user "
                            + pkgSetting.sharedUser.name + "; ignoring!");
                }
            }
            return compatMatch;
        }

    调用了SigningDetails的checkCapability的方法,继续深入

    public boolean signaturesMatchExactly(SigningDetails other) {
        return Signature.areExactMatch(this.signatures, other.signatures);
    }

    查看Signature.areExactMatch

    public static boolean areExactMatch(Signature[] a, Signature[] b) {
        return (a.length == b.length) && ArrayUtils.containsAll(a, b)
                    && ArrayUtils.containsAll(b, a);
    }

    从这里可以看到,只有传入的两个签名数据(Certificate)完全一样才返回true,下面的判断同理,而最后如果match还是false就会抛出异常.

    展开全文
  • 华为手机提示更新包与已安装应用的签名不一致

    万次阅读 多人点赞 2019-08-16 20:20:54
    华为手机提示更新包与已安装应用的签名不一致自己尝试解决网上寻找解决方案1、配置adb2、查看APK的包名3、彻底卸载原有应用信息新的思考 最近使用华为手机(HUAWEI Mate 20)调试程序,发现一个问题。直接使用Android...
  • 试了百度上的一些方法,不管用,后来发现删了手机分身再安装就没问题了,应该是手机分身里有残留的信息。测试手机是红米3s
  • 如何快捷的查看app签名信息,排查app安装失败原因。
  • Android 真机调试安装应用时与已安装应用签名文件不一致问题一解决方法问题二解决方法注 问题一 android开发中我们有时会更改签名文件,这个时候如果重新安装应用则会在进行安装应用时遇到这样一个问题——与已安装...
  • 最近在做版本更新后重新安装apk的功能,安装后发现报错: 发现原因是因为
  • 因为你原来安装的可能是没签名的apk(测试方便),后来安装的是签名后的apk,未卸载安装 同包名签名不同 会有这个问题 或者真的如提示所说,是因为同包签名不一致导致的。同包签名的话建议采用相同的keystore。 ...
  • Android应用程序自动更新失败,报错原因已安装了存在数字签名冲突的同名数据包。通俗来讲,就是调试手机同名应用程序的签名与更新数据包签名不一致。 往往造成这种情况的是调试手机中安装有开发板的Android应用程序...
  • 你可能还会为此以为自己的代码有问题,然后就去百度,百度一堆问题自己一个一个试,结果试了一点改进都没有,所以我这里尤其讲一下签名和apk安装这一部分。 假如你出现了代码写完了,调试运行都是对的,API运行也都...
  • chocolatey的安装chocolatey安装失败的解决方法 具体的下载方法可以查看官网: https://chocolatey.org/install 安装过程中发现问题,在PowerShell中执行该命令后提示如下错误信息。 Installing chocolatey on ...
  • 2.检查你的签名文件是否是发布版本,debug 签名的应用程序不能在 Android Market 上发布,它会强制你使用自己的签名,debug.keystore 在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行 apk 版本升级...
  • 出现这样的问题,是因为没有在gradle文件中配置签名设置。 因为你编译的时候是使用debug模式的apk文件,如果没有配置签名设置就会出现签名不一致的问题。 附上gradle配置签名的代码 signingConfigs { ...
  • 小米手机 已安装了存在签名冲突的应用 在小米手机上安装软件有时候会出现已安装了相同签名的应用,但是实际上手机怎么也找不到相同的应用,也没有安装相同的debug版本。最后才发现是小米手机分身的问题。 如果开启了...
  • app同包同签名不能安装问题

    千次阅读 2017-06-24 14:49:27
    今天博主团队之间...在安装的时候出现,安装签名不一致(安装失败)的提示。 让我们很是困扰。后来发现问题所在,在这里总结一下: android { compileSdkVersion 25 buildToolsVersion '25.0.3' defaultConfi
  • 如果你不是开发者:如果你在Android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:安装了存在签名冲突的同名数据包,然后安装失败。这是因为旧版软件的签名信息新版不一致造成的。你可以卸载这个...
  • iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面将一些常见原因总结如下,方便开发者进行排查。 在 iOS 9 中启动应用时,出现提示“未受信任的企业级开发者” 这样问题是...
  • 一次我再使用同事的华为荣耀机型进行调试时,再覆盖安装一个签名发布包结果覆盖失败,但是同事又把签名包手机上装的debug调试包卸载后还是安装失败。后来找了查了一圈资料,是因为安卓手机系统不会真的卸载apk.所以...
  • 在刚5.0出来的时候, 很多apk 在 5.0上会安装失败, 原因其实是, 安装的apk 中的 自定义权限 手机上面已经有的app 的自定义权限相同。 问题:当初有做 百度地图的同事就遇到了这个问题, app一直安装...
  • 在电脑开发环境上,USB调试多次后,使用正式签名版本安装时发现,debug版正式版的签名不一致,导致安装失败,但是如果直接在手机桌面拖拽删除了debug版,就有可能会提示这个错误,因为系统没有彻底将debug版的...
  • 如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:安装了存在签名冲突的同名数据包,然后安装失败。这是因为旧版软件的签名信息新版不一致造成的。你可以卸载这个...
  • 如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:安装了存在签名冲突的同名数据包,然后安装失败。这是因为旧版软件的签名信息新版不一致造成的。你可以卸载这个软件,然后安装新版...
  • iOS ipa 安装包安装失败原因

    万次阅读 2016-12-26 19:54:54
    iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面将一些常见原因总结如下,方便开发者进行排查。 在 iOS 9 中启动应用时,出现提示“未受信任的企业级开发者” 这样问题是因为...
  • phongap 命令行签名,apk签名成功,但是安装时提示包解析错误 利用phonegap 建立Android工程时 ,进行 apk 签名时,签名成功,但是apk安装时提示包解析错误; phonegap建立工程详细步骤,及问题解决方式: ...
  • Android手机出现 已安装了存在签名冲突的同名数据包 的原因及解决办法
  • 如果你不是开发者:如果你在Android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:安装了存在签名冲突的同名数据包,然后安装失败。这是因为旧版软件的签名信息新版不一致造成的。你可以卸载这个...
  • 果你在android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:安装了存在签名冲突的同名数据包,然后安装失败。这是因为旧版软件的签名信息新版不一致造成的。你可以卸载这个软件,然后安装新版...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,450
精华内容 10,580
关键字:

安装失败与已安装签名不同