【问题标题】:Android App Users Get "App not installed" When Attempting to UpdateAndroid 应用程序用户在尝试更新时收到“未安装应用程序”
【发布时间】:2016-03-30 16:13:04
【问题描述】:

更新:对于那些询问用户收到哪些错误代码的人:没有错误代码。它只是打开一个空白的安装后页面,上面写着“未安装应用程序”,旁边有一个大“X”。不同版本的 Android 可能有不同的消息。没有迹象表明安装过程中出了什么问题。

更新 2: 一些用户报告他们在尝试从 Play 商店安装/更新时收到错误代码“-504”,并且在手动尝试安装时收到“应用未安装”消息.apk。我不知道这个错误与用户无法安装有什么关系,但是关于这个主题的唯一 2 个问题的解决方案并没有为我解决任何问题。我已经包含了更新的清单和构建文件。

更新 3: 用户在成功安装 IAB 后的版本中报告此问题时出现,这进一步否定了此问题是由引入 IAB 引起的概念。

更新 4: 问题似乎在于尝试更新到新版本的老用户,而不是新用户。考虑到这一点,这个问题很可能是INSTALL_FAILED_UID_CHANGED 的结果。查看版本历史记录,我对用户无法更新的问题版本所做的重大更改是删除了我不再打算使用的可绘制对象。

要求用户完成解决此问题的程序是不合理的。如果有一个我可以强制执行的解决方案可以为有缺陷的用户修复它,那太好了……如果没有,我现在至少可以做的是控制损坏并确保将来不会发生这种情况。

注意:以下是原始帖子推测问题是由于将 IAB 引入应用程序的结果。从那时起,它变得越来越不可能成为原因。无论如何,帖子仍然有相关信息。

------------------------------------------------------------------------------------------

原标题:Android App 用户在引入 IAB 后得到“App not installed”

我最近在 Google Play 上发布的应用中引入了 IAB。过了一段时间,我开始收到一些用户的报告,他们在尝试安装或更新它时收到“安装失败”错误。 让我认为这是由引入 IAB 引起的,是一位特定的长期用户通过电子邮件向我发送电子邮件,说当他尝试使用 IAB 更新到版本时,安装程​​序提到引入了新权限并需要用户的许可。一旦获得批准,它就会说应用程序安装失败。

我已经进行了一些谷歌搜索,从他们的角度来看似乎是一个问题,一位用户甚至尝试手动安装 .apk 并删除了上述权限,但没有成功。我不想确定这不是我做错了什么,而是我必须接受一些用户的必然。

请注意,绝大多数人在安装应用程序时都没有问题,直到引入 IAB 之后我才收到任何有关此问题的报告。如果有少量用户流失,我不会那么困扰,但问题是,这些用户损害了我的应用程序的评级。用户还提到他们可以很好地安装应用程序,不包括我自己的。

我不排除用户甚至在引入 IAB 之前就已经收到这些错误的可能性,并且链接可能是错误的。

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest package = "com.jjsoftware.fullscientificcalculator"
      xmlns:android = "http://schemas.android.com/apk/res/android">

<uses-permission android:name = "android.permission.VIBRATE"/>
<uses-permission android:name = "com.android.vending.BILLING"/>

<application
    android:allowBackup = "true"
    android:fullBackupContent = "true"
    android:icon = "@drawable/logo"
    android:label = "@string/app_name">
    <activity
        android:name = ".MainActivity"
        android:hardwareAccelerated = "false"
        android:label = "@string/app_name"
        android:screenOrientation = "portrait"
        android:theme="@style/AppTheme">
        <intent-filter>
            <action android:name = "android.intent.action.MAIN"/>
            <category android:name = "android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity
        android:name = ".SettingsActivity"
        android:theme = "@style/PreferencesTheme">
        <intent-filter>
            <action android:name = ".SettingsActivity"/>
            <category android:name = "android.intent.category.PREFERENCE"/>
        </intent-filter>
    </activity>
</application>

这是 Gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.jjsoftware.fullscientificcalculator"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 102
        versionName "1.679"
    }

    sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
}

dependencies {
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.android.support:gridlayout-v7:23.2.1'
    compile files('libs/exp4j-0.4.5.jar')
    compile files('libs/EJML-core-0.28.jar')
    compile files('libs/EJML-dense64-0.28.jar')
    compile files('libs/Jama-1.0.3.jar')
    compile files('libs/EJML-simple-0.28.jar')
}

并且,如果需要,顶层构建:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

【问题讨论】:

  • 您需要用户尝试手动安装 APK 并准确告诉您输出。安装失败错误通常是由错误的版本代码或未正确签名引起的。不过,这些错误通常应该被 Google Play 捕获。我们仍然需要知道用户看到的确切错误。如果您愿意上传预计费版本和计费后版本,我可以看看是否有问题。
  • 这正是我所做的。除了显示未安装应用程序的窗口外,没有其他输出。我也尝试过删除权限。看来suku的回答是最有可能的,我现在正在测试。
  • 之前和之后是什么意思?我只是完全删除了计费权限,用户仍然无法安装。我没有以前版本的清单。
  • 有问题,不知道这个问题是从哪里开始的。记住只有少数用户能得到这个的情况。
  • 任何较旧的 APK 都可以,一个月前,两个月前,这并不重要。它不需要是问题之前的 APK。

标签: android android-gradle-plugin apk android-manifest


【解决方案1】:

清单文件中的android:largeHeap="true"&gt;&gt; 行有错字。 xml 行以&gt;&gt; 结尾。这可能会导致错误。

【讨论】:

  • 我认为这可能是提出问题时的拼写错误。 APK 不会在编译时出现此错误。所以用户一开始不可能安装它。
  • suku 是正确的,应用程序编译时使用了该错字,这很可能是问题所在。编辑:测试人员报告这不是导致安装失败的问题。
【解决方案2】:

可能是手机的 Google Play 服务版本低于您在 APK 中定义的最低版本。

如果是这种情况,您无能为力,除了让用户升级他们的 google 服务 (https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en) 或降低您的版本。

您可能还需要将以下内容添加到您的清单中。 (我认为这是用来比较手机中安装的版本与apk所需的版本)

<application ...>

    <!-- This meta-data tag is required to use Google Play Services. -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" /> 

</application>

【讨论】:

  • 虽然还没有任何简明的答案,但由于我的赏金即将用完,我会奖励给你而不是浪费它,因为这对我来说很新,而且摘录可能防止将来出现问题。
【解决方案3】:

我在我的 Android 设备上为我正在开发的应用程序安装新 APK 时收到此错误。

我检查了设备上的调试日志(使用“adb -d logcat > log.txt”),发现一个条目说“PackageManager:检测到降级:更新版本代码 2 比当前的 10000 旧”。显然,版本控制出了点问题。

我卸载了该软件包,然后能够毫无问题地安装 APK。

【讨论】:

    【解决方案4】:

    请记住,最新的 Android 版本(Marshmallow 版本)已更改权限,以便为用户提供更多访问权限。因此,在清单中定义权限是不够的。

    您需要通过代码确保用户在使用应用程序时启用了计费权限。解决此问题的最简单方法是将目标 SDK 设置为 v-22。这应该可以暂时解决您的问题。

    然而,真正的解决方案是处理 Marshmallow 中引入的新权限。操作方法如下:

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    
        switch(requestCode) {
            case BILLING_REQUEST:
                if (canAccessBilling()) {
                    callBillingPerms();
                }
                break;
        }
    }
    
    private void callBillingPerms() {
        Toast.makeText(this, "We need your permission to access Billing", Toast.LENGTH_SHORT).show();
    }
    
    private boolean canAccessSMS() {
        return(hasPermission(Manifest.vending.BILLING));
    }
    
    @TargetApi(Build.VERSION_CODES.M)
    private boolean hasPermission(String perm) {
        return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm));
    }
    

    希望这会有所帮助:)

    【讨论】:

    • 计费权限未列为“危险”,因此不需要在运行时请求。此外,构建工具版本不会确定是否启用运行时权限,目标 SDK 会。 (23以上使用棉花糖权限,22以下不使用)
    • 你在评论的第二部分是对的@Kuffs。我会改变我的答案。
    【解决方案5】:

    也许错误在用户方面。

    This article 声明如下:

    Google Play - 错误 504

    问题

    由于出现错误,无法下载应用。

    第一个解决方案

    通常,请:转到设置 > 应用程序 > 全部 > Google Play 商店并清除缓存和清除数据。还为 Google 服务框架清除缓存和清除数据。

    第二种解决方案

    尝试删除您的 GMail 帐户

    这个Stack Exchange answer 讨论了类似的想法。

    根据list of status codes at Wikipedia,504 错误的含义如下:

    504 网关超时
    服务器充当网关或代理,没有收到来自上游服务器的及时响应。

    询问您的用户,上述操作是否可以解决他们的问题。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多